Распознавание лиц, объектов и текста
Три прикладных направления узкого ИИ часто идут в одном продукте — камера находит лица и объекты, микрофон — речь, текст — сущности и тональность. Ниже — как устроены задачи, какие метрики смотреть и когда обучать свою модель, а когда вызывать облачный API. Расширенный обзор архитектур — в Принцип работы современных ИИ-систем; код CNN — Keras и TensorFlow.
Три задачи — три выхода
| Задача | Вход | Выход |
|---|---|---|
| Лицо | Кадр | Bounding box, иногда эмбеддинг для сравнения |
| Объект | Кадр | Класс + координаты рамки (часто несколько объектов) |
| Текст (NLP) | Строка или транскрипт | Метки сущностей, тональность, категория |
Классификация изображения ("что на картинке в целом") — один класс на всё фото. Детекция — несколько объектов с координатами. Сегментация — маска по пикселям; подробнее в Алгоритмы ИИ.
Распознавание лиц
Цепочка в проде обычно такая:
- Детекция — найти область лица (Haar cascades, MTCNN, RetinaFace, модели в OpenCV и облачных API).
- Выравнивание — поворот и масштаб по ключевым точкам (глаза, нос).
- Эмбеддинг — вектор фиксированной длины (FaceNet, ArcFace); сравнение по косинусному расстоянию.
- Решение — порог "тот же человек / другой" или классификатор эмоций поверх кропа.
# Иллюстрация: эмбеддинги через готовую библиотеку (нужен pip install deepface)
from deepface import DeepFace
result = DeepFace.verify(
img1_path="person_a_1.jpg",
img2_path="person_a_2.jpg",
model_name="Facenet",
enforce_detection=False,
)
print(result["verified"], result["distance"])
Биометрия и видеонаблюдение регулируются законом (в т.ч. 152-ФЗ в РФ, GDPR в ЕС). Нужны основания обработки, уведомление субъектов, контроль качества на разных группах населения — модели часто хуже работают на тёмной коже при смещённом обучающем наборе.
Облачные Face API (Azure AI Vision, Amazon Rekognition) закрывают детекцию и сравнение без своего GPU — см. Cognitive Services.
Детекция объектов
YOLO, SSD, семейство R-CNN предсказывают для каждого кадра набор рамок (x, y, w, h) и класс (человек, автомобиль, знак).
Типичный стек разработчика:
- обучение — PyTorch + Ultralytics YOLO или TensorFlow;
- инференс в реальном времени — ONNX, TensorRT, OpenVINO;
- разметка — Label Studio, CVAT.
Метрики: mAP (mean Average Precision) на тестовом наборе с IoU-порогом; в бизнесе добавляют задержку (FPS) и долю ложных срабатываний на линии.
Transfer learning на COCO/ImageNet ускоряет запуск — заморозить backbone, дообучить голову на своих классах ("дефект", "шлем", "QR на коробке").
Текст — OCR, NER, тональность
OCR (текст на изображении)
Optical Character Recognition извлекает строки с фото документов, вывесок, сканов. Цепочка — предобработка (бинаризация, выравнивание) → детекция строк → распознавание символов (CRNN, трансформеры). Готовые движки — Tesseract, EasyOCR, облачный Document Intelligence / Vision Read API.
Structured extraction — изображение → JSON
Для форм, счетов и рецептов недостаточно "плоского текста" — нужны поля с типами (дата, сумма, список позиций). Современный стек:
- Layout parsing — где на странице таблица, подпись, штамп (облачный Document Intelligence, Landing AI ADE, локальный GLM-OCR через Ollama).
- Vision-LLM или OCR — извлечение содержимого по блокам.
- Structured output — библиотека Instructor + Pydantic-модель: LLM возвращает JSON, схема валидируется до записи в БД.
Для доменных данных добавляют внешнюю валидацию: например, сверка названия препарата с справочником RxNorm после OCR рецепта.
| Подход | Когда |
|---|---|
| Tesseract + regex | Простые однотипные бланки |
| Облачный Read API | Быстрый MVP, много языков |
| Vision-LLM + Instructor | Сложная вёрстка, нестандартные формы |
| Локальный VLM (Ollama) | Закрытый контур, персональные данные |
Runnable-примеры — Практикум — проекты по ИИ (ветка OCR). Связка OCR → текст → RAG — типичный pipeline для чата по корпоративным сканам.
NER (именованные сущности)
Из текста извлекают персоны, организации, локации, даты:
# pip install spacy && python -m spacy download ru_core_news_sm
import spacy
nlp = spacy.load("ru_core_news_sm")
doc = nlp("Иванов подписал договор в Москве 12 мая 2025 года.")
for ent in doc.ents:
print(ent.text, ent.label_)
Для русского и доменной лексики (медицина, право) часто дообучают трансформеры (BERT-подобные) на размеченном корпусе или используют облачный Language API.
Тональность и классификация текста
Бинарная или многоклассовая задача для sklearn (TfidfVectorizer + LogisticRegression) или fine-tuned BERT. Для длинных отзывов смотрят macro-F1 по классам.
Своя модель или облако
| Критерий | Своя модель (Keras / PyTorch / OpenCV) | Облачный Cognitive API |
|---|---|---|
| Данные | Есть разметка или можно собрать | Мало данных, нужен быстрый MVP |
| Задержка / офлайн | Edge, закрытый контур | Допустим HTTPS-вызов |
| Стоимость | GPU, MLOps | Оплата за 1000 вызовов |
| Кастомизация | Полная | Ограничена fine-tune / Custom Vision |
Гибрид: детекция на устройстве, тяжёлый OCR в облаке.
Метрики и типичные ошибки
| Ошибка | Последствие |
|---|---|
| Утечка: аугментация до split | Завышенный mAP на тесте |
| Один порог для всех сцен | Пропуски на тёмных кадрах |
| Игнор bias в лицах | Дискриминация в проде |
| OCR без проверки языка | Мусор в полях формы |
Связанные разделы — компьютерная графика (аугментации, TFRecord), тестирование ML.
Маршрут чтения
- Keras и TensorFlow — MNIST, CNN.
- Transfer learning — свои классы на ImageNet.
- Cognitive Services — REST без обучения.
- Алгоритмы ИИ — YOLO, сегментация, NLP-разделы справочника.