FEATURED · 精选文章

从扫描件里批量提取日期:PaddleOCR 实战与 5 个常见坑

发布时间 / 2026/8/29 22:22:56
来源 / 创域科博编辑部
栏目 / 资讯中心
从扫描件里批量提取日期:PaddleOCR 实战与 5 个常见坑 从扫描件里批量提取日期PaddleOCR 实战与 5 个常见坑【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR周五下班前运营甩来 200 多张发票扫描件让你逐张核对开票日期和有效期填进一张 Excel。肉眼一张张看两小时起步还容易把 11 月看成 12 月。这类活儿的思路其实固定先把图片里的文字读出来再按格式把时间信息捞出来。PaddleOCR 负责前一半——把扫描件里的每段文字连同坐标、置信度一起给你后一半你自己写十几行正则就行。一、能力速览能做什么边界在哪PaddleOCR 是一个把图片、PDF 转成结构化文字的 OCR 工具包。先说清楚它能干什么、干不了什么避免带着错误预期往下读功能说明边界文本检测 识别输出每行文字、坐标、置信度默认用 PP-OCRv6 模型只出文字流不做字段归类多语言识别lang参数覆盖中英文日韩等 100 多种语言各语言可选的模型代次不同文档预处理页面旋转、扭曲矫正、文本行方向分类三个开关控制对严重模糊、手写体效果有限文档转 MarkdownPDF、Office 文档直接转成 Markdown复杂排版仍需人工校对一句话它给你带坐标的文字流哪些文字是日期、哪些是单号得靠你自己定义。二、最小配置跑通第一个例子装完依赖后用默认配置跑一张图目标是看到每行文字和置信度。# 推理引擎和主包装一次即可 python -m pip install paddlepaddle python -m pip install paddleocr[all]如果你是从源码拿的这份代码地址是 https://gitcode.com/GitHub_Trending/pa/PaddleOCR clone 下来pip install -e .也行。依赖细节见 docs/quick_start.md。下面这段只关预处理、跑识别是最快的姿势from paddleocr import PaddleOCR ocr PaddleOCR( use_doc_orientation_classifyFalse, use_doc_unwarpingFalse, use_textline_orientationFalse, ) result ocr.predict(xxx_invoice.png) for res in result: texts, scores res[rec_texts], res[rec_scores] for text, score in zip(texts, scores): print(text, round(score, 3))输出的大致样子开票日期 0.987 2024年11月01日 0.972 发票号码 0.991拿到文字 分数列表第一关就算过了。三、核心功能深潜3.1 预处理三开关歪的扫描件先掰正扫描件旋转 180° 或页面发皱时直接送检测会漏字、断行。PaddleOCR 提供三个预处理开关ocr PaddleOCR( use_doc_orientation_classifyTrue, # 整页旋转分类0/90/180/270 use_doc_unwarpingTrue, # 页面扭曲矫正 use_textline_orientationTrue, # 文本行方向分类 )代价是多跑三个模型速度降一些。批量处理时建议只开use_textline_orientation这是日常漏字最常见的原因前两个留给明显歪斜的扫描件。3.2 从文字流里捞出日期OCR 不认识日期它只认文字日期是格式问题交给正则。import re DATE_PATTERNS [ r\d{4}[年./-]\d{1,2}[月./-]\d{1,2}[日]?, # 2024年11月1日 r\d{1,2}[月./-]\d{1,2}[日]?\s*\d{4}年?, # 11月01日2024 ] def pick_dates(res): dates [] for text in res[rec_texts]: for p in DATE_PATTERNS: dates.extend(re.findall(p, text)) return dates跑 3.1 那张图结果就是[2024年11月01日, 2024年12月05日]。想区分开票日期还是有效期别只靠行内匹配——结果里的rec_polys存着每行坐标把日期行和开票日期标签行的位置放在一起比对误抓率会低很多。3.3 用置信度过滤低质量识别rec_scores和rec_texts一一对应分数低的行往往是模糊或残缺的。设个门槛再入库比事后返工省事for text, score in zip(res[rec_texts], res[rec_scores]): if score 0.8: print(f存疑: {text} ({score:.3f})) # 单独复核 else: print(text)调text_rec_score_thresh可以在模型层面直接过滤但更常见的做法是像上面这样把低分行单独列出来人工看一眼——日期字段错了比缺了更麻烦。四、踩坑与排查现象原因解法旋转的扫描件整行漏字、断句文本行是倒的识别模型按正向读开use_textline_orientationTrue某行文字识别成乱码语言模型不对默认按中文模型跑传langen或 japan、korean 等显式指定小字号日期没被检测到检测阈值把弱文本像素滤掉了调低text_det_thresh默认 0.3试试首次运行特别慢之后正常模型首次自动下载到本地缓存不用管内网环境可预先下载再传模型目录老教程代码ocr.ocr(img)报错3.x 接口变更方法改名了改用ocr.predict(img)参数前缀从use_angle_cls换成use_textline_orientation五、进阶方向PDF 直接转 Markdown 再提取批量场景里逐张转图片再 OCR 是最慢的路径。PaddleOCR 自带doc2md_convert可以把 PDF、Word 这类文档直接转成 Markdown 文本from paddleocr import doc2md_convert res doc2md_convert(xxx_contract.pdf) text res[0][markdown] dates pick_dates_from_markdown(text) # 复用上文的正则转出来的 Markdown 保留了段落结构开票日期2024年11月01日这种成对信息在同一行出现正则提取的准确率比从散落的文字行里捞高不少。六、写在最后PaddleOCR 给到的是带坐标和置信度的文字流哪些是日期、哪些是单号的定义权始终在你手里——这个边界想清楚后面接表格、接大模型都顺。下一步值得试的是把低置信度那一小撮行单独导出用人工校正的样本回头检查到底是拍摄质量还是语言配置的问题。【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