基本需求
有若干粤康码和行程卡的截图,要自动识别是否为当天提交的,粤康码是否绿码,行程卡是否带星
实现思路
整体的实现思路是:使用PaddleOCR的离线模型实现OCR识别功能,利用pywebio搭建一个简易的web服务,最后使用pyinstaller打包为windows可执行文件。
PaddleOCR的离线模型使用的是RapidOCR的实现:https://github.com/RapidAI/RapidOCR,在一开始我想用Paddle官方的Paddlehub工具在服务器上部署一个PaddleOCR工具,但是发现批量识别的时候对服务器内存开销太大了。
首先将RapidOCR项目下python/onnxruntime_infer目录下载到本地
下载相应模型和用于显示的字体文件
- 百度网盘 提取码:30jv | Google Drive
下载之后模型和相应字体文件放在fonts
和models
下,最终目录结构如下:
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,批量上传图片耐心等待检验即可,若图片有问题时,系统会弹出来,进行复核就行了。
未来工作
- 显示使用耗时
- 优化字符串匹配的算法,提高识别效率