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

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

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

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

  • OpenCV
  • PyTesseract

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

OpenCV

Теперь эта библиотека будет использоваться только для загрузки изображений, на самом деле вам не нужно иметь четкое представление о ней заранее (хотя это может быть полезно, вы поймете, почему).

Согласно официальной документации:

OpenCV (Open Source Computer Vision Library) - это библиотека программного обеспечения для компьютерного зрения и машинного обучения с открытым исходным кодом. OpenCV был создан для обеспечения общей инфраструктуры для приложений компьютерного зрения и для ускорения использования машинного восприятия в коммерческих продуктах. OpenCV является продуктом с лицензией BSD и упрощает использование и изменение кода предприятиями [1].

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

Если он еще не установлен, в терминале будет всего одна строка:

pip install opencv-python

Вот и все. До этого момента это было легко, но скоро все изменится.

PyTesseract

Что это за библиотека? Согласно Википедии:

Tesseract - это движок оптического распознавания символов для различных операционных систем. Это бесплатное программное обеспечение, выпущенное под лицензией Apache License версии 2.0, а разработка спонсируется Google с 2006 года [2].

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

Если он не может читать с вашего изображения, потратьте больше времени на эксперименты с OpenCV, применяя различные фильтры, чтобы выделить текст.

Теперь установка немного затруднительна. Если вы работаете в Linux, все сводится к паре команд sudo-apt get:

sudo apt-get update
sudo apt-get install tesseract-ocr
sudo apt-get install libtesseract-dev

Я использую Windows, поэтому процесс немного более утомительный.

Сначала откройте ЭТУ URL и загрузите 32-битный или 64-битный установщик:

Сама по себе установка проста: нужно несколько раз нажать Далее. И да, вам также необходимо выполнить установку pip:

pip install pytesseract

Это все? Ну нет. Вам все равно нужно указать Python, где установлен Tesseract. На машинах с Linux мне не требовалось этого делать, но в Windows это необходимо. По умолчанию он устанавливается в Program Files.

Если вы все сделали правильно, выполнение этой ячейки не должно вызывать ошибок:

Все хорошо? Можно продолжить.

Чтение текста

Начнем с простого. Я нашел несколько бесплатных изображений, содержащих какой-то текст, и первое из них:

Это должно быть легко, и существует вероятность, что Tesseract будет читать эти синие «объекты» как скобки. Посмотрим, что будет:

Мое заявление было правдой. Однако это не проблема, вы можете легко решить их с помощью магии Python.

Следующий может быть посложнее:

Надеюсь, он не обнаружит на монете букву "B":

Похоже, работает отлично.

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

Прежде чем ты уйдешь

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

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

Я знаю, это сложная тема. Принимайте это один день за раз. Однажды это станет для вас второй натурой.

использованная литература

[1] https://opencv.org/about/

[2] https://en.wikipedia.org/wiki/Tesseract_(software)