发票识别返回的 invoice_no 置信度只有 0.42,代码只判断字段是否存在,照样写进对账表,月末核出 312 条单号对不上。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
resp = client.recognize(img)
for f in resp['fields']:
if f['score'] < 0.8:
review_queue.put(f['name'])
SDK 把每个字段的置信度放在单独的结构里,业务代码只取了 value,没看 score。低置信度的结果多半由遮挡或倾斜造成,单号错一位就是另一张票。这一点先确认清楚,后面就不用反复试。
「OCR 置信度阈值过滤」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
具体做法是,关键字段置信度低于 0.8 一律进人工队列;金额和税号单独设更高的阈值;落库保留 score 便于回溯;按周统计各字段分布 用真实数据定阈值。
改完照着核一遍,对账时错单降到个位数 低置信度字段都能在人工队列里找到。
