Django и Tesseract в действии

OCR в основном означает оптическое распознавание / считывание символов.

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

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

Совершенно уверен, что вы уже сталкивались с реальным применением такой технологии, даже не зная об этом, - или, тем более, вам нужно было выполнить определенную задачу, но вы не смогли этого сделать из-за отсутствия подходящих инструментов. Prime например: преобразование файла PDF в формат Microsoft Word или Excel или преобразование файла изображения, содержащего текст, в редактируемый формат.

Я работал с решениями со встроенным оптическим распознаванием текста, такими как Kofax PowerPDF - он использует Omnipage, который широко считается одним, если не самым мощным механизмом оптического распознавания текста на рынке, - но эти решения были своего рода черный ящик мне. Мне нужно было хоть что-нибудь поиграть, и именно здесь я нашел Tesseract, спонсируемый Google.

Выполнение

Мы превратим изображение в текст, и в конце вы будете поражены тем, насколько это было просто.

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

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

Для других операционных систем вы можете открыть руководство по установке здесь. Следить за этим не должно быть слишком сложно. Когда вы закончите, подтвердите успешную установку, просто набрав tesseract в терминале.

Теперь, когда это не проблема, давайте создадим requirements.txt файл и добавим необходимые нам библиотеки Python.

pytesseract
Pillow

pytesseract: оболочка для механизма распознавания текста Tesseract.

Подушка: для поддержки изображений.

Давайте начнем с расширения наших представлений, URL-адресов и нашего шаблона. Нам понадобится форма для обработки загрузки файла.

и наконец наш index.html файл

Следует искать что-то близкое к следующему. На данный момент довольно просто.

Теперь, когда у нас есть пользовательский интерфейс, давайте обработаем загружаемое изображение и попытаемся вывести обработанный результат в наш терминал. Обновите views.py соответственно.

Здесь мы импортируем нашу pytesseract библиотеку и используем метод image_to_string(), затем передаем ей загруженное изображение и, наконец, выводим результат на терминал.

Давайте поищем изображение и проведем тест. В моем случае я буду использовать страницу 275 правил шахмат в качестве изображения.

Отправьте файл и дождитесь его распознавания. Теперь откройте свой терминал, и вы должны увидеть результат. Классно, правда?

Теперь, когда содержимое нашего изображения обработано, нам нужно вывести результат на нашу веб-страницу вместо терминала. Для этого мы воспользуемся AJAX и немного JSON. Начнем с изменения содержимого нашего views.py.

Вот так должен выглядеть наш окончательный файл. Мы создаем представление, которое будет запускаться вызовом AJAX и будет возвращать нам данные в формате JSON без необходимости каждый раз обновлять страницу. Обновите urls.py, добавив эту строку:

###  urls.py
from django.urls import path
from .views import *
urlpatterns = [
   path('', HomeView.as_view()),
   path('process_image', process_image, name='process_image') # New line
]

С бэкендом мы закончили, так что перейдем к фронт-офису. Имейте в виду, что я не фронтенд-парень, поэтому мне пришлось провести много исследований, пытаясь выяснить, как отправить файловый объект через AJAX - не поймите меня неправильно, я многому научился, и это что вы получаете от написания.

Давайте добавим в наш index.html некоторый javaScript.

Позвольте мне быстро объяснить, что делает приведенный выше код. У нас есть два метода getFile() и submitFile(). Я считаю, что это довольно понятное название функции.

  • getFile (): извлекает объект File из ввода и буквально возвращает его как BLOB.
  • submitFile (): отправьте запрос AJAX POST к process_image представлению, которое вернет объект JSON преобразованного изображения. Затем этот метод вызывается всякий раз, когда мы нажимаем кнопку отправки, имейте в виду, что мы предотвращаем поведение этого события отправки по умолчанию, используя:
event.preventDefault()

Это в значительной степени то, что нам нужно сделать, чтобы все сдвинулось с мертвой точки. Давай проверим.

И вуаля.

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

Ваше здоровье.