本人在開發系統相機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掃描二維碼的時候,若是程序中不指定只支持掃描二維碼的狀況下,是有可能識別成條形碼的。可是對於系統相機這種通用的掃描功能,既要掃面二維碼,又要掃描條形碼的,那就沒有很好的解決方案了。
基於上面的討論,找到了一些解決方案:
使用Zbar替代Zxing,可是從掃描效率、內存佔用、識別率上面來看,Zxing在二維碼掃描效果比較好,Zbar則是條形碼掃描效果好。相關的文章有:《二維碼掃描之zxing與zbar的優劣》http://blog.csdn.net/l_215851356/article/details/51898514
二者結合使用:《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,我拉你進羣交(♂)流(♀)。