Пошаговый подход (включая скриншоты и код) о том, как создать OpenCV + Tesseract OCR на Heroku

Проработав в Data Science почти полдесятилетия, я понял, что многие из нас специализируются и делают упор на повышении точности алгоритмов, а не на их удобстве использования в реальной жизни. Обычно это приводит к различию в управлении ожиданиями между бизнес-командами и командами по анализу данных. И даже если мы создадим один из самых сложных алгоритмов, он бесполезен, пока не будет эффективно развернут в основном источнике. В этом блоге мы узнаем, как развернуть OCR с использованием Tesseract и OpenCV, написанного на Python на платформе Heroku.

Но обо всем по порядку - что такое Heroku?

Heroku - это облачная платформа - сервис (PaaS), поддерживающий несколько языков программирования. Он поддерживает несколько языков программирования, таких как Java, Node.js, Scala, Clojure, Python, PHP и Go. Он имеет функции, позволяющие разработчику создавать, запускать и масштабировать приложения одинаковым образом на большинстве языков.
Вкратце - мы можем использовать Heroku для развертывания нашей модели Python в производственной среде, чтобы ее мог использовать кто угодно и не зависеть от моего рабочего стола или операционной системы.

Так что же нам на самом деле делать?

Показатель

  1. Создайте код Tesseract OCR + OpenCV на Python
  2. Заморозить зависимости
  3. Создать Procfile
  4. Создать Aptfile
  5. Настроить учетную запись Heroku
  6. Скопируйте коды на сервер Heroku
  7. Добавить пакеты сборки и файл конфигурации
  8. Протестируйте наше приложение OCR

Создайте код Tesseract OCR + OpenCV на Python

Упомянутый код выполняет следующие действия:
→ Вход: файл изображения (.jpg, .png и т. Д.)
→ OpenCV: чтение изображения
→ Tesseract: выполнение OCR на изображении и распечатка текст
→ FastAPI: завершите приведенный выше код, чтобы создать развертываемый API

###########pythoncode.py###############
import numpy as np
import sys, os
from fastapi import FastAPI, UploadFile, File
from starlette.requests import Request
import io
import cv2
import pytesseract
import re
from pydantic import BaseModel
def read_img(img):
 pytesseract.pytesseract.tesseract_cmd = ‘/app/.apt/usr/bin/tesseract’
 text = pytesseract.image_to_string(img)
 return(text)
 
app = FastAPI()
class ImageType(BaseModel):
 url: str
@app.post(“/predict/”) 
def prediction(request: Request, 
 file: bytes = File(…)):
if request.method == “POST”:
 image_stream = io.BytesIO(file)
 image_stream.seek(0)
 file_bytes = np.asarray(bytearray(image_stream.read()), dtype=np.uint8)
 frame = cv2.imdecode(file_bytes, cv2.IMREAD_COLOR)
 label = read_img(frame)
 return label
 return “No post request found”

pytesseract.pytesseract.tesseract_cmd = ‘/app/.apt/usr/bin/tesseract’ - Это очень важная строка кода, и не забудьте добавить ее в свой код.

Заморозить зависимости

Нам нужно будет сохранить связанные с проектом зависимости (используемые библиотеки) в requirements.txt - Быстрый ярлык

pip freeze > requirements.txt

Создать Procfile

Procfile - приложения Heroku включают Procfile, который определяет команды, которые выполняются приложением при запуске. Вы можете использовать Procfile для объявления различных типов процессов, в том числе:

  • Веб-сервер вашего приложения
  • Несколько типов рабочих процессов
  • Одноэлементный процесс, например часы
  • Задачи, которые необходимо выполнить перед развертыванием нового выпуска
web: gunicorn -w 4 -k uvicorn.workers.UvicornWorker pythoncode:app

Создать Aptfile

Есть несколько пакетов Python, которые не поддерживаются Heroku. Чтобы они работали на Heroku, нам нужно использовать buildpacks. (Мы создадим его для Tesseract). Затем используйте этот пакет, включив любой пакет APT в Aptfile вашего приложения. Затем пакет сборки установит эти пакеты на динамометрический стенд, когда мы развернем ваше приложение.

Для нашей цели мы добавим в наш Aptfile следующее:

tesseract-ocr
tesseract-ocr-eng

Примечание. Мы добавим Tesseract Buildpack в консоль Heroku

Наконец, сохраните все эти файлы в одной папке.

Настроить учетную запись Heroku

→ Создайте новую учетную запись или войдите на https://id.heroku.com/login

→ Создайте новое приложение и дайте ему имя

→ Вы должны были войти в консоль

Скопируйте коды на сервер Heroku

Я использую Heroku CLI (интерфейс командной строки) для отправки кодов на Heroku, но вы также можете использовать Github. У Github есть дневной лимит на то, сколько раз коды могут быть отправлены, поэтому я предпочитаю использовать CLI.

Heroku очень подробно описал шаги для пользователя.

Это будет связано со следующим в командной строке:

$ heroku login
$ cd /Users/shirishgupta/Desktop/Heroku/heroku_sample/
$ git init
$ heroku git:remote -a tesseractsample

$ git add .
$ git commit -am "make it better"
$ git push heroku master

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

Добавить Buildpack

→ В консоли Heroku перейдите в Настройки
→ Добавьте следующий пакет сборки

https://github.com/heroku/heroku-buildpack-apt

→ Добавить конфигурационный файл Tesseract

TESSDATA_PREFIX = ./.apt/usr/share/tesseract-ocr/4.00/tessdata

Подсказка - найдите правильный путь к Tesseract, введя следующее в терминале heroku

$ heroku run bash
$ find -iname tessdata

Протестируйте наше приложение OCR

Выполнив все шаги, мы готовы протестировать наше распознавание текста. Перейдите на сайт heroku consle:
Открыть приложение или введите '«https://tesseractsample.herokuapp.com/docs женщина'

Входное изображение

Выходное изображение

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

Посетите блог на тему - Развертывание Python + Tesseract + OpenCV Fast API с помощью экземпляра AWS EC2