# PaddleOCR-Sevice **Repository Path**: leonis0724/paddle-ocr-sevice ## Basic Information - **Project Name**: PaddleOCR-Sevice - **Description**: 基于PaddleOCR + Flask 识别PDF扫描件(图片), 中/英文字符验证码的 API 服务 - V0.1 - **Primary Language**: Python - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 0 - **Created**: 2024-03-14 - **Last Updated**: 2025-06-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 项目介绍: 使用 AI-PaddleOCR 模型服务, 识别来源于 Pdf & Images 中的文本信息. 一. 服务支持(截至目前: 20231027) # [1] 识别 - 全文(全部文档对象: 标题/文本/表格/图像/页眉/页脚等) -- 全文档识别模式 1.1 支持识别 "图片" 中, 包含的全部文本信息.(图片类型: jpeg, png 类型) 1.2 支持识别 "PDF" 中, 包含的全部文本信息.(Tip: 支持大多数 pdf 文件, 特殊pdf: 加密/不支持的特殊文档对象) # [2] 识别 - 指定文档对象域的文本 -- 指定文档对象域识别模式 2.1 支持识别 "表格Table"(文本对象) 的文本信息.(Tip: 推荐规范表格, "特殊表格(Ex: 单列拆分,单元格内置图文等)"识别错误率较高) 2.2 暂不支持 - 文档对象(Ex: 图像Figure, 文本Text, 页眉Header, 页脚Footer)等(如有需求,后续开发). 2.3 暂不支持 - 提取 Pdf 文档中 "嵌入文本的 Url链接", 支持识别明文展示Url链接(如有需求,后续开发). 二. Api 说明 # [1] Ocr Service - 服务运行状态检测 API , 请求方式: GET (域名配置完成, 可通过浏览器直接访问, 推荐 使用 1st - Api) Api-01: https://leads.dev.zeiss.com.cn/api/eva-service-ocr Api-02: https://leads.dev.zeiss.com.cn/api/eva-service-ocr/api/v2/ # [2] Ocr Service - 图片识别服务 API, 请求方式: Post (前端暂未开发界面, 暂时以 Postman 访问 Api 域名进行测试). Api-03: https://leads.dev.zeiss.com.cn/api/eva-service-ocr/api/v2/image/analysis # 2.1 全文档识别模式(默认): 返回图片中, 识别所有的文本信息. # Form 表单参数: # 1. language : ch / en (文本类型, 默认: ch, 支持 en) # 2. doc_object: ALL (文本类型, 默认: ALL) # 3. image : test.jpg (文件类型, 上传图片文件, 推荐: jpg / png 类型图片) # 2.2 指定文档对象域的识别模式: 返回图片中, 识别指定表格Table区域的文本信息. # Form 表单参数: # 1. language : ch / en (文本类型, 默认: ch, 支持 en) # 2. doc_object: TABLE (文本类型, 默认: ALL) # 3. image : test.jpg (文件类型, 上传图片文件, 推荐: jpg / png 类型图片) # [3] Ocr Service - 文件(PDF)识别服务 API, 请求方式: Post (域名服务暂时不可用, 网关访问问题未解决, code: 50000) Api-04: https://leads.dev.zeiss.com.cn/api/eva-service-ocr/api/v2/pdf/analysis # 3.1 全文档识别模式(默认): 返回PDF文件中, 识别所有页面的文本信息. # Form 表单参数: # 1. language : ch (文本类型, 默认: ch) # 2. doc_object: ALL (文本类型, 默认: ALL) # 3. pdf : test.pdf (文件类型, 上传pdf文件) # 3.2 指定文档对象域的识别模式: 返回图片中, 识别指定表格Table区域的文本信息. # Form 表单参数: # 1. language : ch (文本类型, 默认: ch) # 2. doc_object: TABLE (文本类型, 默认: ALL) # 3. pdf : test.pdf (文件类型, 上传pdf文件) 三. 开发方案(简要说明) # Step01: # A. 若上传文件为图片, 则容器内部进行本地缓存, 然后进行模型识别, 识别出结果后删除缓存图片. # B. 若上传文件为PDF, 则流式接收数据流到内存, 拆分png图片进行缓存, 然后进行模型识别(同步方式), 识别出结果后删除缓存图片. # Step02: # [1] 识别 Pdf & Image 全部文档识别 - 方案: PaddleOCR 文本识别引擎 # A. 中/英文(ch, en) - 文本识别模型(默认: 中文PaddleOCR - V3 版本模型 - 目前最优) 1. 语言检测模型: ch_PP-OCRv3_det_infer (准确度: 95% +) 2. 方向分类模型: ch_ppocr_mobile_v2.0_cls_infer 3. 文本推断模型: ch_PP-OCRv3_rec_infer # [2] 指定区域(文档对象 )识别 - 方案: PaddleOCR 中, 版面分析模型(PPStructure) A --> 文本识别模型B --> 识别结果 # A.版面分析模型(LayoutAnalysis) : 识别并拆分"图片"中的所有文档对象, Ex: 标题, 文本, 表格, figure图像, 页眉, 页脚等 1.图片修正模型: text_image_orientation_infer(未启用) 2.版面分析模型: picodet_lcnet_x1_0_fgd_layout_cdla_infer (当前较优, 拆分文本对象详细, 效率较低) 3.表格识别模型: ch_ppstructure_mobile_v2.0_SLANet_infer (官方推荐, Tip: 表格识别模型准确率: 普遍偏低,70%-85%) 4.Tips: 引入其它对象模型(Ex: Figure图像 - 图像识别) # B.文本识别模型(OcrTextRecEngine): 识别上述指定"区域"(文本对象)的文本信息(默认:中文PaddleOCR-V3 版本模型 - 目前最优) 1.语言检测模型: ch_PP-OCRv3_det_infer (准确度: 95% +) 2.方向分类模型: ch_ppocr_mobile_v2.0_cls_infer 3.文本推断模型: ch_PP-OCRv3_rec_infer 四. 问题记录, 后续改进 Q1. 文本识别错误问题 1. 部分文字识别错误问题(Ex: 蔡 --> 募/禁) 原因分析: 字体近似时, 使用(轻量级mobile)的中文文本识别模型(准确率: 95%+) 文字识别错误. 优化方案: 更换准确率更高的文本识别模型 2. 特殊符号, 无法正常识别 or 识别错误. (Ex: 中文 "-"连字符, 或 "." 等) 优化方案: Todo 3. 某些 "符号" 与 "文字" 相近 (外形相似), 被识别为文字. 优化方案: 更换准确率更高的文本识别模型 4. 文章段落某行的 "识别文本框" 拆分错误, 被意外分为多行. 优化方案: Todo - 根据拆分文本框的 bbox 信息, 合并同行文本框 Q2. 表格文本识别问题(准确率较低-问题) 1. 基础/正常表格 -- 能够正常识别(Ex: 常用的 "Excel 表格" 图片识别) 2. 特殊表格: 2.1 表格中, 某一列中的单元格中拆分为出多个子列, 造成问题: 识别 "文本" 所在列的位置错误. 2.2 表格中, 某一列中的单元格中包含 "图像+文字",造成问题: 表格模型无法正常识别. 2.3 表格中, 某一行中的包含过多内容(行间距过大),造成问题: 识别为多个表格, 或表格部分缺失. 2.4 若表格 "左侧/右侧" 附近文本, 距离表格过近,造成问题: 附近文本被意外识别到表格中. 优化方案: 更换 "版面分析模型" + "表格推断模型"(准确度: 70% - 85%) Q3. OCR - API 性能问题 # 问题记录: API 耗时原因集中, 如下所示: 1. 单张图片识别"全部对象"文本时, 若"文本内容"过多时, 耗时较长: 1.0 - 20.0 s 2. 单张图片识别"指定表格"文本时, 若"表格内容"特殊时, 耗时较长: 3.0 - 25.0 s 3. PDF文件识别(当PDF文件页码较多时, 同步执行方案), 耗时非常长. 4. 主要原因: 模型执行耗时较长, 占用85% - 90% 时间 5. 注意排查: Ocr/Layout模型是否多次实例化问题(src/api/v2.py) 6. 存在问题: Docker 容器偶尔意外重启问题(短时间内多次调用API) # 建议说明: 1.若 PDF 文件识别任务, 用户对时间无特殊要求, 任务同步执行(在 5 mins 内)结束, 将结果存入数据库, post 更新任务状态即可. 2.若 PDF 文件识别任务, 用户对时间有严格要求, 参考如下优化方案: 优化方案: Todo, 推荐方案A; 备用方案B(存在风险, 导致容器内部进程死亡, nacos 注册服务失败) 异步方案A: 将PDF文本识别任务, 拆分多个图片识别任务; 通过 flask_celery 异步请求识别图片API(需要启用多个容器服务). 异步方案B: Docker容器内部: 异步方案(借助 Python async 异步执行模型识别代码, 本质:使用 Cpu / Memory 资源) 方案C: 方案A + 方案B 五. 调查研究 - 汇总 [1] PDF 扫描件(图片): 识别文档中的文本信息 # 样例文件: 湖南星途航空航天器制造有限公司技术改造三坐标测量机采购项目.pdf # 识别结果: 成功 # 方案思路: 拆分为多张png图片, 使用 AI-PaddleOCR 进行识别图片(全文档对象识别模式) [2] PDF 扫描件(图片): 识别文档中的表格文本信息 # 样例A --------------------------------------------------------------------------------------------------------- # 样例文件A: ZEISS_PRISMO_Broschuere_CN_20230619.pdf # 表格状态: 基本正常(特殊情况: 左侧文距离表格较近) # 识别结果: 成功 # 方案思路: 拆分多张png图片, 使用 "版面分析模型" 识别出 "表格"-文档对象, 然后使用PaddleOCR 文本引擎进行识别 # 问题说明: 左侧文本被错误识别进入表格内容(版面分析模型, 识别区域出错) # 样例B --------------------------------------------------------------------------------------------------------- # 样例文件B: Calypso_18_barcode.pdf # 表格状态: 基本正常(特殊情况: 行分割线距离过远) # 识别结果: 成功 # 方案思路: 拆分多张png图片, 使用 "版面分析模型" 识别出 "表格"-文档对象, 然后使用PaddleOCR 文本引擎进行识别 # 问题说明: 行分割线距离过远(某单元格内容过多), 导致某一表格被分为多个表格(部分表格文本缺失) # 样例C --------------------------------------------------------------------------------------------------------- # 样例文件C: ZEISS_CONTURA_CN_60_022_0020X_中文版_20230601.pdf # 表格状态: 基本正常(特殊情况: 单元格中存在 "图像+文字"情况) # 识别结果: 失败 # 方案思路: 拆分多张png图片, 使用 "版面分析模型" 识别出 "表格"-文档对象, 然后使用PaddleOCR 文本引擎进行识别 # 问题说明: 版面分析模型将其归类为"Figure图像"区域(不包括文本信息, 无法调用表格模型识别) # 临时方案: 暂时可采用 "全文档(对象)识别模式" 识别出PDF中的所有文本信息, 后续研究. # -------------------------------------------------------------------------------------------------------------- 六.注意事项 1. PaddleOCR 源码参考 , 网址A: https://gitee.com/paddlepaddle/PaddleOCR (Release - 2.6) # 版面分析模型: 参考 /PaddleOCR/ppstructure/ 文档说明, 参考源码使用 # 文本识别模型: 参考 /PaddleOCR/paddleocr.py 以及文档说明 # 具体模型信息: 请阅读各自 "README.md 参考文档" 网址B: https://gitee.com/paddlepaddle/PaddleClas # 图片文本方向校正模型 # 参考阅读README.md 文档 2. 代码分支: Dev (最新, 注意 - 各版本的 Tag 说明) 3. Docker容器内部注册Nacos方案(当前): nohup后台启动Nacos注册/检测服务, 然后启动 OCR-Flask 识图服务 4. Nacos 注册环境: DEV 5. Grafana 日志服务: https://leads.dev.zeiss.com.cn/grafana/explore? 参数: {app="zdp-eva-ocr-service"} 6. 未解决问题: a. 使用Postman 上传PDF文件, 网关服务报错(code: 50000, msg: service is busy) - 卜凡涛/马晓宇 沟通解决 b. 前端未开发.