Задействуйте версию распознавания текста HelloWorld

Java
  • суг команда
  • Добавить Автора

предисловие

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

Во-первых, чтобы понять API крупных производителей, скорость распознавания, естественно, высокая, и эффект очень хороший, но проблема в том, что количество вызовов ограничено, и модель не находится под вашим контролем, или вам нужно зарядить деньги, чтобы сделать вас сильнее. (Вот пост, которым поделился кто-то другой:Распознавание текста изображений на основе Java на основе API-интерфейса Baidu (поддержка китайского, английского и китайского, а также смешанный английский язык) - TheLoveFromWSK - Блог CSDN)

Потом я сам узнал об ocr и tesseract. Эта статья в основном представляет собой приветственную версию вводного руководства по тессеракту... поэтому, пожалуйста, коснитесь значка

представлять

OCR: Оптическое распознавание символов (англ. Optical Character Recognition, OCR) относится к процессу анализа и распознавания файлов изображений текстовых данных для получения информации о тексте и макете.

Эта статья в основном посвящена Tesseract-OCR: Tesseract — это механизм OCR, разработанный Рэем Смитом в HP Bristol Labs в период с 1985 по 1995 год, и он был одним из лучших в тесте точности UNLV 1995 года. Но после 1996 года разработка практически остановилась. В 2006 году Google пригласил Смита присоединиться к нему, чтобы перезапустить проект. Текущая лицензия проекта — Apache 2.0. В настоящее время проект поддерживает основные платформы, такие как Windows, Linux и Mac OS. Но как движок он предоставляет только инструменты командной строки.

Установка Тессеракта

Студенты, заинтересованные в изучении исходного кода, могут посмотреть на адрес GitHub:GitHub - tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)Ссылки на скачивание, mac, windows, linux есть, желательны и нужны:Downloads · tesseract-ocr/tesseract Wiki · GitHub

windows

1. После завершения загрузки непосредственно запустите исполняемый файл и установите его в соответствующую папку.

2. Настройте переменные среды:

Добавьте переменную среды в Path, адрес — это каталог установки Tesseract-ocr.

3. Добавьте системную переменную tessdata

Добавьте TESSDATA_PREFIX в системную переменную, значением переменной является папка tessdata в каталоге Tesseract-ocr

4. Введите cmd, чтобы проверить, завершена ли установка.

tesseract -v

Появляется то же самое, что и на картинке выше, то есть установка прошла успешно, и первый шаг завершен.

Использование Тессеракта

После успешной установки естественно попробовать. 1. Можно подготовить картинку PNG или JPG (конкретные поддерживаемые форматы не указаны по одному, здесь я буду использовать png)

2. Затем введите команду

tesseract imagename outputbase [-l lang] [--oem ocrenginemode] [--psm pagesegmode] [configfiles...]

Объясните здесь, это tesseract [адрес изображения + имя + суффикс] [выходной адрес + имя] Например:

3. Это создаст файл DemoAnswer.txt в Shencheng в каталоге

хорошо, результат правильный

А если это китайцы? Повторите вышеуказанную операцию

4. Китайское признание

Здесь вы обнаружите, что описанная выше операция повторяется, и китайский теряется

tesseract imagename outputbase [-l lang] 

[-l lang] в этой команде установить язык распознавания, по умолчанию английский, поэтому если вам нужно распознать китайский, вам нужно скачать китайский шрифт (На самом деле, внимательные студенты могли заметить при установке, что библиотека шрифтов была установлена ​​автоматически) Перейдите в каталог tessdata в каталоге установки tesseract-ocr, чтобы просмотреть ***.traineddata — это шрифт

4.1 Загрузите библиотеку китайских иероглифов

Если вы не загрузили его во время установки, вы можете зайти сюда, чтобы найти шрифт, который вам нужно скачатьData Files · tesseract-ocr/tesseract Wiki · GitHub

Поместите загруженный шрифт в каталог tessdata

4.2 Сбить команду

tesseract HelloWorldDemo.png DemoAnswer -l chi_sim

Тут есть небольшой недочет, есть проблема с китайским распознаванием

Это связано с тем, что используемые шрифты отличаются от наших шрифтов, поэтому, если нам нужно распознавать шрифты на наших изображениях, нам нужно обучить наши собственные шрифты.

Обучите модель

Шаги: (перенесено с github tesseract)

Подготовьте обучающий текст. Подготовьте учебный текст

Рендеринг текста в изображение + файл коробки (или создание файлов коробок ручной работы для существующих данных изображения). Преобразуйте текст в файл изображения+бокса (если у вас уже есть файл изображения, просто создайте файл бокса вручную).

Сделать файл unicharset. Создать файл unicharset

При желании сделайте словарные данные. Необязательно генерировать данные словаря

Запустите tesseract для обработки изображения + файла коробки, чтобы создать набор обучающих данных. Запустите tesseract для обработки предыдущего файла изображения + коробки для создания набора обучающих данных.

Запустите обучение на обучающем наборе данных. Обучение на основе обучающего набора данных

