如何用Python構建自己的OCR API

如何用Python構建自己的OCR API

文章目录

  • 前提條件
  • 建立 OCR API
  • 本地測試 OCR API
  • 部署 OCR API
  • 小結

如何用Python構建自己的OCR API

長期以來,從影象中提取文字一直是軟體工程中的一個熱門問題。光學字元識別(OCR)是廣泛用於解決這一問題的先驅技術。OCR 能夠將包含文字的影象轉化為機器可讀的資料,它給從文件處理自動化到語言翻譯等各個行業帶來了革命性的變化。

雖然商業 OCR 解決方案已經存在,但使用 Python(一種通用且功能強大的程式語言)建立自己的 OCR API 具有多種優勢,包括定製化、資料隱私控制和潛在的成本節約。

本指南將指導您使用 Python 建立自己的 OCR API。它探討了開發有效的 OCR API 所需的必要庫、技術和注意事項,使您能夠在自己的應用程式中利用 OCR 的強大功能。

前提條件

要繼續學習,您需要對 Python 和 Flask 有基本的瞭解,並在系統中安裝 Python 的本地副本。

建立 OCR API

在本指南中,您將學習如何構建一個 Flask 應用程式,允許使用者通過 POST 端點上傳圖片,然後使用 Pillow 載入圖片,並使用 PyTesseract 封裝器(用於 Tesseract OCR 引擎)進行處理。最後,它將提取的文字作為對請求的響應返回。

您可以進一步自定義此 API,以提供基於模板的分類(從發票中提取細列專案、稅表中的輸入等)或 OCR 引擎選擇等選項(您可以在此處找到更多 OCR 引擎)。

首先,為專案建立一個新目錄。然後,執行以下命令在資料夾中建立一個新的虛擬環境:

python3 -m venv env
source env/bin/activate

接下來,執行以下命令安裝 Flask、PyTesseract、Gunicorn 和 Pillow:

pip3 install pytesseract flask pillow gunicorn

安裝完成後,您需要在主機上安裝 Tesseract OCR 引擎。Tesseract 的安裝說明因主機作業系統而異。你可以在這裡找到相應的說明。

例如,在 MacOS 上,可以使用 Homebrew 執行以下命令安裝 Tesseract:

brew install tesseract

一旦完成,PyTesseract 包裝器就能與 OCR 引擎通訊並處理 OCR 請求。

注:這僅在開發環境中執行。當您將應用程式部署到 Kinsta 等遠端託管平臺時,您需要再次執行此操作(儘管託管平臺要求的方式不同–您稍後會明白)。

現在,您可以編寫 Flask 應用程式了。新建一個名為 ocrapi 的目錄,並在該目錄下新建一個名為 main.py 的檔案。儲存以下內容:

from flask import Flask, request, jsonify
from PIL import Image
import pytesseract
app = Flask(__name__)
@app.route('/ocr', methods=['POST'])
def ocr_process():
if request.method == 'POST':
image_file = request.files['image']
image_data = Image.open(image_file)
# Perform OCR using PyTesseract
text = pytesseract.image_to_string(image_data)
response = {
'status': 'success',
'text': text
}
return jsonify(response)

上面的程式碼建立了一個基本的 Flask 應用程式,它只有一個端點 – /ocr。當你向該端點傳送帶有影象檔案的 POST 請求時,它會提取檔案,使用 pytesseract 封裝器的 code_too_string() 方法執行 OCR,並將提取的文字作為響應的一部分發回。

在同一 ocrapi 目錄下建立 wsgi.py 檔案,並儲存以下內容:

from ocrapi.main import app as application
if __name__ == "__main__":
application.run()

現在,您可以使用以下命令執行應用程式:

gunicorn ocrapi.wsgi

您的基本 OCR API 已準備就緒,是時候進行測試了!

本地測試 OCR API

您可以使用內建的 cURL CLI 向您的 API 傳送請求,也可以改用 Postman 等詳細的 API 測試工具。要測試 API,你需要下載一個包含一些文字的示例圖片。你可以使用這張簡單的圖片,也可以暫時使用這張潦草的圖片

