客户端
游戏
无障碍

0

评论

收藏

分享

手机看

微信扫一扫,随时随地看

熬夜上线!poocr库火速修复PDF发票识别致命BUG

一、poocr库:你的发票识别瑞士军刀

上周刚给poocr库装上"多页PDF识别功能",以为自己在发票识别领域封神了。

poocr这货本质上是个OCR瑞士军刀,能对接腾讯云、百度、阿里等大厂的OCR接口,把各种发票、文档识别得明明白白。安装命令简单粗暴:

pip install poocr

用法更是傻瓜式:

# 一行代码,实现发票的批量识别
poocr.ocr2excel.VatInvoiceOCR2Excel(
    intput_path=r'C:\Users\Lenovo\Desktop\temp\增值税发票-test.pdf',
    output_excel='./晚枫.xlsx',
    configPath='./poocr-config.toml'
)

项目开源地址在这,欢迎来薅羊毛:https://github.com/CoderWanFeng/poocr

结果,昨晚用户@agone的报错消息像一桶冰水浇灭了所有美梦。

那感觉就像刚给服务器喂了份"稳定运行"的保证书,转头它就给你表演火山喷发。

图片


二、第一颗雷:Base64编码的"类型幻觉"

新上的PDF识别功能本该是降维打击——pymupdf切页,opencv校正,pandas结构化输出,三层防护像给数据穿了防弹衣。直到@agone发来的日志显示:pdf.convert_to_pdf()这行代码正在疯狂抛出TypeError

犯罪现场

# 原罪代码
pdf_bytes = pdf.convert_to_pdf(page_num, page_num + 1)
base64_encoded_pdf = base64.b64encode(pdf_bytes).decode('utf-8')

pymupdf的对象居然不能直接喂给base64编码器!就像试图把3D模型塞进二维打印机,错误代码在深夜的服务器日志里跳起了迪斯科。修复方案是用fitz的select()方法重新包装PDF,相当于给数据加了个"次元转换器":

import fitz  # pymupdf的别名
temp_pdf = fitz.open()
temp_pdf.select([page_num])  # 只选中需要的页面
base64_encoded_pdf = base64.b64encode(temp_pdf.write()).decode('utf-8')

修复后,PDF终于像驯服的小龙,老老实实变成了Base64字符串。

三、第二颗雷:浅拷贝的"数据克隆术"

更离谱的是第二颗雷——列表追加操作炸出了数据重复的核弹坑。用户发来的截图显示:同一页发票数据在结果里出现了三次,像被卡带复读的鬼魂。

犯罪现场

res_df.append(dict_pandas)  # 看似无害的追加操作

追踪到内存地址才发现,浅拷贝让所有字典指向同一个对象!每次更新都在改写所有记录,就像用同一块橡皮泥捏了三个"不同"的玩偶。深拷贝修复像给数据加了分身术:

import copy
res_df.append(copy.deepcopy(dict_pandas))

现在数据流终于像听话的火车按轨道进站,每页发票都有了自己独立的小隔间。

四、感谢@agone:没有你,我们还在跟幽灵数据跳舞

特别感谢@agone的深夜反馈!没有你的报错,我们可能还在跟幽灵数据跳舞。现在poocr v1.0.2版本已经带着加强版的PDF防火墙上线,更新命令如下:

pip install poocr==1.0.2 potx-cloud==0.0.7

新增了对象类型检查和深拷贝监控,连注释都加了警示灯:

# !!!!警告!!!! 必须深拷贝,否则数据会像被施了克隆魔法

五、互动时间:来分享你的踩坑故事!

评论区举手🙋‍♂️:

  1. 你踩过最深的浅拷贝坑长什么样?
  2. 有没有被base64编码折磨到怀疑人生的瞬间?
  3. 分享你深夜修Bug时的续命神器(我的是冰美式+辣条)

修复Bug就像给程序做外科手术,刀刃永远比创可贴靠谱。

记得给poocr库点个Star⭐,毕竟稳定运行的代码比梦境更美好~ 😴💤

免责声明:本内容来自腾讯平台创作者,不代表腾讯新闻或腾讯网的观点和立场。
举报
评论 0文明上网理性发言,请遵守《新闻评论服务协议》
请先登录后发表评论~
查看全部0条评论
首页
刷新
反馈
顶部