Ultralytics YOLO27: Запишись в список ожидания.
Начать

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. Результат содержит изображение с аннотациями и распознанный текст:

OCR текста на изображениях с Ultralytics YOLO26
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:

АргументТипПо умолчаниюОписание
modelstrNoneПуть к файлу модели Ultralytics YOLO.
recognizerstr или Callable'paddleocr'Бэкенд распознавания текста или вызываемый объект, который принимает фрагмент BGR и возвращает (text, confidence).
line_widthint2Толщина линий рамок, ключевых точек и счётчиков, которые рисует решение.
verboseboolTrueВключает журнал решения для каждого кадра с указанием формы входных данных, количества объектов по классам и скорости обработки. Сам вызов отслеживания всегда выполняется без вывода сообщений.

Также поддерживаются следующие настройки визуализации:

АргументТипПо умолчаниюОписание
showboolFalseЕсли True, показывает аннотированные изображения или видео в окне. Полезно для мгновенной визуальной проверки во время разработки или тестирования.
show_confboolTrueПоказывает оценку уверенности каждой детекции рядом с меткой. Позволяет оценить уверенность модели в каждой детекции.
show_labelsboolTrueПоказывает метки каждой детекции на визуализации. Помогает сразу понять, какие объекты обнаружены.

Как работает OCR текста на изображениях#

  1. Обнаружение текста: YOLO26 формирует осево-ориентированные рамки, повёрнутые рамки или полигоны сегментации.
  2. Создание фрагментов для распознавания: рамки обрезаются по границам изображения. OBB выравниваются аффинным преобразованием вдоль ребра, которое простирается слева направо на наибольшее расстояние, поэтому почти квадратные рамки остаются вертикальными, а наклонные строки текста располагаются горизонтально в направлении чтения. Для полигонов сегментации выравнивается минимальный охватывающий повёрнутый прямоугольник, при этом исходный полигон сохраняется. Фрагменты, высота которых как минимум в 1,5 раза превышает ширину, поворачиваются на 90° против часовой стрелки, как в PaddleOCR.
  3. Распознавание текста: PaddleOCR обрабатывает все фрагменты пакетами по 16. Пользовательские распознаватели получают по одному фрагменту за раз.
  4. Упорядочивание и отрисовка результатов: текст группируется в горизонтальные строки и упорядочивается сверху вниз и слева направо. Для не-ASCII-текста, например китайского, при визуализации используется шрифт Unicode.

Координаты всегда относятся к исходному изображению, а не к входным данным детектора или фрагменту для распознавания.

Использование пользовательского распознавателя#

Передай вызываемый объект, чтобы подключить другую модель распознавания, не меняя этапы обнаружения, обработки геометрии и упорядочивания. Вызываемый объект запускается один раз для каждого непустого фрагмента BGR numpy.ndarray. При каждом вызове возвращай один кортеж (text, confidence), а не список результатов пакетной обработки:

Элемент кортежаДопустимый типОписание
textstrРаспознанный текст для этого фрагмента. Если текст не распознан, верни "".
confidencefloat, 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 — для записей в детерминированном порядке чтения:

КлючТипОписание
textstrРаспознанный текст.
confidencefloatУверенность распознавания, хранящаяся отдельно от уверенности обнаружения.
detection_confidencefloatУверенность детектора YOLO.
detection_indexintИндекс исходного обнаружения до сортировки в порядке чтения.
polygonlist[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.

Участники

Комментарии

Задай вопрос, поделись результатами или помоги кому-нибудь.