Повысить точность распознавания текста с помощью pytesseract & PIL

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

Может кто-нибудь предложить какое-то улучшение изображения, чтобы получить лучшие результаты. Несколько примеров изображений:

два

три

1 ответ

В приведенном примере изображения текст визуально довольно хорошего качества, поэтому возникает вопрос: как получается, что OCR дает неточные результаты?

Чтобы проиллюстрировать выводы, приведенные в дальнейшем тексте этого ответа, давайте запустим данное изображение

через тессеракт. Ниже результат Тессеракт OCR:

"fhpgearedmomrs©gmachom"

Теперь давайте изменим изображение четыре раза и применим к нему пороговое значение. Я сделал изменение размера и порога вручную в Gimp, но с соответствующим методом изменения размера и пороговым значением для PIL это может быть точно автоматизировано, так что после улучшения вы получите изображение, похожее на улучшенное изображение, которое я получил:

Улучшенное изображение, запущенное через Tesseract OCR, дает следующий текст:

"Fhpgearedmotors©gmail.com"

Это демонстрирует, что увеличение изображения может помочь достичь 100% точности на примере предоставленного текстового изображения.

Может показаться странным, что увеличение изображения помогает повысить точность распознавания текста, НО... OCR был разработан для преобразования отсканированных печатных носителей в текст и получения изображения с разрешением 300 точек на дюйм в соответствии с дизайном. Это объясняет, почему некоторые программы оптического распознавания текста не изменяли размер текста сами по себе, чтобы улучшить свои результаты, и плохо работают с маленькими шрифтами, ожидая более высокого разрешения изображения на дюйм, которое может быть достигнуто путем увеличения.

Вот выдержка из часто задаваемых вопросов Tesseract на github.com, подтверждающая приведенное выше утверждение:

[Существует минимальный размер текста для разумной точности. Вы должны учитывать разрешение, а также размер точки. Точность падает ниже 10 точек на 300 точек на дюйм, быстро ниже 8 точек на 300 точек на дюйм. Быстрая проверка состоит в подсчете пикселей высоты х ваших персонажей. (Высота X- это высота нижнего регистра x.) При 10pt x 300dpi высота x обычно составляет около 20 пикселей, хотя это может значительно варьироваться от шрифта к шрифту. Ниже x-высоты 10 пикселей у вас очень мало шансов на получение точных результатов, а ниже примерно 8 пикселей большая часть текста будет "удалена".]

Другие вопросы по тегам