? ? ? ?今天在做一個從本地相冊中識別二維碼的功能,在搜索后決定采用CIDetector這個原生的功能實現(xiàn)。具體代碼在此不表了,網(wǎng)上一搜一大堆。都是可用的。
? ? ? ?在這篇文章重要說的是:CIDetector無法識別iPhone相機拍攝的二維碼圖片的問題。
? ? ? 我的手機是iPhone6默認情況下使用相機拍攝的圖片尺寸為:2448x3264在選擇圖片后通過CIDetector來識別的時候返回結(jié)果總是0,這讓我感覺很奇怪。改變一下參數(shù),做一個人臉識別,結(jié)果正確。這說明我調(diào)用的沒有問題。又使用被我放棄很久的ZXingObjC來識別,還是失敗。這說明恐怕和現(xiàn)有代碼沒有關系了。繼續(xù)搜索,偶然間看到一位網(wǎng)友在v2ex上的回答
iluhcm? 260 天前
zxing 之所以不好用是需要做優(yōu)化的。
圖片大小不能完全按照原始的尺寸來,我測試過,把圖片縮小成 256 像素左右識別率比較高。目前不清楚是什么原理。
還有二維碼的圖像識別算法, GlobalHistogramBinarizer 和 HybridBinarizer 分別適用不同的場景,圖片識別的話要看圖片屬于什么類型的,黑白的肯定是前者識別更有效,帶有漸變的或者有陰影的則采用后一個算法。
總之二維碼識別有許多層級的優(yōu)化,目前正在研究中。
他提到,把圖片縮小到256像素識別率較高,這就是真正的解決辦法。
于是按照他的辦法,縮小后,CIDetector、ZXingObjC測試全部通過。
測試發(fā)現(xiàn)CIDetector比ZXingObjC慢5倍多,耗時超過200毫秒。