二维码扫描遇到的坑

问题描述

本人在开发系统相机APP,今天在处理联系人二维码扫描的时候,由于联系人二维码过于复杂,有时候会扫描成为商品或者文本,结果是一串序列号。如果是你的联系方式被扫面成商品,是不是心里一万只草泥马在奔腾呢!!!

这个问题困扰了我两天,最终发现还是Zxing的问题导致的。

寻求解决方法

在网上只找到一篇关于这个问题的:

http://bbs.youkuaiyun.com/topics/392021578?page=1#

但是最终还是没有找到很好的解决办法。

问题原因

经过一系列分析与咨询,该问题出现的原因是,扫描的图像帧里面,局部区域特征符合了条形码,因此被识别算法识别为条形码,但该条形码是没有实际意义的,因此通过联网查询时,并不能查询到该条形码对应的商品,所以出现了bug中所描述的现象;相机AP使用的Google的zxing识别库,属于算法缺陷,因此无法解决。

向官方求助

就此问题我向Zxing官方提了一个issue:

https://github.com/zxing/zxing/issues/882

作者srowen十分友好,回复也很快,这里衷心感激。一开始由于我直接百度翻译的原因,导致他看不懂我说的啥,后来我请公司的海外翻译的妹子帮忙翻译了一下,然后作者很快就给了我相应的回复:

If you mean it is a false positive, yes it is possible. You should restrict the scan to only QR codes

也就是说,我们在使用Zxing扫描二维码的时候,如果程序中不指定只支持扫描二维码的情况下,是有可能识别成条形码的。但是对于系统相机这种通用的扫描功能,既要扫面二维码,又要扫描条形码的,那就没有很好的解决方案了。

解决方法

基于上面的讨论,找到了一些解决方案:

  1. 使用Zbar替代Zxing,但是从扫描效率、内存占用、识别率上面来看,Zxing在二维码扫描效果比较好,Zbar则是条形码扫描效果好。相关的文章有:《二维码扫描之zxing与zbar的优劣》http://blog.youkuaiyun.com/l_215851356/article/details/51898514

  2. 两者结合使用:《QrCodeScanner扫码工具(融合Zxing和Zbar库,扫码效率奇高)》http://www.jianshu.com/p/4d70b286f42f

以上两种解决方案笔者暂时还没有尝试过,目测方案二比较好,但是带来的是需要使用NDK、类增加导致臃肿的问题。在这个二维码横行的年代,还是推荐使用Zxing,比较Zxing本来就是面向Android开发者开发的(而Zbar就需要通过NDK来使用了,貌似IOS上是用Zbar的)。不过条形码的话,在商品领域用得也比较多。微信也是都支持二维码和条形码的扫描,解压了微信的APK,没发现Zbar的so库,估计也是Zxing做的,但是貌似扫描了好多次都没有发现我这个问题,不知道怎么做到的。

文章推荐

关于Zing的介绍和使用,推荐大家看这个系列的文章:

《ZXing分析》http://www.jianshu.com/nb/10290510

如果觉得我的文字对你有所帮助的话,欢迎关注我的公众号:

我的群欢迎大家进来探讨各种技术与非技术的话题,有兴趣的朋友们加我私人微信huannan88,我拉你进群交(♂)流(♀)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值