什么是PaddleOCR
PaddleOCR 是一个开源项目,旨在打造一套丰富、领先、且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地。是基于深度学习技术实现的,所以使用时需要训练好的权重文件,但这个不需要我们担心,官方已为我们提供了。
项目Github地址: PaddleOCR地址
安装PaddleOCR
# requirements.txt
paddlehub==2.2.0
paddlepaddle==2.3.1
# 安装
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
代码实现
paddleocr实现文字识别核心代码
def ocr_img(images: list, remote=False):
"""
识别多张图片,如果remote=True,则下载远程图片,如果remote=False,则直接将图片对象传入
:param images: 图片列表
:param remote: 释放远程
:return:
"""
try:
result = []
for i in range(0, len(images), 5):
_img_paths = images[i: 1 + 5]
ocr_model = get_ocr_model()
print('ocr_model',ocr_model)
img_paths = []
if remote:
for url in _img_paths:
img_name = download_img(url)
if not img_name:
continue
img_paths.append(img_name)
else:
for img in images:
img_name = str(int(time.time())) + '.jpg'
save_img(img_name, img)
img_paths.append(img_name)
imgs = []
for img in img_paths:
img_name = handle_img(img)
# 兼容中文路径
# img = cv2.imdecode(np.fromfile(os.path.join(images_path, img_name), dtype=np.uint8), -1)
img = cv2.imread(os.path.join(images_path, img_name))
imgs.append(img)
result.extend(ocr_model.recognize_text(images=imgs))
return result
except Exception as e:
logger.error(f"OCR Model处理失败, error: {e}", exc_info=True)
return []
def get_ocr_model():
"""手动GC,控制model使用内存"""
global OCR_MODEL_USER_TIMES
global OCRModel
module_name = "chinese_ocr_db_crnn_server"
# 使用10次,就释放模型
if OCR_MODEL_USER_TIMES < 10:
if not OCRModel:
OCRModel = hub.Module(name=module_name)
OCR_MODEL_USER_TIMES += 1
else:
del OCRModel
gc.collect()
OCRModel = hub.Module(name=module_name)
OCR_MODEL_USER_TIMES = 0
return OCRModel
flask对外提供的文字识别接口,支持文件和远程链接
@app.route('/ocr/img',methods=['POST','OPTIONS'])
def post():
img_url = get_params('url')
img = get_files('img')
result = []
if img_url:
result = ocr_img(images=[img_url, ], remote=True)
elif img:
img = img.stream.read()
result = ocr_img(images=[img, ], remote=False)
else:
result = AjaxResult(400,'','url与img必须传一个').data
return jsonify(result)
data = []
for res in result:
data.append(res['data'])
return jsonify(AjaxResult(200,data,'success').data)
使用方法
识别上传的图片
识别远程图片
识别网络图片 json
{
"url": "https://files.mdnice.com/user/4437/e2c791e3-a3d5-4d5b-9fb3-d6fe4a0d15d9.png"
}
识别上传的图片 form-data
img: formData()
返回值
{
"code": 200,
"msg": "success",
"data": [
[
{
"confidence": 0.9655303955078125,
"text": "UBDS",
"text_box_position": [
[
4,
1
],
[
120,
1
],
[
120,
28
],
[
4,
28
]
]
}
]
]
}
下载
本资源对PaddleOCR进行了封装,使用Flask对外提供接口,可使用docker-compose一键部署。
基于Flask+PaddleOCR实现的通用OCR服务