Ultralytics YOLO27: Вступи в список ожидания.
Лицензия YOLO
Ultralytics YOLO

OCR на Python с Ultralytics YOLO26: читай документы, фотографии и PDF под любым углом

Читай текст на изображениях и страницах PDF под любым углом с помощью Ultralytics YOLO26-Text и PP-OCRv6 — всего в несколько строк Python, на CPU или GPU, с поддержкой TensorRT.

Цзин ЦюJing Qiu13 мин. чтения
Демонстрация Ultralytics YOLO26 OCR в реальном времени: модель читает уличную табличку Wall St, обводит и перечисляет слова 11-21, WALL ST и 1-26 с оценками уверенности, рядом показан запускающий её код Python

Как выполнить OCR на Python для повернутого скана, фотографии вывески с телефона или страницы PDF и получить слова в том порядке, в котором их прочитал бы человек? С пакетом Ultralytics для этого нужен один класс: solutions.OCR() обнаруживает текст с помощью модели YOLO26-Text от Ultralytics, распознаёт каждое слово с помощью распознавателя PP-OCRv6 из PaddleOCR и возвращает распознанные слова построчно при любом повороте страницы, на CPU или GPU.

Этот конвейер появился недавно. Ultralytics 8.4.210 перестроил OCR-решение на базе PP-OCRv6 и ONNX Runtime, добавив обработку поворота и порядка чтения, а в 8.4.211 появился дополнительный распознаватель TensorRT. В нашем тестировании при размере изображения 1280 стандартная конфигурация набрала F1 по словам 0.931 на шести страницах PDF и 0.722 на 80 фотографиях HierText. На RTX PRO 6000 движок TensorRT FP16 с кэшированием распознал 251 слово, обнаруженное на одной фотографии, за 82 мс против 249 мс с ONNX Runtime на CUDA.

В этом руководстве рассказывается, как работает конвейер, как запускать его на изображениях и PDF, какова его скорость и какие языки он распознаёт на данный момент. Ultralytics разрабатывает один из сравниваемых ниже вариантов OCR, поэтому сравнение опирается на задокументированные возможности каждого проекта.

YOLO26 OCR распознаёт страницу в два этапа, а затем упорядочивает слова#

У оптического распознавания символов (OCR) две задачи: найти текст, а затем прочитать его. Решение Ultralytics для OCR чётко разделяет эти задачи:

  • Обнаружение: модель YOLO26-Text — детектор ориентированных ограничивающих рамок — обводит текст повёрнутыми рамками. Доступны размеры n, s, m, l и x; по умолчанию используется модель x.
  • Распознавание: модель PP-OCRv6 medium читает каждый фрагмент. Она работает на базе ONNX Runtime, включённого в выпуск ресурсов Ultralytics, поэтому устанавливать PaddlePaddle не нужно. Фрагменты, в которых ничего не удалось распознать, отбрасываются.
  • Упорядочивание: слова объединяются в строки и возвращаются сверху вниз и слева направо; каждому слову присваивается номер строки.

Каждое слово возвращается в виде записи с текстом, оценкой уверенности распознавания, оценкой уверенности детектора, номером строки и полигоном в координатах исходного изображения. Поскольку две оценки уверенности хранятся отдельно, слово, которое было обнаружено с высокой уверенностью, но распознано с низкой, можно отправить на проверку человеку, а не полагаться на него.

Эти два этапа остаются независимыми. Ты можешь заменить детектор на более компактный, использовать собственную модель обнаружения или сегментации либо другой распознаватель — обработка поворота и порядок чтения продолжат работать. До установки чего-либо ты можешь опробовать тот же код в браузере на нашей странице обработки документов.

Поворот и переворот страниц не мешают читать их в правильном порядке#

Решение определяет поворот страницы по обнаруженному тексту, поэтому предварительно выравнивать или поворачивать страницы не нужно:

  1. Определи направление текста. Вычисляется средний угол длинной стороны обнаруженных рамок с весом, зависящим от их вытянутости. Рамки с соотношением сторон меньше 2:1, например с одиночными цифрами, не учитываются.
  2. Поверни страницу. Страница поворачивается так, чтобы текст шёл слева направо; затем каждое слово обрезается в правильной ориентации, а слова объединяются в строки.
  3. Определи, где 0°, а где 180°. По рамке нельзя понять, в какую сторону ориентирован текст, поэтому решение читает 8 самых широких слов в обоих направлениях и выбирает поворот с более высокой уверенностью распознавания. Перевёрнутый текст распознаётся как шум с низкой уверенностью, поэтому правильный вариант выделяется.

