Пошаговый подход (включая скриншоты и код) о том, как создать OpenCV + Tesseract OCR на Heroku
Проработав в Data Science почти полдесятилетия, я понял, что многие из нас специализируются и делают упор на повышении точности алгоритмов, а не на их удобстве использования в реальной жизни. Обычно это приводит к различию в управлении ожиданиями между бизнес-командами и командами по анализу данных. И даже если мы создадим один из самых сложных алгоритмов, он бесполезен, пока не будет эффективно развернут в основном источнике. В этом блоге мы узнаем, как развернуть OCR с использованием Tesseract и OpenCV, написанного на Python на платформе Heroku.
Но обо всем по порядку - что такое Heroku?
Heroku - это облачная платформа - сервис (PaaS), поддерживающий несколько языков программирования. Он поддерживает несколько языков программирования, таких как Java, Node.js, Scala, Clojure, Python, PHP и Go. Он имеет функции, позволяющие разработчику создавать, запускать и масштабировать приложения одинаковым образом на большинстве языков.
Вкратце - мы можем использовать Heroku для развертывания нашей модели Python в производственной среде, чтобы ее мог использовать кто угодно и не зависеть от моего рабочего стола или операционной системы.
Так что же нам на самом деле делать?
Показатель
- Создайте код Tesseract OCR + OpenCV на Python
- Заморозить зависимости
- Создать Procfile
- Создать Aptfile
- Настроить учетную запись Heroku
- Скопируйте коды на сервер Heroku
- Добавить пакеты сборки и файл конфигурации
- Протестируйте наше приложение 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