手机横着拍的营业执照,识别接口返回的 text 是空字符串,同一张图在相册里转正后再传就能出结果,重试五次都一样。日志里能对上时间点,这种反而好排。
接口按图片原始像素方向做文本检测,EXIF 里的 Orientation 被忽略,横过来的文字行在检测器看来是竖排,找不到文本行就返回空。不少读图库默认不应用 EXIF 旋转。这一点先确认清楚,后面就不用反复试。
from PIL import Image, ImageOps
im = Image.open('license.jpg')
im = ImageOps.exif_transpose(im)
im.save('license_fixed.jpg', quality=90)
围绕「识别图片旋转校正」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
处理上按这个顺序:上传前按 Orientation 转正再编码;服务端用 exif_transpose 兜底;空结果时对四个 90 度方向各试一次取置信度最高;把空结果当失败 不要当识别成功。
结果对不对很好判断,横拍和竖拍的营业执照都能出文字 空结果不再进成功分支。
