Повысить точность распознавания текста с помощью 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 пикселей большая часть текста будет "удалена".]