二维码扫描遇到的坑

问题描述

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

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

寻求解决方法

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

http://bbs.csdn.net/topics/392021578?page=1#微信

可是最终仍是没有找到很好的解决办法。工具

问题缘由

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

向官方求助

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

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

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

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

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

解决方法

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

  1. 使用Zbar替代Zxing,可是从扫描效率、内存占用、识别率上面来看,Zxing在二维码扫描效果比较好,Zbar则是条形码扫描效果好。相关的文章有:《二维码扫描之zxing与zbar的优劣》http://blog.csdn.net/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

若是以为个人文字对你有所帮助的话,欢迎关注个人公众号:

公众号:Android开发进阶

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

相关文章
相关标签/搜索