腾讯云官方文字识别API文档地址:API Explorer - 云 API - 控制台 (tencent.com) 集成API文档地址:http://ocr.cbnxzs.com:8052/docs 或 http://ocr.cbnxzs.com:8052/redoc
1 腾讯云官方API使用方法
腾讯云官方的文档藏得比较深,不容易找到,可以直接点击链接API Explorer - 云 API - 控制台 (tencent.com)来找到腾讯云的官方文档。
1.1 腾讯云服务SDK
腾讯云官方的API使用集成在腾讯云SDK中,在使用这些API之前首先需要下载腾讯云的开发SDK,下载地址云产品SDK中心_云产品SDK文档-腾讯云 (tencent.com),在左边的产品中选择“人工智能-文字识别”,然后在右边选择响应语言的SDK下载即可。
1.2 调用代码生成
在API Explorer - 云 API - 控制台 (tencent.com)页面,在中间的表单里输入相应的信息,在右边选择对应的语言,即可生成调用代码。
这里有一个必须要输入的参数Region,一般选择华东地区(上海),然后左边的参数可以选填ImageBase64或者ImageUrl,两者选其中一种即可,如果选择的图片存储在本地,一般选择ImageBase64方法,在这之前需要将图片使用Base64编码成字符串。
1.3 获取密钥
在生成的代码部分有"SecretId", "SecretKey"两个字段需要替换为自己的账户的密钥。在访问密钥 - 控制台 (tencent.com)这个页面可以新建密钥,然后修改对应的生成代码的部分即可完成调用。
1.4 提取文字
调用的响应结果包含图像中的很多信息,但是只有文本信息是我们需要的,这个时候就需要对json进行操作,提取其中的文本信息。例如,某个输出示例:
我们需要提取
DetectedText
字段的内容,具体实现方式不唯一,可以自己尝试解决,或者直接保持返回的信息。2 集成OCR服务API
集成OCR服务API目前集成了两种OCR模型:来自腾讯云的付费印刷体识别与来自百度的开源PaddleOCR模型,两种模型调用的API保持一致,需要使用POST请求将图片的base64编码放在请求体中发送请求,可以得到最终识别结果的字符串。此外,还增加了图像增强服务,对拍照所产生的图片进行增强,再使用OCR模型进行识别,这样准确率更高。
预计在不久的将来会增加更多支持的模型。
整个服务的架构可以用以下的结构图来表示:

本项目中的API是指REST API,REST API 也称为 RESTful API,是遵循 REST 架构规范的应用编程接口(API 或 Web API),支持与 RESTful Web 服务进行交互。REST 是表述性状态传递的英文缩写。
当客户端通过 RESTful API 提出请求时,它会将资源状态表述传递给请求者或终端。该信息或表述通过 HTTP 以下列某种格式传输:JSON(Javascript 对象表示法)、HTML、XML、PHP 或纯文本。JSON 是最常用的编程语言配置文件格式,尽管它的名字英文原意为“JavaScript 对象表示法”,但它适用于各种语言,并且人和机器都能读。
你可以在任何平台(操作系统)、任何编程语言中使用REST API,它基于HTTP请求,大部分语言都内置了网络库(C/C++除外),可以方便地使用REST API而不需要安装额外的第三方库。
集成OCR服务API中不仅部署了PaddleOCR模型,使它可以用REST API 的方式调用,还封装了腾讯云OCR识别API为REST API,这样在调用腾讯云接口时,就不需要安装腾讯云的SDK了。
2.1 PaddleOCR 模型
PaddleOCR模型来自于PaddleOCR项目
本项目使用了PaddleOCR中的文本检测模型、方向分类器和文本识别模型,先识别出每个文本的文本框,再对每个文本框内文字的方向进行识别,修正方向后再使用文本识别模型识别出文本。这样对于同一张图片中,文本的方向不同的情况下有非常好的识别效果。
本项目使用了PaddleOCR的中文和英文识别模型,只能识别出中文和英文字符,对其他语言的字符不能很好地识别,如果需要接入对其他语言的支持,请在第三部分部署集成OCR模型API中自行修改相关代码。
集成OCR服务API中PaddleOCR 的请求地址为
http://ocr.cbnxzs.com:8052/api/paddle
2.2 腾讯云通用印刷体识别API
腾讯云文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
可在以下网页体验腾讯云的OCR功能:
本项目中集成封装的腾讯云OCR服务为通用印刷体识别,识别语言为中英文混合。
集成OCR服务API中TencentOCR 的请求地址为
http://ocr.cbnxzs.com:8052/api/tencent
腾讯云OCR服务为付费服务,集成OCR服务API中包含了少量使用次数,请谨慎使用腾讯云OCR服务,如果非必要,请尽量使用PaddleOCR服务。
2.3 图像增强服务
图像增强服务来自本人的另一个项目
图片增强主要分为以下步骤进行:
- 使用高斯滤波去除噪声、使用膨胀操作使边缘更清晰、使用Candy算子进行边缘检测;
- 找出图片边缘中的最大轮廓、凸包拟合轮廓边缘、自适应排序找出最大四边形;
- 对原图进行透视变换,使最大四边形编程图像主体;
- 使用自适应二值化对图片进行锐化增强。
图片增强服务可以对图片进行矫正增强,例如下面这个例子:

