OCR и компьютерное зрение
OCR нужен, когда текста нет в DOM и нет нормального UI-имени: скан, картинка, canvas, «рисуночная» кнопка. Сначала проверьте DOM и UI Automation — они стабильнее любого распознавания.
Когда OCR, а когда нет
| Ситуация | Что брать |
|---|---|
| Сайт отдаёт HTML, поле в инспекторе есть | DOM + wait |
| Десктоп с Accessible Name / AutomationId | UI |
| Скан PDF, штамп, подпись на картинке | OCR (этот гайд) |
| reCAPTCHA / hCaptcha как токен сервиса | сервисы капчи, не Tesseract |
OCR на «всю главную» почти всегда даёт мусор. Режьте область: одно поле, один штамп, одна строка суммы.
Три объекта Vision
Начните с Tesseract, если текст печатный и контрастный. Сложные сканы и «кривые» PDF чаще лучше отдать FineReader, если он установлен. Облако — когда локального движка не хватает и данные можно отправлять наружу.
Не смешивайте три движка в одном шаге «какой сработает». Зафиксируйте один на тип документа: печатная сумма — Tesseract, многостраничный скан договора — FineReader, разовая нестандартная картинка с политикой облака — Yandex Vision.
Откуда картинка
Страница: webpage→print_screen. Печать всей страницы в PDF: print_to_pdf, затем pdffile / extract_images. Рабочий стол: windows→screenshot.
Масштаб Windows 125–150% сдвигает пиксели относительно «логических» координат UI. Снимайте после стабилизации DPI, одним и тем же масштабом, что при отладке. Не сравнивайте снимок с ноутбука 150% и сервера 100%.
Tesseract: рабочий порядок
recognize($path, $language="rus+eng") — с версии 7.0.57. Языки через +.
- Сохранить PNG обрезанной области (не весь 4K-экран).
- Цифры / серия документа: set_allowed_chars, например
0123456789. Лишнее выкинуть: set_denieded_chars. - Доп. параметры движка: set_params.
recognizeпо пути к файлу.- Нужен прямоугольник текста для клика: get_region_by_text, куски: get_segmented_regions.
$tesseractOCR->set_allowed_chars("0123456789");
$text = $tesseractOCR->recognize("C:\\bots\\ocr\\sum.png", "eng");
Поиск: tesseract.
Порядок на практике
- Убедиться, что текста нет в DOM (инспектор) и нет Accessible Name (UI).
- Дождаться появления области — wait.
- Снять прямоугольник, не весь экран: print_screen страницы или screenshot окна.
- Для PDF-скана: сначала extract_images, потом OCR по PNG.
- Ограничить алфавит, вызвать
recognize, записать сырой текст в лог. - Парсить уже строку (regex суммы), не гонять OCR повторно на том же файле в цикле без нужды.
$webpage->print_screen("C:\\bots\\ocr\\field.png");
$tesseractOCR->set_allowed_chars("0123456789.,");
$sum = $tesseractOCR->recognize("C:\\bots\\ocr\\field.png", "eng");
$logger->info("ocr sum", $sum);
Если get_region_by_text нужен для клика — координаты должны быть в той же системе, что клик мыши (то же окно, тот же масштаб Windows). Снимок с ноутбука 150% и клик на сервере 100% не совпадут.
FineReader и Yandex Vision
fineReaderOCR — обёртка над командной строкой Fine Reader: нужен установленный Fine Reader, пути и лицензия продукта ABBYY на машине робота.
yandexVision — облако Яндекса: ключ, сеть, политика данных. Не гоните туда паспортные сканы, если договор этого не покрывает.
Капча-картинка vs сервис
Простая неискажённая картинка: типы 100/101 у recognize_captcha. Искажённая / checkbox / токен — 2captcha / AntiCaptcha. Tesseract на современном антиботе почти всегда проигрывает сервису.
Не кормите Tesseract скрином всей reCAPTCHA: это не тот движок. Капча-сервис возвращает токен, OCR возвращает «буквы с картинки» — разные задачи.
FAQ
Мусор вместо текста. Обрежьте поле, контраст, язык rus+eng vs только eng, алфавит. Скан лучше через FineReader или extract_images из PDF.
Клик по региону «мимо». Координаты от OCR и клик мыши — в одной системе отсчёта? Проверьте масштаб и что снимок с того же окна.
На CI без GUI. Скрин рабочего стола на сессии без рабочего стола пустой. OCR страницы браузера через print_screen надёжнее, чем screenshot всей Windows.
Русский текст стал кракозябрами. Язык rus или rus+eng, не только eng. Пакеты языков Tesseract должны быть установлены на машине робота.
FineReader «не находится». Объект — обёртка CLI: путь к установленному Fine Reader и лицензия ABBYY на этой машине. Без приложения метод не заменит установку.
Сбои: хаб ошибок, UI/OCR.