Работа с изображениями - нетривиальная задача. Вам, как человеку, легко посмотреть на что-то и сразу понять, на что вы смотрите. Но компьютеры так не работают.
Слишком сложные для вас задачи, такие как сложная арифметика и математика в целом, компьютер выполняет, не беспокоясь. Но здесь действует прямо противоположное: для компьютера задачи, которые для вас тривиальны, например, распознать на изображении кошку или собаку, действительно сложно. В каком-то смысле мы идеально подходим друг другу. По крайней мере, сейчас.
В то время как классификация изображений и задачи, требующие определенного уровня компьютерного зрения, могут потребовать хорошего кода и твердого понимания, чтение текста с несколько хорошо отформатированного изображения оказывается однострочным в 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 будет работать безупречно каждый раз, но я обнаружил, что он достаточно хорош даже для некоторых сложных изображений. Но не сразу из коробки. Чтобы текст выделялся, требуются некоторые манипуляции с изображением.
Я знаю, это сложная тема. Принимайте это один день за раз. Однажды это станет для вас второй натурой.