为了把上传时间压到 1 秒,前端把 2MB 的合同图压到 30KB,识别出来甲方变甲万,条款里的数字全糊。乍看像缓存或者权限的锅,追下去往往不是。

from PIL import Image
im = Image.open('contract.jpg')
im.thumbnail((2000, 2000))
im.save('c.jpg', quality=80, optimize=True)

追下去是这么回事:JPEG 质量降到 30 以后,小字号笔画的高频信息先丢,字符边缘出现块状伪影。文字类图片对压缩比很敏感,和风景照不是一个尺度。

「识别前图片压缩」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。

监控和日志的时间要对上,时区不一致会多绕很大一圈。

具体做法是,文字图质量限制不低于 75;长边不超过 2000px 但不要缩到 1000 以下;需要小体积时改用无损 webp;上传前按文件类型区分压缩策略。

验收就看一点,压缩后的合同图识别能正确出甲方 关键数字和原文一致。

作者 9823189