Мы поворачивали 8 документов и снимков экрана, а также 12 фотографий на 90°, 180° и 270°: F1 по словам составил 0.925 для документов и 0.654 для фотографий. На пустой форме IRS Form 8802 решение распознало 404, 401 и 399 слов при повороте на 0°, 180° и 90° соответственно, причём первые строки совпали. В предыдущей версии предполагалось, что все страницы ориентированы правильно.

Параметры по умолчанию выбраны по результатам тестирования, а не наугад#

Мы выбрали основные значения по умолчанию на основе измерений. Тестирование проходило на RTX PRO 6000 с рабочим образом Platform; изображения загружались в формате JPEG, причём длинная сторона составляла не более 1280 пикселей. Использовались 80 валидационных фотографий из набора данных HierText Google с транскрипциями разборчивых слов, 6 страниц PDF, оценённых по текстовым слоям (4 страницы из статьи arXiv, а также пустые формы IRS 1040 и 8802), синтетический снимок экрана и синтетическое изображение. Метрика — оценка F1 на уровне слов, баланс точности и полноты; учитывались слова в нижнем регистре длиной не менее 2 буквенно-цифровых символов.

Столбчатая диаграмма F1 по словам для разных детекторов и размеров изображений: YOLO26x-Text при 1280 пикселях, используемая по умолчанию, набирает 0.722 на 80 фотографиях HierText и 0.931 на 6 страницах PDF

F1 по словам для YOLO26-Text с PP-OCRv6 на 80 фотографиях HierText и 6 страницах PDF в зависимости от детектора и размера изображения; тестирование проводилось на RTX PRO 6000.

При любых настройках чистые страницы PDF распознаются гораздо лучше, чем фотографии текста в естественной среде; из результатов следуют три значения по умолчанию:

  • yolo26x-text при imgsz=1280. Переход на 960 снизил F1 на фотографиях на 0.042, а 1920 прибавил на фотографиях 0.002 и снизил F1 на страницах PDF на 0.007. Изображения меньше 1280 не увеличиваются: они обрабатываются в исходном размере, округлённом вверх до шага модели в 32 пикселя.
  • Распознавай по одному слову. Распознавание отдельных слов дало на фотографиях результат на 4 пункта F1 выше, чем распознавание целых строк.
  • max_det=1000. На плотной странице документа помещается больше стандартных 300 обнаружений.

Если нужен более лёгкий детектор, YOLO26l-Text уступает модели x менее чем на полпункта на обоих наборах.

Как запускать OCR на Python с YOLO26#

Установи или обнови пакет командой pip install -U "ultralytics>=8.4.211". При первом вызове OCR загружаются YOLO26x-Text и PP-OCRv6 и устанавливается ONNX Runtime; если доступна CUDA, используется onnxruntime-gpu. Для стандартного распознавателя ONNX Runtime нужны Python 3.11+ и ONNX Runtime 1.26+.

Распознавание изображения#

import cv2

from ultralytics import solutions

ocr = solutions.OCR()  # YOLO26x-Text при imgsz=1280 с PP-OCRv6
im0 = cv2.imread("receipt.jpg")
assert im0 is not None, "Image not found"
result = ocr(im0)
cv2.imwrite("receipt_ocr.jpg", result.plot_im)  # изображение с аннотациями

for word in result.texts:
    print(word["line"], word["text"], round(word["confidence"], 2))

Из командной строки yolo solutions ocr source="path/to/video.mp4" выполняет ту же операцию для каждого кадра. Каждый кадр обрабатывается независимо, без трекинга.

Распознавание PDF#

Решение принимает изображения, поэтому сначала преобразуй каждую страницу PDF в изображение. Для этого можно использовать PyMuPDF:

import cv2
import numpy as np
import pymupdf  # pip install pymupdf

