Перейти к основному содержимому

Распознавание лиц, объектов и текста

Разработчику

Три прикладных направления узкого ИИ часто идут в одном продукте — камера находит лица и объекты, микрофон — речь, текст — сущности и тональность. Ниже — как устроены задачи, какие метрики смотреть и когда обучать свою модель, а когда вызывать облачный API. Расширенный обзор архитектур — в Принцип работы современных ИИ-систем; код CNN — Keras и TensorFlow.


Три задачи — три выхода

ЗадачаВходВыход
ЛицоКадрBounding box, иногда эмбеддинг для сравнения
ОбъектКадрКласс + координаты рамки (часто несколько объектов)
Текст (NLP)Строка или транскриптМетки сущностей, тональность, категория

Классификация изображения ("что на картинке в целом") — один класс на всё фото. Детекция — несколько объектов с координатами. Сегментация — маска по пикселям; подробнее в Алгоритмы ИИ.


Распознавание лиц

Цепочка в проде обычно такая:

  1. Детекция — найти область лица (Haar cascades, MTCNN, RetinaFace, модели в OpenCV и облачных API).
  2. Выравнивание — поворот и масштаб по ключевым точкам (глаза, нос).
  3. Эмбеддинг — вектор фиксированной длины (FaceNet, ArcFace); сравнение по косинусному расстоянию.
  4. Решение — порог "тот же человек / другой" или классификатор эмоций поверх кропа.
# Иллюстрация: эмбеддинги через готовую библиотеку (нужен 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

Для форм, счетов и рецептов недостаточно "плоского текста" — нужны поля с типами (дата, сумма, список позиций). Современный стек:

  1. Layout parsing — где на странице таблица, подпись, штамп (облачный Document Intelligence, Landing AI ADE, локальный GLM-OCR через Ollama).
  2. Vision-LLM или OCR — извлечение содержимого по блокам.
  3. 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.


Маршрут чтения

  1. Keras и TensorFlow — MNIST, CNN.
  2. Transfer learning — свои классы на ImageNet.
  3. Cognitive Services — REST без обучения.
  4. Алгоритмы ИИ — YOLO, сегментация, NLP-разделы справочника.