OCR текста на изображениях с Ultralytics YOLO26
Что такое OCR текста на изображениях?#
Распознавание символов (OCR) обнаруживает и считывает текст на изображениях. Решение для OCR сочетает детектор текста Ultralytics YOLO26 с бэкендом распознавания текста. Оно поддерживает осево-ориентированные рамки обнаружения, повёрнутые рамки (OBB) и полигоны сегментации, а затем возвращает распознанный текст в порядке чтения.
Обнаружение и распознавание — отдельные компоненты, поэтому ты можешь сочетать детектор текста на изображениях с PaddleOCR или собственной моделью распознавания.
Зачем использовать OCR текста на изображениях?#
- Гибкая геометрия текста: используй модели обнаружения, OBB или сегментации для горизонтального, повёрнутого и неровно расположенного текста.
- Взаимозаменяемое распознавание: запускай PaddleOCR без дополнительного кода интеграции или передавай вызываемый объект для другой модели.
- Структурированный вывод: получай распознанный текст, уверенность распознавания и обнаружения, исходную геометрию и изображение с аннотациями из одного объекта результатов.
Запусти OCR текста на изображениях с YOLO26#
PaddleOCR необязателен и загружается при создании решения OCR с параметром recognizer="paddleocr"; при необходимости устанавливаются PaddleOCR 3.x и сборка PaddlePaddle для CPU. Для распознавания на GPU сначала установи подходящую сборку paddlepaddle-gpu; пакеты для OCR не добавляются в базовые зависимости Ultralytics.
Передай изображение и детектор текста в решение OCR. Результат содержит изображение с аннотациями и распознанный текст:
yolo solutions ocr model="scene-text-obb.pt" source="path/to/video.mp4" recognizer="paddleocr"Контрольные точки YOLO26-Text#
В открытое семейство YOLO26-Text входят контрольные точки n, s, m, l и x для OBB. Укажи ULTRALYTICS_API_KEY, присвоив ему собственный ключ API Платформы Ultralytics, а затем загрузи контрольную точку по URI платформы:
export ULTRALYTICS_API_KEY="your-api-key"ocr = solutions.OCR(model="ul://ultralytics-yolo/yolo26-text/yolo26n-text", recognizer="paddleocr")
result = ocr(im0)Замени yolo26n-text на yolo26s-text, yolo26m-text, yolo26l-text или yolo26x-text, чтобы использовать более крупную модель.
Аргументы OCR#
Вот таблица с аргументами OCR:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
model | str | None | Путь к файлу модели Ultralytics YOLO. |
recognizer | str или Callable | 'paddleocr' | Бэкенд распознавания текста или вызываемый объект, который принимает фрагмент BGR и возвращает (text, confidence). |
line_width | int | 2 | Толщина линий рамок, ключевых точек и счётчиков, которые рисует решение. |
verbose | bool | True | Включает журнал решения для каждого кадра с указанием формы входных данных, количества объектов по классам и скорости обработки. Сам вызов отслеживания всегда выполняется без вывода сообщений. |
Также поддерживаются следующие настройки визуализации:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
show | bool | False | Если True, показывает аннотированные изображения или видео в окне. Полезно для мгновенной визуальной проверки во время разработки или тестирования. |
show_conf | bool | True | Показывает оценку уверенности каждой детекции рядом с меткой. Позволяет оценить уверенность модели в каждой детекции. |
show_labels | bool | True | Показывает метки каждой детекции на визуализации. Помогает сразу понять, какие объекты обнаружены. |
Как работает OCR текста на изображениях#
- Обнаружение текста: YOLO26 формирует осево-ориентированные рамки, повёрнутые рамки или полигоны сегментации.
- Создание фрагментов для распознавания: рамки обрезаются по границам изображения. OBB выравниваются аффинным преобразованием вдоль ребра, которое простирается слева направо на наибольшее расстояние, поэтому почти квадратные рамки остаются вертикальными, а наклонные строки текста располагаются горизонтально в направлении чтения. Для полигонов сегментации выравнивается минимальный охватывающий повёрнутый прямоугольник, при этом исходный полигон сохраняется. Фрагменты, высота которых как минимум в 1,5 раза превышает ширину, поворачиваются на 90° против часовой стрелки, как в PaddleOCR.
- Распознавание текста: PaddleOCR обрабатывает все фрагменты пакетами по 16. Пользовательские распознаватели получают по одному фрагменту за раз.
- Упорядочивание и отрисовка результатов: текст группируется в горизонтальные строки и упорядочивается сверху вниз и слева направо. Для не-ASCII-текста, например китайского, при визуализации используется шрифт Unicode.
Координаты всегда относятся к исходному изображению, а не к входным данным детектора или фрагменту для распознавания.
Использование пользовательского распознавателя#
Передай вызываемый объект, чтобы подключить другую модель распознавания, не меняя этапы обнаружения, обработки геометрии и упорядочивания. Вызываемый объект запускается один раз для каждого непустого фрагмента BGR numpy.ndarray. При каждом вызове возвращай один кортеж (text, confidence), а не список результатов пакетной обработки:
| Элемент кортежа | Допустимый тип | Описание |
|---|---|---|
text | str | Распознанный текст для этого фрагмента. Если текст не распознан, верни "". |
confidence | float, int или numpy.floating | Числовая уверенность распознавания, которую решение преобразует в float. |
def recognize(crop):
# Запусти модель распознавания на фрагменте BGR и декодируй здесь её вывод.
return "example", 0.95
ocr = solutions.OCR(model="custom-text.pt", recognizer=recognize)
result = ocr(im0)При указании неподдерживаемого имени бэкенда возникает ошибка ValueError. Если текст не обнаружен, result.texts остаётся пустым, а распознаватель не вызывается.
Результаты OCR#
Каждый вызов возвращает объект SolutionResults. Используй result.plot_im для изображения с аннотациями, а result.texts — для записей в детерминированном порядке чтения:
| Ключ | Тип | Описание |
|---|---|---|
text | str | Распознанный текст. |
confidence | float | Уверенность распознавания, хранящаяся отдельно от уверенности обнаружения. |
detection_confidence | float | Уверенность детектора YOLO. |
detection_index | int | Индекс исходного обнаружения до сортировки в порядке чтения. |
polygon | list[list[float]] | Полигон в координатах исходного изображения: четыре угла для обнаружения рамок и OBB или контур маски. |
Зависимости и лицензии#
| Компонент | Обязательный параметр | Роль | Лицензия |
|---|---|---|---|
| Ultralytics | Да | Обнаружение с помощью YOLO, геометрия фрагментов и управление результатами | AGPL-3.0 |
| PaddlePaddle | Только для recognizer="paddleocr" | Среда выполнения распознавания | Apache-2.0 |
| PaddleOCR 3.x | Только для recognizer="paddleocr" | Модели распознавания текстовых строк и адаптер для инференса | Apache-2.0 |
| Пользовательский вызываемый объект | Нет | Интеграция распознавания, принадлежащая пользователю | Определяется бэкендом |
При первом использовании PaddleOCR может загрузить веса для распознавания. Перед упаковкой или развёртыванием этих артефактов ознакомься с карточкой выбранной модели и условиями распространения. Для пользовательских контрольных точек действуют отдельные лицензии.
Часто задаваемые вопросы#
Да. Передай вызываемый объект в качестве
recognizerи возвращай(text, confidence)для каждого фрагмента BGR. Ознакомься с разделом «Использование пользовательского распознавателя», чтобы узнать о требованиях к входным и выходным данным.Нет. OCR обрабатывает каждое входное изображение независимо, без идентификаторов треков и сохранения результатов распознавания. Если OCR нужен для каждого кадра, обрабатывай каждый кадр видео как отдельное входное изображение.
Ты можешь экспортировать детектор YOLO в обычном режиме экспорта, но PaddleOCR или пользовательский распознаватель не встраивается в артефакт детектора ONNX, TensorRT или другого формата. Развёртывай экспортированный детектор и среду выполнения распознавания как отдельные компоненты либо оставь этот слой композиции на Python.
Комментарии
Задай вопрос, поделись результатами или помоги кому-нибудь.