进行图像增强后的图像为:

使用图像增强服务,只需要在对应的OCR服务请求参数中加入以下参数:
注意:图像增强服务仅适用于图片中有明显四边形边界的图像,否则可能造成意想不到的结果。
2.4 图片的Base64编码
图片的Base64编码指的是一种将图片数据转换成文本字符串的方法。具体而言,Base64编码将每3个字节的原始二进制数据转换成4个字符的文本字符串,这些字符都来自于一个64字符的字符表(包括大小写字母、数字和符号)。
例如,一张300x200像素的位图图片,如果使用24位色深,则它的大小为300x200x3 = 180,000个字节。如果对这个图片进行Base64编码,将得到一个240,000个字符的文本字符串。这个文本字符串可以直接在HTML、CSS和JavaScript等上下文中使用,而不需要传输二进制文件,从而具有更好的兼容性和可移植性。
在网页开发中,Base64编码常常用于在CSS中嵌入图片、在HTML中内联图片、或者在JavaScript中预加载图片等场景。
以下工具可以体验将一张图片转换为Base64编码:
2.5 HTTP请求
HTTP请求是一种客户端向服务器发送请求,以获取特定资源的协议。在Web开发中,HTTP(超文本传输协议)是用于在客户端和服务器之间传输数据的标准通信协议。
HTTP请求通常由客户端发起,发送给服务器,请求服务器返回需要的资源,如文本、图像、视频文件等。请求通常由一个请求报文组成,该报文包含了请求的类型(GET、POST、PUT、DELETE等)、请求的路径、请求头以及可选的请求主体。
服务器收到请求后,通过处理请求报文,查找请求的资源并将响应发送回客户端。响应通常由一个响应报文组成,该报文包括响应的状态码、响应头以及可选的响应主体。
常见的HTTP请求方法有:
- GET:从服务器获取资源,不含请求主体。
- POST:向服务器提交数据,可能包含请求主体。
- PUT:像服务器上传新的数据,可能包含请求主体。
- DELETE:从服务器删除指定资源,可能包含请求主体。
HTTP请求的过程就是客户端和服务器之间通过HTTP协议通信、交流和传输资源的整个流程。
2.6 集成OCR服务API调用
调用OCRAPI主要分为两步:进行Base64编码和发送请求。
以PaddleOCR模型为例,需要向地址
http://ocr.cbnxzs.com:8052/api/paddle
发送一个POST请求,请求体的构成如下:你可以使用以下工具体验集成OCR服务API的调用:
以下是常用的开发编程语言对集成OCR服务API的调用实例:
2.6.1 Python
Python仅仅需要一个第三方包
requests
,如果你使用Anaconda的话,甚至自带了这个包。2.6.2 Node.js
Node.js 需要
fs
和 axios
两个包,可以通过npm install xxx
或者 yarn add xxx
来安装这些包,当然你也可以用其他类似的包来实现调用。2.6.3 JAVA
Java需要第三方包
com.alibaba.fastjson2.JSONObject
。2.6.4 .NET
2.6.5 Golang
3 自定义集成OCR服务API部署
如果你不满足于已有的集成OCR服务API,想要自己添加功能,或者是想结合到自己的服务端内,你可以自己来定制、部署属于自己的集成OCR服务API。
当然,本项目是基于Docker运行的,它不仅支持 Linux 系统,它还能很好地支持Windows、macOS等系统,借助Docker容器技术,部署起来非常方便。
值得注意的是,部分OCR识别模型,例如PaddleOCR,它仅支持X86_64架构的CPU,而不支持ARM架构的CPU,这对跨平台性可能有一点影响。
本项目的地址:
本项目基于TencentOCR API 和 PaddleOCR, 使用FastAPI 开发,集成了两种API的使用方法,并在Docker中部署,部署过程简单方便。
3.1 配置腾讯云密钥
修改目录
ocrapi/config.example.py
修改完内容后,将文件名改为config.py
3.2 编译Docker镜像
如果你没有安装Docker,请参考官方文档
在本项目根目录,使用以下命令就可以编译镜像
此命令会自动下载相关依赖,并且在任何环境下都不会报错,不过,可能需要等待一会......
3.3 启动Docker容器
使用以下命令
至此,集成OCR服务API部署完成。
致谢
感谢某位同学的DNS(域名解析服务)支持。
- 作者:Fructose
- 链接:https://blog.pibonds.com/article/c4a4950b-c366-4639-9e14-c072762c08ba
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。