利用PaddleOCR实现一个粤康码/行程卡识别工具

2022-08-30 15:34:27 浏览数 (1)

基本需求

有若干粤康码和行程卡的截图,要自动识别是否为当天提交的,粤康码是否绿码,行程卡是否带星

实现思路

整体的实现思路是:使用PaddleOCR的离线模型实现OCR识别功能,利用pywebio搭建一个简易的web服务,最后使用pyinstaller打包为windows可执行文件。

PaddleOCR的离线模型使用的是RapidOCR的实现:https://github.com/RapidAI/RapidOCR,在一开始我想用Paddle官方的Paddlehub工具在服务器上部署一个PaddleOCR工具,但是发现批量识别的时候对服务器内存开销太大了。

首先将RapidOCR项目下python/onnxruntime_infer目录下载到本地

下载相应模型和用于显示的字体文件

  • 百度网盘 提取码:30jv | Google Drive

下载之后模型和相应字体文件放在fontsmodels下,最终目录结构如下:

代码语言:javascript复制
models
  |-- ch_PP-OCRv2_det_infer.onnx
  |-- ch_ppocr_mobile_v2.0_cls_infer.onnx
  |-- ch_ppocr_mobile_v2.0_det_infer.onnx
  |-- ch_ppocr_server_v2.0_det_infer.onnx
  |-- ch_ppocr_server_v2.0_rec_infer.onnx
  |-- en_number_mobile_v2.0_rec_infer.onnx
  |-- korean_mobile_v2.0_rec_infer.onnx
  `-- japan_rec_crnn.onnx
fonts
  |-- msyh.ttc
  `-- korean.ttf

随后编写PyWebIO的脚本

此处将PaddleOCR识别出的字符拼接为一个,然后根据关键词检验是否为今日的记录。

比如:粤康码的日期格式为「04-20」,则可以按照此在字符串中匹配子串,同理匹配「绿码」关键字可以确定是否为绿码

在行程卡检验中,日期格式为「04.20」,当行程卡带星时,会有中高风险地区提升,则匹配「中高风险」字符串即可。

然后建议新建一个虚拟环境,使用pyinstaller打包安装

相关命令如下

代码语言:javascript复制
pyi-makespec -c web_service.py 

随后修改生成的web_service.spec文件,如下

代码语言:javascript复制
# -*- mode: python ; coding: utf-8 -*-
from pywebio.utils import pyinstaller_datas

....

a = Analysis(
    ...
    datas=pyinstaller_datas(),
    ...
)

然后打包生成

代码语言:javascript复制
pyinstaller web_service.py

会在dist文件夹下生成一个可执行文件

随后把相关资源文件夹复制到可执行文件(exe)的同级目录下

可能会弹出相关警告,同意即可

访问localhost:8866,批量上传图片耐心等待检验即可,若图片有问题时,系统会弹出来,进行复核就行了。

未来工作

  • 显示使用耗时
  • 优化字符串匹配的算法,提高识别效率

0 人点赞