为什么二维码识别不了:画面模糊、角度偏差、权限受限是主要诱因
日常扫码的时候,总遇到过手机对着二维码半天没反应的情况,很多人胡乱挪动手机、反复刷新页面,依旧解决不了为什么二维码识别不了的问题,我前阵子连续踩了好几个坑,折腾了大半天,才摸清所有真实的故障原因,全是实打实自己试出来的问题,没有半点空话。
上周去超市付款,赶时间结账,举着手机对着付款码扫了足足十几秒,扫码框一直停在识别中,完全没有跳转反应。一开始以为是网络卡顿,关掉流量重新打开,甚至重启了支付软件,结果还是一模一样的状况。身后排队的人越来越多,心里越发急躁,不停拉近、拉远手机距离,手指还反复擦拭屏幕,完全没用。
后来才反应过来,根本不是网络的问题。超市的付款二维码贴在玻璃内侧,长期被灯光直射,表面覆盖了一层薄薄的反光光晕,手机摄像头捕捉到的画面一片泛白,系统根本抓取不到二维码的黑白像素纹路。很多人都忽略这点,总觉得码清晰就能扫,其实强光反光会直接覆盖二维码的关键纹路,让识别系统彻底失效。当时侧身挡住顶部的灯光,屏幕瞬间识别成功,全程不到一秒。
不止强光反光,角度偏差也是高频问题。前几天帮朋友扫名片上的二维码,手机一直正对着纸面垂直拍摄,试了好几次全部失败。原本以为是二维码打印模糊,凑近看纹路完整清晰,没有任何破损。折腾好久才搞明白,纸面微微弯曲,加上手机垂直拍摄,镜头畸变把方正的二维码压成了不规则图形,识别算法匹配不到标准图案。稍微倾斜手机,避开镜头畸变的角度,不用正对平面,立马就识别成功了。
很多小众的故障点,更是没人留意。之前保存了别人发的二维码图片,打算相册扫码识别,反复读取都提示识别失败。反复检查图片,没有模糊、没有裁剪缺失,分辨率也足够高。
其实问题出在图片本身的叠加图层上。那张二维码截图上面,叠加了聊天软件的文字水印,水印线条刚好穿插在二维码的空白纹路里,看似不影响肉眼观看,但是扫码系统的算法对像素完整性要求极高,一丁点多余的线条遮挡,就会直接判定图案无效,无法识别。当时重新保存了一张无水印的原图,一次性就扫码成功。
还有个最容易被忽视的基础问题,软件权限。之前换了新手机,打开各类扫码软件都识别不了二维码,以为是手机摄像头损坏,专门打开相机测试拍照、录像,画质和对焦都完全正常。
折腾半天才发现,新手机默认关闭了软件的相机权限。扫码功能看似调用摄像头取景,其实没有真正获取画面数据,屏幕上能看到扫码画面,只是软件的预览界面,系统根本没有在实时抓取图像进行识别。打开应用设置,开启相机权限之后,所有扫码功能瞬间恢复正常。
很多时候大家扫码失败,只会死磕二维码本身,从来不会排查手机设置、环境光线、拍摄角度这些外围因素。肉眼看到的清晰画面,和手机算法识别的画面完全不是一个标准,人的眼睛能自动修复模糊、畸变、遮挡的画面,但是扫码系统只会机械匹配标准像素图案,任何一点细微干扰,都会直接识别失效。
昨天出门扫码骑共享单车,阴天背光环境下,手机自动降低曝光,画面偏暗,二维码纹路对比度变低,又是连续识别失败。抬手挡住背光,让镜头光线均匀,不用调整距离,立马就识别通过。
放下手机的时候,屏幕还停留在刚刚的扫码页面,突然发现很多看似无解的扫码故障,从来都不是二维码本身的问题。