私有化部署PaddleOCR图片中文字识别
图片文字识别(OCR)的技术目前已经比较成熟,有很多开源模型可以使用。本文主要以百度开源的PaddleOCR为例,进行私有化部署
为什么要进行文字识别私有化
很多图片是比较隐私的,比方身份证,虽然市面上有很多很优质价格也不高的身份证图片识别API(比方我司也有,点此查看)。但是毕竟是隐私内容,图片识别需要上传到公网,公网那边留存多久呢?我司的身份证识别接口是使用的阿里云对象存储定时删除(24小时),该对象存储不对外访问,在一定程度上杜绝了风险以及隐私泄露的可能。
但是要完全杜绝这种可能,私有化是唯一有效的处理方式。
私有化很贵吗?运维很难吗?
私有化不贵而且运维不难,因为我司已经有了成熟的方案,可以直接部署在阿里云函数计算上面,按调用消耗计费,无需预付,每个小时阿里云自动生成账单,用阿里云余额抵扣。综合成本来看,还要比市面上的商用接口便宜很多。
运维上来说,依托阿里云的自动化流水线,可以自动完成性能配置上的弹性伸缩,基本无需运维。
私有化后原来的API接口替换麻烦吗?
私有化后会有新的API接口,可能与原来的API接口的请求方式和返回参数有所区别,需要开发人员稍微修改一下,不是很复杂。
私有化不能离线使用吗?
离线使用是可以的,但是需要本地服务器有GPU,而且运维来说相对麻烦,只能依赖公司内部人员。所以最优解决方案是在阿里云私有化部署。
私有化部署步骤
部署 PaddleOCR 到本地
# 阿里云的镜像仓库地址
docker run -itd --name ppocr -p 9000:9000 registry.cn-hongkong.aliyuncs.com/llapi/ppocr:1.8 /bin/bash -c "sh /PaddleOCR/start.sh"
# 阿里云的镜像仓库地址 服务器端模型
docker run -itd --name ppocr -p 9000:9000 registry.cn-hongkong.aliyuncs.com/llapi/ppocr:1.6.server /bin/bash -c "sh /PaddleOCR/start.sh"
调用 OCR
计算待识别图片的Base64编码
发送服务请求(发送参数,参考下面命令)
curl -H "Content-Type:application/json" -X POST --data "{\"images\": [\"图片base64\"]}" http://127.0.0.1:9000/predict/ocr_system
返回结果(如果调用成功,会返回如下结果){"msg":"","results":[[{"confidence":0.9853195548057556,"text":"测试图像路径,可以是单张图片路径,也可以是图像集合目录路径","text_region":[[5,10],[466,10],[466,24],[5,24]]}]],"status":"000"}
代码示例
import requests
import base64
def ocr(文件地址):
with open(文件地址, 'rb') as f:
data = f.read(-1)
image = str(base64.b64encode(data), encoding='utf-8')
data = '{"images":["' + image + '"]}'
txt = requests.post("http://127.0.0.1:9000/predict/ocr_system", data=data,
headers={'Content-Type': 'application/json'})
return txt.content.decode("utf-8")
print(ocr("./test.png"))