# 政务OCR选型:EasyOCR vs PaddleOCR,一个管文字一个管表格
政务OCR选型EasyOCR轻量通用PaddleOCR专治表格我两个都用了背景政务系统里OCR的需求比你想的多。远程帮办时群众上传身份证照片、拍照的材料业务系统里扫描的审批表、盖章的附件、打印的报表——都得认字。试了两个开源OCR方案EasyOCR和PaddleOCR。结论写在前面通用文字识别用EasyOCR表格识别用PaddleOCR没有一家通吃。EasyOCR轻量、通用、够用安装pipinstalleasyocr使用importeasyocr readereasyocr.Reader([ch_sim,en],gpuFalse)resultreader.readtext(rd:\身份证正面.jpg)fordetectioninresult:print(detection[1])# detection[1]是识别的文字就这么点代码。ch_sim是简体中文en是英文。gpuFalse表示用CPU跑没有显卡也能用。效果对于纯文字图片身份证、营业执照、公文EasyOCR识别率不错身份证正面姓名、身份证号、地址识别准确率约95%公文标题和正文基本无误英文混排能处理局限表格别想了。EasyOCR只能识别文字不识别结构。一张表格图片EasyOCR输出的是一堆散落的文字片段没有行列信息没有单元格边界。对政务场景里的审批表、信息登记表这个能力远远不够。PaddleOCR表格识别是真强安装pipinstallpaddleocr普通文字识别frompaddleocrimportPaddleOCR ocrPaddleOCR(use_angle_clsTrue,langch)resultocr.ocr(rd:\身份证正面.jpg,clsTrue)forlineinresult:forjinrange(0,line.__len__()):print(line[j][1][0])# 文字内容文字识别准确率和EasyOCR差不多略好一点点。但PaddleOCR真正强的是表格结构识别。表格识别PPStructurefrompaddleocrimportPPStructure table_enginePPStructure(table_model_dirre:\model\ch_ppstructure_mobile_v2.0_SLANet_infer)resulttable_engine(rd:\审批表.jpg)print(result)PPStructure的输出包含每个单元格的坐标单元格内的文字表格结构几行几列哪些单元格合并了这对政务审批表太关键了——知道哪个值在第几行第几列才能把识别结果映射回业务字段。代价PaddleOCR比EasyOCR重得多依赖链长PaddlePaddle框架本身就不轻模型文件大表格识别模型单独下载首次加载慢冷启动要好几秒GPU加速效果明显CPU跑会比较慢实际选型场景选择原因身份证识别EasyOCR轻量、够用、部署简单营业执照识别EasyOCR纯文字不需要表格结构审批表/登记表PaddleOCR PPStructure必须有表格结构才能映射字段公文正文两者都行都能认EasyOCR部署更轻盖章文件两者都行印章区域识别都不太好需要后处理我的做法在政务远程帮办系统里两个都部署了前端上传身份证、营业执照等纯文字图片 → 走EasyOCR前端上传审批表、信息登记表等表格图片 → 走PaddleOCR PPStructure路由很简单——前端上传时传一个类型标记后端根据类型调不同的OCR引擎。defocr_recognize(image_path,doc_type):ifdoc_typein(idcard,license,document):# 纯文字EasyOCRreadereasyocr.Reader([ch_sim,en],gpuFalse)resultreader.readtext(image_path)return[item[1]foriteminresult]elifdoc_typein(form,table,approval):# 表格PaddleOCR PPStructuretable_enginePPStructure(table_model_dirpath/to/table_model)resulttable_engine(image_path)returnparse_table_structure(result)踩坑1. EasyOCR的Reader不要每次都neweasyocr.Reader()初始化要加载模型冷启动好几秒。应该全局初始化一次后续调用readtext()就行。2. PaddleOCR的模型路径要配对PPStructure需要单独指定表格模型路径table_model_dir。如果只装了基础OCR模型没装表格模型不会报错但返回的结构里没有表格信息。要确保三个模型都下载了检测模型det、识别模型rec、表格模型table。3. 盖章区域的文字基本都认不出来红色公章盖在文字上面两个OCR引擎都会把印章图案当成干扰。这不是OCR的问题需要先做印章检测和去除图像预处理再送OCR。这一步我还没做目前是让用户避开印章区域拍照。4. CPU跑都不快EasyOCR CPU模式下一张身份证大概2-3秒。PaddleOCR PPStructure更慢一张表格5-8秒。生产环境建议上GPU或者做异步队列——前端上传后后台识别识别完回调通知。总结EasyOCR轻量通用纯文字场景首选部署简单PaddleOCR PPStructure的表格识别是杀手锏政务审批表必须用它两个都部署不冲突按文档类型路由即可盖章识别是两者的共同短板需要图像预处理配合