当前位置:首页>WordPress资讯>如何用Python构建自己的OCR API

如何用Python构建自己的OCR API

如何用Python构建自己的OCR API

长期以来,从图像中提取文本一直是软件工程中的一个热门问题。光学字符识别(OCR)是广泛用于解决这一问题的先驱技术。OCR 能够将包含文本的图像转化为机器可读的数据,它给从文档处理自动化到语言翻译等各个行业带来了革命性的变化。

虽然商业 OCR 解决方案已经存在,但使用 Python(一种通用且功能强大的编程语言)创建自己的 OCR API 具有多种优势,包括定制化、数据隐私控制和潜在的成本节约。

本指南将指导您使用 Python 创建自己的 OCR API。它探讨了开发有效的 OCR API 所需的必要库、技术和注意事项,使您能够在自己的应用程序中利用 OCR 的强大功能。

前提条件

要继续学习,您需要对 Python 和 有基本的了解,并在系统中安装 Python 的本地副本。

创建 OCR API

在本指南中,您将学习如何构建一个 Flask 应用程序,允许用户通过 端点上传图片,然后使用 Pillow 加载图片,并使用 PyTesseract 封装器(用于 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.scribbled-image.png

接下来,打开终端并导航到项目目录。运行以下命令测试 API:

curl -X POST -F “image=@scribbled-image.png” :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 应用程序平台(或任何其他环境)上使用封装器,还需要在那里进行设置。

如果您使用的是远程计算实例(如 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 上运行以下命令:


返回的响应应与本地收到的响应相同:

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

您还可以使用 Postman 测试 API。

如何用Python构建自己的OCR API

在 Postman 中试用应用程序

至此,基本 OCR API 开发完成。您可以访问 GitHub 上该项目的完整代码。

小结

现在,您已经拥有了一个可运行的自托管 OCR API,您可以根据自己的喜好对其进行定制!该 API 可以从图像中提取文本,为数据提取、文档数字化和其他应用提供了宝贵的工具。

在您继续开发和完善 OCR API 的过程中,可以考虑探索一些高级功能,如多语言支持、图像预处理技术,以及与服务集成以存储和访问图像。

原文地址:https://www.wbolt.com/python-ocr.html

WordPress资讯

整合聊天机器人并不能让Edge成为AI浏览器

2024-1-22 1:15:29

WordPress资讯

什么是Bun?基于Node.js的一体化运行环境

2024-1-22 1:15:32

个人中心
今日签到
有新私信 私信列表
搜索