
长期以来,从图像中提取文本一直是软件工程中的一个热门问题。光学字符识别(OCR)是广泛用于解决这一问题的先驱技术。OCR 能够将包含文本的图像转化为机器可读的数据,它给从文档处理自动化到语言翻译等各个行业带来了革命性的变化。
虽然商业 OCR 解决方案已经存在,但使用 Python(一种通用且功能强大的编程语言)创建自己的 OCR API 具有多种优势,包括定制化、数据隐私控制和潜在的成本节约。
本指南将指导您使用 Python 创建自己的 OCR API。它探讨了开发有效的 OCR API 所需的必要库、技术和注意事项,使您能够在自己的应用程序中利用 OCR 的强大功能。
要继续学习,您需要对 Python 和 Flask 有基本的了解,并在系统中安装 Python 的本地副本。
在本指南中,您将学习如何构建一个 Flask 应用程序,允许用户通过 POst 端点上传图片,然后使用 Pillow 加载图片,并使用 封装器(用于 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 上,可以使用 运行以下命令安装 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 已准备就绪,是时候进行测试了!
您可以使用内置的 cURL CLI 向您的 API 发送请求,也可以改用 Postman 等详细的 API 测试工具。要测试 API,你需要下载一个包含一些文本的示例图片。你可以使用这张,也可以暂时使用。
将这两种图片下载到项目目录中,并根据你选择的图片给它起一个简单的名字,如 simple-image.png 或 scribbled-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,以便在线访问。
要将应用程序部署到 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"
这将指示构建平台
gunicorn 启动应用程序。此外,运行以下命令生成 requirements.txt 文件,以便应用平台在构建过程中安装所需的 Python 软件包:
pip3 freeze > requirements.txt
Git 仓库准备就绪后,请按照以下步骤将 OCR API 部署到服务器(以 Kinsta 为例):
部署完成后,复制已部署应用程序的链接,并在 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 中试用应用程序
至此,基本 OCR API 开发完成。您可以访问 GitHub 上。
现在,您已经拥有了一个可运行的自托管 OCR API,您可以根据自己的喜好对其进行定制!该 API 可以从图像中提取文本,为数据提取、文档数字化和其他应用提供了宝贵的工具。
在您继续开发和完善 OCR API 的过程中,可以考虑探索一些高级功能,如多语言支持、图像预处理技术,以及与云存储服务集成以存储和访问图像。
宝塔面板其中一个最为便捷的功能之一,无需SFTP或者FTP即可对服务器的文件内容进行上传、下载、编辑及删除等管理操作。 文件管理,用于管理该服务器上的文件内容。 文件的基础操作 文件的基础操作有哪些了,主要有这些方面:复制、粘贴、剪切、删除、重命名、压缩、刷新、新建文件、新建目录。...
Node.js和PHP是Web开发工作中常用的两种基本Web技术。两者都为服务器端开发做出了贡献,Node.js甚至同时服务于客户端和服务器端开发。 PHP已经为开发人员服务了近3年,现在它为78%的网络提供支持。相比之下,Node.js相对较新,但扩展速度非常快,由于其全栈开发能力而成为流行...
您可能听说过SaaS,您可能听说过PaaS和IaaS,但您听说过函数即服务 (FaaS) 吗? FaaS市场正在快速增长。根据Allied Market Research的数据,2018年市场价值 。预计到2026年,这一数字将增长到240亿美元——这意味着该行业将从2020年到2026年以2...
SaaS、IaaS和PaaS这三个术语几乎可以互换使用——尽管它们根本不能互换。那么它们之间有什么区别呢? 虽然您可能听说过软件即服务 (SaaS),但IaaS和PaaS在特定技术社区之外鲜为人知。分别是基础架构即服务和平台即服务的缩写,这些工具以及SaaS都通过云交付资源。然而,正是交付的资...
DragonflyDB是一个内存数据存储应用程序,可以帮助提高网站性能。 DragonflyDB DragonflyDB是一个免费的内存数据存储应用程序,运行在Linus OS上。它使用每核线程架构来减少延迟。Dragonfly与Redis和Memcached兼容。它是KeyDB的合...
是一个免费的开源Web开发框架。它旨在通过为模板设计提供一组语法来简化响应式、移动优先网站的Web开发过程。 换句话说,Bootstrap帮助Web开发人员更快地构建网站,因为他们不需要担心基本的命令和功能。它由HTML、CSS和基于JS的脚本组成,用于各种与网页设计相关的功能和组件。 本文...