from ultralytics import solutions

ocr = solutions.OCR()
for page in pymupdf.open("document.pdf"):
    pix = page.get_pixmap(dpi=200)
    rgb = np.frombuffer(pix.samples, np.uint8).reshape(pix.height, pix.width, pix.n)
    result = ocr(cv2.cvtColor(rgb, cv2.COLOR_RGB2BGR))

    lines = {}
    for word in result.texts:  # уже в порядке чтения
        lines.setdefault(word["line"], []).append(word["text"])
    print("\n".join(" ".join(words) for words in lines.values()))

Поскольку result.texts уже отсортирован, восстановить обычный текст можно с помощью словаря и объединения строк. Полигоны позволяют сделать больше — например, проверить, что сумма расположена рядом со словом "Total".

Выбор модели, устройства и распознавателя#

  • Компактный детектор: solutions.OCR(model="yolo26s-text.pt") загружает более компактный и быстрый детектор; проверь его точность на собственных страницах. Все пять вариантов размера загружаются автоматически.
  • CPU или GPU: распознаватель работает на CUDA, если выбрана CUDA GPU и доступен провайдер CUDA для ONNX Runtime, а в противном случае — на CPU. Поэтому один и тот же скрипт запускается и на ноутбуке, и на сервере.
  • Собственный распознаватель: передай функцию как recognizer. Она получает фрагмент слова в BGR и возвращает (text, confidence); решение продолжает выполнять обнаружение, поворот и упорядочивание.
def recognize(crop):
    # Запусти любую модель распознавания на фрагменте слова в BGR
    return "example", 0.95


ocr = solutions.OCR(recognizer=recognize)

TensorRT распознаёт слова в плотных фотографиях в 2,5–3 раза быстрее#

В наших тестах на GPU с плотными страницами большую часть времени занимало распознавание, а не обнаружение. В предыдущей оптимизации измерили, что обнаружение занимает около 11 мс из 250 мс запроса, а в запросе на добавление TensorRT выяснили, что значительная часть оставшегося времени распознавания приходится на 33 небольших пакета, где основная задержка вызвана запуском, а не вычислениями. В Ultralytics 8.4.211 для этого добавили один аргумент:

ocr = solutions.OCR(recognizer="tensorrt")  # Движок TensorRT FP16 на GPU NVIDIA

При первом запуске примерно за 30 секунд создаётся движок TensorRT FP16 и кэшируется рядом с моделью PP-OCRv6 — отдельно для каждой версии TensorRT и архитектуры GPU. При последующих загрузках уходит 0,05–0,2 секунды. Согласно данным выпуска, на плотных страницах он работает примерно в 2,5 раза быстрее ONNX Runtime.

Мы замерили время работы read_words — этапа после обнаружения, который обрезает и поворачивает фрагменты, распознаёт и упорядочивает слова, — на четырёх фотографиях текста в естественной среде. На трёх фотографиях с 195–263 словами движок FP16 оказался в 2,5–3 раза быстрее ONNX Runtime на CUDA; на фотографии с 48 словами — в 1,4 раза быстрее:

Групповая столбчатая диаграмма времени распознавания слов на четырёх фотографиях текста в естественной среде: движок TensorRT FP16 обрабатывает фотографию с 251 словом за 82 мс против 249 мс у ONNX Runtime CUDA

Время распознавания слов на четырёх фотографиях текста в естественной среде с ONNX Runtime CUDA и движками TensorRT FP32 и FP16; медиана 10 запусков на RTX PRO 6000 Blackwell с TensorRT 11.4.

Полный вызов OCR для плотной страницы стал выполняться за 94 мс вместо 182 мс. На этих четырёх фотографиях ускорение не повлияло на результат: для всех 757 слов ONNX Runtime и оба движка вернули одинаковый текст и одинаковое разбиение на строки.

Оставь стандартный recognizer="paddleocr", если не можешь ждать первой сборки или используешь не оборудование NVIDIA. Он ничего не собирает и запускается примерно за секунду. В нашем сравнении ONNX и TensorRT рассмотрен такой же компромисс для моделей обнаружения, а в руководстве по интеграции TensorRT описана настройка.