將這兩種圖片下載到專案目錄中,並根據你選擇的圖片給它起一個簡單的名字,如 simple-image.pngscribbled-image.png

接下來,開啟終端並導航到專案目錄。執行以下命令測試 API:

curl -X POST -F “image=@scribbled-image.png” localhost:5000/ocr

這將向您的 OCR API 傳送請求,並返回類似的響應:

{
"status": "success",
"text": "This looks like it was written in a hucry\n\n"
}

這證明您的 OCR API 設定正確。您也可以嘗試使用簡單的圖片,下面是響應的樣子:

{
"status": "success",
"text": "This looks like it was written with a steady hand\n\n"
}

這也證明了 Tesseract OCR 引擎的準確性。現在,您可以繼續在應用程式託管伺服器上託管您的 OCR API,以便線上訪問。

部署 OCR API

要將應用程式部署到 Kinsta,首先需要將專案程式碼推送到 Git 提供商(Bitbucket、GitHub 或 GitLab)。

在推送程式碼之前,您需要在主機系統上單獨設定 Tesseract,以便使用 PyTesseract 封裝器。要在 Kinsta 應用程式平臺(或任何其他環境)上使用封裝器,還需要在那裡進行設定。

如果您使用的是遠端計算例項(如 AWS EC2),您可以通過 SSH 進入計算例項,然後執行相應的命令在其上安裝軟體包。

但是,應用程式平臺不提供直接訪問主機的許可權。您需要使用 Nixpacks、Buildpacks 或 Dockerfiles 等解決方案來設定應用程式環境的初始要求(其中包括在本地設定 Tesseract 軟體包),然後安裝應用程式。

在專案目錄中新增一個 nixpacks.toml 檔案,內容如下:

# nixpacks.toml
providers = ["python"]
[phases.setup]
nixPkgs = ["...", "tesseract"]
[phases.build]
cmds = ["echo building!", "pip install -r requirements.txt", "..."]
[start]
cmd = "gunicorn ocrapi.wsgi"

這將指示構建平臺

  1. 使用 Python 執行時構建和執行應用程式
  2. 在應用程式的容器中設定 Tesseract 軟體包。
  3. 使用 gunicorn 啟動應用程式。

此外,執行以下命令生成 requirements.txt 檔案,以便應用平臺在構建過程中安裝所需的 Python 軟體包:

pip3 freeze > requirements.txt

Git 倉庫準備就緒後,請按照以下步驟將 OCR API 部署到伺服器(以 Kinsta 為例):

  1. 登入或建立賬戶,檢視 MyKinsta 面板。
  2. 使用 Git 提供商授權 Kinsta。
  3. 在左側邊欄單擊 Applications,然後單擊 Add Application
  4. 選擇要部署的版本庫和分支。
  5. 從 35 個選項列表中選擇一個可用的資料中心位置。Kinsta 會通過 Nixpack 檔案自動檢測應用程式的構建設定,因此請將開始命令欄位留空。
  6. 選擇應用程式資源,如 RAM 和磁碟空間。
  7. 單擊 Add Application

部署完成後,複製已部署應用程式的連結,並在 CLI 上執行以下命令:

curl -x POST -F “image=@simple-image.png” <your-deployed-app-link>/ocr

返回的響應應與本地收到的響應相同:

{"status":"success","text":"This looks like it was written with a steady hand\n\n"}

您還可以使用 Postman 測試 API。

在 Postman 中試用應用程式

在 Postman 中試用應用程式

至此,基本 OCR API 開發完成。您可以訪問 GitHub 上該專案的完整程式碼

小結

現在,您已經擁有了一個可執行的自託管 OCR API,您可以根據自己的喜好對其進行定製!該 API 可以從影象中提取文字,為資料提取、文件數字化和其他應用提供了寶貴的工具。

在您繼續開發和完善 OCR API 的過程中,可以考慮探索一些高階功能,如多語言支援、影象預處理技術,以及與雲端儲存服務整合以儲存和訪問影象。

評論留言