用户直接把微信聊天截图发上来做文字提取,同一条对话在原截图里能识别,转发一次后文件只剩 40KB、尺寸 540×960,识别结果错字超过一半。

原因不止一个,得分开看。有损压缩在高对比文字边缘产生块状伪影;聊天界面按屏幕宽度显示,转发后字高只有十来个像素;气泡半透明底纹降低了文字对比度;上传前前端 canvas 又压了一次,损失叠加。

先看分辨率和体积是否被压过

magick identify -format "%wx%h %b\n" chat.jpg

灰度加对比后再送识别

magick chat.jpg -colorspace Gray -level 20%,90% up.jpg

前端关掉二次压缩

python -c "print({'quality':1.0,'max_side':0})"

必要时放大两倍再识别

magick up.jpg -resize 200% up2.jpg

隔了一天再看,现象没变,说明不是偶发。

恢复的判定其实很直接。同一段对话的字符错误率降到 5% 以下,识别出的消息条数与截图里可见条数一致。

这里还有个坑。前端上传前的二次压缩常常比微信那次更致命,先在浏览器网络面板确认请求体里 base64 的长度再谈模型调参。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189