Поддерживаются китайская, японская и латинская письменности#

PP-OCRv6 может выдавать только символы из встроенного набора, состоящего из 18 708 символов. Детектор YOLO26-Text не зависит от этого набора и по-прежнему находит слова на других письменностях, но слова с символами вне набора распознаются как похожие на них символы. Например, русское слово ТЕКСТ распознаётся как "TEKCT", часто с высокой уверенностью.

  • Поддерживаются: упрощённый и традиционный китайский (около 15 600 иероглифов CJK), японский (хирагана, катакана и кандзи), а также языки с латинской письменностью, включая английский, французский, немецкий, испанский, португальский, итальянский, нидерландский, шведский, финский, датский, норвежский, польский, чешский, венгерский, румынский, турецкий, хорватский, индонезийский и малайский. Поддерживаются все буквы, в том числе с диакритическими знаками, кроме заглавной немецкой ẞ и испанского ¡.
  • Частичная поддержка: вьетнамский — отсутствует большинство гласных с диакритикой; греческий — поддерживаются только основные буквы.
  • Пока не поддерживаются: кириллица, корейский (хангыль), арабский, иврит, деванагари и тайский.

Для неподдерживаемой письменности оставь детектор YOLO26-Text и передай распознаватель, обученный для этой письменности, через recognizer. Полная таблица поддержки приведена в разделе о поддерживаемых языках руководства по OCR.

Сравнение библиотек OCR для Python по задокументированным возможностям#

Не существует единственной лучшей модели OCR: выбор зависит от твоих страниц, языков и среды запуска кода. В таблице сравниваются задокументированные возможности, а не результаты измерений; данные взяты с общедоступных страниц каждого проекта по состоянию на 12 ноября 2026 года. Варианты перечислены в алфавитном порядке.

РешениеСреда выполненияПоворот текстаЗадокументированные языкиРезультат
EasyOCRPyTorchrotation_info проверяет повороты 90°, 180° и 270° для каждого блока текстаБолее 80, включая кириллицу, арабский, деванагари, корейский и тайскийРамки, текст и оценка уверенности
PaddleOCRPaddlePaddleДополнительная классификация ориентацииБолее 100 (PP-OCRv6 поддерживает 50 в одной модели)Рамки, текст и оценка уверенности
Tesseract (pytesseract)Нативный бинарный файл, CPUОпределение ориентации и письменности (image_to_osd); перед распознаванием изображение нужно повернуть100+Текст и необязательные данные о словах
Ultralytics YOLO26 OCRДетектор на PyTorch; распознаватель на ONNX Runtime или TensorRT на GPU NVIDIAПоворот страницы оценивается по обнаруженному тексту; ориентация 0° или 180° определяется автоматическиКитайская, японская и латинская письменности; для остальных нужен пользовательский распознавательСлова в порядке чтения с номерами строк, полигонами и отдельными оценками уверенности обнаружения и распознавания

Актуальные возможности можно проверить в документации EasyOCR, репозитории PaddleOCR, документации Tesseract и pytesseract. Чтобы узнать, как работают эти движки, прочитай наш обзор популярных моделей OCR с открытым исходным кодом.

Какую роль играет Ultralytics#

Ultralytics YOLO26 OCR создан для разработчиков Python, которым нужно извлекать текст из разных источников, например отсканированных форм, страниц PDF, снимков экрана и фотографий этикеток и вывесок, получая слова в порядке чтения вместе с координатами для проверки. Решение подойдёт, если страницы поступают под непредсказуемыми углами, если ты хочешь запускать OCR на собственных машинах или уже используешь модели Ultralytics YOLO26 и хочешь добавить OCR в тот же пакет. Для обработки больших объёмов на GPU NVIDIA добавь recognizer="tensorrt".

Детектор — обычная модель Ultralytics, поэтому он обучается, проходит валидацию и экспортируется так же, как любая другая модель. В проекте YOLO26-Text на Ultralytics Platform доступны все пять вариантов размера — от n до x; там можно сравнить кривые обучения и клонировать проект, чтобы начать с готовой модели.

Проект YOLO26-Text на Ultralytics Platform: перечислены пять вариантов размера детектора от yolo26n-text до yolo26x-text с кривыми точности, полноты, mAP50-95 и функции потерь

