CIDetector无法识别相册中的二维码

       今天在做一个从本地相册中识别二维码的功能,在搜索后决定采用CIDetector这个原生的功能实现。具体代码在此不表了,网上一搜一大堆。都是可用的。

       在这篇文章重要说的是:CIDetector无法识别iPhone相机拍摄的二维码图片的问题。

      我的手机是iPhone6默认情况下使用相机拍摄的图片尺寸为:2448x3264在选择图片后通过CIDetector来识别的时候返回结果总是0,这让我感觉很奇怪。改变一下参数,做一个人脸识别,结果正确。这说明我调用的没有问题。又使用被我放弃很久的ZXingObjC来识别,还是失败。这说明恐怕和现有代码没有关系了。继续搜索,偶然间看到一位网友在v2ex上的回答

iluhcm  260 天前

zxing 之所以不好用是需要做优化的。

图片大小不能完全按照原始的尺寸来,我测试过,把图片缩小成 256 像素左右识别率比较高。目前不清楚是什么原理。

还有二维码的图像识别算法, GlobalHistogramBinarizer 和 HybridBinarizer 分别适用不同的场景,图片识别的话要看图片属于什么类型的,黑白的肯定是前者识别更有效,带有渐变的或者有阴影的则采用后一个算法。

总之二维码识别有许多层级的优化,目前正在研究中。

他提到,把图片缩小到256像素识别率较高,这就是真正的解决办法。

于是按照他的办法,缩小后,CIDetector、ZXingObjC测试全部通过。

测试发现CIDetector比ZXingObjC慢5倍多,耗时超过200毫秒。

你可能感兴趣的:(CIDetector无法识别相册中的二维码)