Объедините файлы данных. Объединить файлы данных

1. Измените название изображения на [lang].[fontname].exp[num].tif (рекомендуется выбирать tif, сохраняя как суффикс)

Например: BlackLang.HelloWorldDemo.exp0.tif

2. Создайте бокс-файл

Дайте фото официального сайта

Имена входного и выходного файлов даны для удобства, и я оставлю их здесь. Поскольку мы тренируемся на китайском языке, мы добавляем -l chi_sim, чтобы уменьшить разницу при настройке. Фактическая команда:

tesseract BlackLang.HelloWorldDemo.exp0.tif BlackLang.HelloWorldDemo.exp0 -l chi_sim batch.nochop makebox

Это создаст файл .box в целевом каталоге, как показано ниже.

Любознательные ученики могут нажать на файл .box, чтобы увидеть, на самом деле он содержит координаты каждого слова и так далее.

3. Использование jTessBoxEditor

Здесь, чтобы облегчить нам исправление файла коробки, здесь используется инструмент jTessBoxEditor:VietOCR - Browse /jTessBoxEditor at SourceForge.net

После установки откройте jTessBoxEditor, нажмите «Открыть» и выберите соответствующий tif (если tif и бокс не в одном каталоге, будут проблемы)

3.1 В Box Coordinates обрамите соответствующее слово, отрегулировав x, y, w, h, а затем введите правильное слово в char.

3.2 В окне просмотра вы можете увидеть увеличенное изображение каждого слова, чтобы убедиться, что оно выделено полностью.

Проверив таким образом каждое слово, нажмите «Сохранить»:

4. Обучение

4.1 Создание tr-файла

Команда ввода: tesseract.exe [имя файла изображения tif] [имя сгенерированного файла tr] nobatch box.train т

tesseract.exe BlackLang.HelloWorldDemo.exp0.tif BlackLang.HelloWorldDemo.exp0 nobatch box.train

4.2 Создание файла unicharset

Введите команду: unicharset_extractor.exe [имя файла коробки]

unicharset_extractor.exe BlackLang.HelloWorldDemo.exp0.box

Здесь, если у вас есть несколько изображений, для которых необходимо создать библиотеку шрифтов, вам нужно объединить их в коллекцию символов.

Введите команду: unicharset_extractor.exe [имя файла первой коробки] [имя файла второй коробки]  … Демонстрация здесь использует только одну коробку

4.3 Определите файл функций шрифта font_properties

<fontname> <italic> <bold> <fixed> <serif> <fraktur>

Имя tontname здесь должно соответствовать [lang].[fontname].exp[num].box; Значение , , , , равно 1 или 0, указывая, есть ли у шрифта эти атрибуты.

Здесь мы создаем файл с именем font_properties в каталоге со следующим содержимым:

HelloWorldDemo 0 0 0 0 0

Вот файлы в нашем каталоге следующим образом: Целевое изображение .tif, анализ .box,Результат тренировки.tr, набор символов unicharset, файл функций font_properties

4.4 Создание словаря введите команду:

mftraining.exe -F font_properties -U unicharset -O BlackLang.unicharset BlackLang.HelloWorldDemo.exp0.tr
#这里如果有多个tr就连在后面写多个tr即可
cntraining.exe BlackLang.HelloWorldDemo.exp0.tr
#这里如果有多个tr就连在后面写多个tr即可

Как показано на рисунке:

После завершения выполнения обнаруживается еще 5 файлов. Затем скажите, что эти 5 файлов изменены на начало lang, то есть [lang].XXX. (inttemp, pffmtable, normproto, shapetable; BlackLang.unicharset уже есть, менять не надо)

Заинтересованные студенты могут открыть его через редактор, чтобы увидеть, что внутри, и они обнаружат, что в нем есть несколько интересных искаженных символов, хахаха.

4.5 Объединение файлов введите команду:

combine_tessdata BlackLang.
#combine_tessdata [lang].

Здесь следует отметить, что после [lang] стоит точка, что очень важно Затем в результате выполнения ни один из 1, 3, 4, 5 и 13 не равен -1, поэтому создается новый языковой файл или новый файл шрифта --- [lang].traineddata

Затем скопируйте только что сгенерированные [lang].traineddata в tessdata tesseract-ocr. Затем выполните команду:

tesseract HelloWorldDemo.png answer -l BlackLang

Таким образом, исходное изображение может быть успешно проанализировано.

конец

Это просто демонстрационное обучение, этого недостаточно для использования в обычном продакшне, нужно много тренироваться на всех символах определенного шрифта. В общем, способность tesseract распознавать китайский по-прежнему очень плохая, не говоря уже о рукописном китайском, и скорость распознавания в основном нулевая. Но скорость распознавания английского языка и цифр по-прежнему очень впечатляет. Вот простая запись обмена для tesseract~

Сейчас много упакованных OCR типа pyocr, tess4J и т.д., или апи, предоставляемые крупными производителями, скорость распознавания очень высокая.Ведь модель очень хорошо обучена.Об этом я расскажу в следующий раз.