Проект YOLO26-Text на Ultralytics Platform: все пять вариантов размера детектора, кривые точности, полноты, mAP50-95 и функции потерь в процессе обучения.

Чтобы адаптировать модель для своих документов, начни с набора данных Scene Text OBB, который объединяет COCO-Text и HierText: в нём 65 325 изображений и около 1,29 миллиона полигонов слов.

Ограничения решения:

  • Письменности. Стандартный распознаватель пока не читает кириллицу, корейский, арабский, иврит, деванагари и тайский. Используй вместе с детектором собственный распознаватель или выбери движок с поддержкой этих письменностей.
  • Разные направления текста. Решение поворачивает всю страницу в соответствии с основным направлением текста, поэтому текст, идущий в нескольких направлениях на одной странице, например вертикальная заметка на полях, может распознаваться хуже.
  • Экспорт. Распознаватель не включается в экспортированный файл детектора, поэтому развёртывай детектор и среду выполнения распознавания вместе либо используй решение на Python в качестве связующего компонента.
  • Rust. Ultralytics Inference распознаёт текст в естественной среде на Rust с тем же распознавателем PP-OCRv6 через ultralytics-inference predict --ocr, но для обработки ориентации использует классификатор, а не этап поворота страницы из решения на Python.
  • Конфиденциальность. Решение на Python работает на твоём оборудовании, поэтому страницы не нужно никуда отправлять; браузерная демонстрация загружает страницы для инференса. Если некоторые поля нельзя распознавать, перед запуском OCR закрой известные области непрозрачной маской.

Для форм и договоров сначала можно использовать собственную модель YOLO, чтобы найти поля, таблицы, подписи и печати, а затем распознавать только нужные области. В качестве отправных точек подойдут набор данных Signature на Ultralytics Platform и наше руководство по интеллектуальному анализу документов, а Ultralytics Platform позволяет размечать страницы и обучать эту модель в одном месте. Чтобы сначала проверить OCR на собственной странице, загрузи изображение или PDF в демонстрацию OCR в реальном времени.

Часто задаваемые вопросы

  • Установи пакет Ultralytics командой pip install -U "ultralytics>=8.4.211", затем вызови solutions.OCR() для изображения, загруженного с помощью OpenCV. Он возвращает распознанные слова с текстом, оценкой уверенности, номером строки и полигоном в порядке чтения. При первом запуске автоматически загружаются детектор YOLO26-Text и распознаватель PP-OCRv6.

  • Это зависит от твоих документов, языков и оборудования; в нашем обзоре популярных моделей OCR с открытым исходным кодом сравниваются основные варианты. В нашем тестировании при размере изображения 1280 на RTX PRO 6000 модель YOLO26x-Text с PP-OCRv6 набрала F1 по словам 0.931 на шести страницах PDF и 0.722 на 80 фотографиях HierText; также она распознаёт страницы при любом повороте. Для пока не поддерживаемых письменностей, например кириллицы или корейского, используй распознаватель, обученный для соответствующей письменности.

  • Модель YOLO обнаруживает текст, но не читает его. Ultralytics YOLO26-Text обнаруживает текст в виде ориентированных рамок, а решение OCR передаёт каждый фрагмент распознавателю PP-OCRv6, поэтому вместе они выполняют полный цикл OCR за один вызов.

  • Да. Преобразуй каждую страницу PDF в изображение, например с помощью get_pixmap из PyMuPDF, преобразуй изображение в BGR и передай его в solutions.OCR(). В браузере демо и вкладка Platform Predict принимают PDF и считывают первую страницу.

  • Да. PP-OCRv6 работает с ONNX Runtime на CPU или графических процессорах CUDA, и один и тот же скрипт подходит для обоих вариантов. Для необязательного распознавателя TensorRT нужен графический процессор NVIDIA.

  • Пока нет, если использовать распознаватель по умолчанию. PP-OCRv6 поддерживает китайский, японский и языки на основе латиницы, но не кириллицу, хангыль, арабское письмо, иврит, деванагари или тайское письмо. Можно оставить детектор YOLO26-Text и передать ему распознаватель, обученный для нужной письменности.

Автор

Jing Qiu
Jing Qiu

Старший инженер по машинному обучению · Ultralytics

Цзин Цю — старший инженер по машинному обучению в Ultralytics. Он работает над повышением производительности, масштабируемости и практической применимости передовых моделей компьютерного зрения. Его работа охватывает архитектуру моделей, оптимизацию обучения и развёртывание, помогая обеспечить ведущие в отрасли точность и эффективность Ultralytics YOLO для разработчиков и предприятий по всему миру.

Комментарии

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

Изучи решения

Компьютерное зрение в спорте

Компьютерное зрение в спорте

Узнай, как Ultralytics YOLO обеспечивает компьютерное зрение в спорте: отслеживание игроков и мяча, аналитика результатов, полезные выводы для тренеров и реабилитация спортсменов.
Подробнее
Компьютерное зрение для аэросъёмки

Компьютерное зрение для аэросъёмки

Превращай снимки с дронов и аэрофотоснимки в полезные данные в реальном времени для сельского хозяйства, аквакультуры, охраны природы и геопространственного анализа с Ultralytics YOLO.
Подробнее
Компьютерное зрение в аэрокосмической отрасли

Компьютерное зрение в аэрокосмической отрасли

Применяй компьютерное зрение в аэрокосмической отрасли с Ultralytics YOLO: для осмотра самолётов, обнаружения посторонних предметов на взлётно-посадочных полосах, наземного обслуживания аэропортов и выявления дефектов композитных материалов.
Подробнее
Компьютерное зрение в сфере безопасности

Компьютерное зрение в сфере безопасности

Защити любой объект с помощью моделей Ultralytics YOLO. ИИ на базе компьютерного зрения обеспечивает мониторинг периметра, обнаружение угроз, распознавание номерных знаков и безопасность на рабочем месте.
Подробнее
Компьютерное зрение в робототехнике

Компьютерное зрение в робототехнике

Создавай более интеллектуальные машины с моделями Ultralytics YOLO. ИИ на базе компьютерного зрения в робототехнике обеспечивает автономную навигацию, восприятие, отслеживание объектов и управление в реальном времени.
Подробнее
Компьютерное зрение в логистике

Компьютерное зрение в логистике

Оптимизируй логистику с моделями Ultralytics YOLO. Визуальный AI обеспечивает проверку посылок, сортировку, отслеживание транспорта и мониторинг безопасности на складе в реальном времени.
Подробнее
Компьютерное зрение в розничной торговле

Компьютерное зрение в розничной торговле

Переосмысли розничную торговлю с моделями Ultralytics YOLO. Визуальный AI обеспечивает отслеживание запасов, мониторинг полок, управление очередями и более глубокое понимание поведения покупателей.
Подробнее
Компьютерное зрение в здравоохранении

Компьютерное зрение в здравоохранении

Создавай решения для здравоохранения с моделями Ultralytics YOLO. Визуальный AI в здравоохранении ускоряет медицинскую визуализацию, улучшает диагностику и мониторинг пациентов.
Подробнее
Компьютерное зрение в производстве

Компьютерное зрение в производстве

Оптимизируй производство с моделями Ultralytics YOLO. Компьютерное зрение на базе ИИ обеспечивает контроль качества, обнаружение дефектов, контроль использования СИЗ и автоматизацию сборочных линий.
Подробнее
Компьютерное зрение в автомобильной отрасли

Компьютерное зрение в автомобильной отрасли

Применяй компьютерное зрение в автомобильной отрасли с моделями Ultralytics YOLO. Компьютерное зрение на базе ИИ повышает безопасность дорожного движения, улучшает помощь водителю и автоматизацию автомобилей, делая дороги умнее.
Подробнее
Компьютерное зрение в сельском хозяйстве

Компьютерное зрение в сельском хозяйстве

Внедряй ИИ для компьютерного зрения в умное сельское хозяйство с моделями Ultralytics YOLO. Используй их для мониторинга посевов, отслеживания скота и точного земледелия, чтобы повысить урожайность и эффективность.
Подробнее

Давай вместе строить будущее ИИ!

Начни свой путь в будущее машинного обучения