iOS--AVFoundation原生二维码与一维码扫描

18th,March,2016

(题外话: 其实现在是拒绝写博客的,因为不想写,但是还是写吧)

概述

实现二维码和条形码扫描,两大开源组件ZBar与ZXing
ZBar: 扫描灵敏性,内存较优,但“圆角二维码”扫描比较困难。
ZXing: Google Code上的一个开源的条形码扫描库,是用java设计
而苹果原生的AVFoundation 扫描灵敏性和内存上最优,不过不兼容iOS6及之前的版本。


支持一维码扫描

一开始可以扫描二维码,但不支持一维码。

1). 添加metadataObjectTypes:AVMetadataObjectTypeEAN13Code,AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code,AVMetadataObjectTypeCode39Code

但是还是不支持扫描一维码。

然后看了关于iOS原生条形码扫描,你需要注意的两三事  此文中提到“是在Detect Center那个点,画一个无限延伸的米字型,然后去判断每一条在线能否解析出条形码所需要的0101010序列。而iOS默认的Center是 Layer 的 Center。提示给用户的那个框,已经远离了Center。所以我们竖着扫描的时候,那条水平的扫描线是没有贯穿条形码的,所以扫不上他。于是乎要根据设备,iPhone4 iPhone5 通过AVCaptureDeviceFormat和AVCaptureSessionPreset 重新设置一下AVCaptureMetadataOutput rectOfInterest,结果问题就解决了。

但是,其实并没有很懂, 怎么通过AVCaptureDeviceFormat和AVCaptureSessionPreset重新设置AVCaptureMetadataOutput 的rectOfInterest也不明确。上网找了关于AVCaptureDeviceFormat和AVCaptureSessionPreset的相关信息,但是还是不知道怎么通过这两个去设置rectOfInterest。而该文作者信息判断来自于苹果的FAQ: Technical Note TN2325 

我去看了,FAQ中提到“the set of scan lines is expanded to cover a larger portion of the region of interest ("Additional")”, 在少数一些情况下扫描线会扩大到原始扫描区域之外,关于"Additional"的概念也不懂

所以我就上网找啊找 怎么使用AVCaptureDeviceFormat和AVCaptureSessionPreset去设置rectOfInterest

。。。。然后就是没有找到。

最后自己按照rectOfInterest的设置规则设置,然后可以扫描了。  大哭 

19th,March,2016

1. 设置识别区域RectOfInterest

识别区域默认是照相机捕获的整张照片,可通过RectOfInterest配置识别区域提升扫描性能和速度,

Tip: CGRectMak(y, x, height, width) 值为0-1.0f,eg: 扫描区域.y/屏幕高度。 网上资料:AVCapture捕捉的图片是横着的,而手机是竖着的,所以需要旋转90度。

"iOS上内置相机应用录制的mov/mp4视频可能产生一个Rotation元数据,表示录制视频时摄像头旋转到了多少角度。其值一般为这四个:0、90、180或270。

竖屏时rotation值为90.

横批,Home键在右侧时,Rotation=0."-- from  [iOS]关于视频方向的若干问题


2. 识别小图SessionPreset属性

该属性可预设图像分辨率, 决定照片中每一帧图像质量的大小:

AVCaptureSessionPresetPhoto/High/Medium/Low

AVCaptureSessionPreset320x240/352x288/640x480/960x540/1280x720/1920x1080/3840x2160

想要识别小图则需要讲该属性设高一点,但相应的效率会比Low的低。

AVCaptureSessionPresetHight ==> iPhone5

一维码与二维码

一维码:条码的宽度储存数据,有一组规则排序的条和空以及对应的字符组成,

          “条”(即使黑色的部分)光线反射率较低

     “空” (即白色的部分)光线发射率较高

而这些“条”和“空”组成的数据可以转换成二进制和十进制的信息。

二维码:90年代发明了二维码,主要分为两种,一是堆叠式/行排式二维条码。另一种就是现在普遍使用的矩阵式二维码(Quick Response Code)拥有一维码的优点同时,容错性高,储存数据量大。



未完待续。。。敬请期待。。。如有想法。。。欢迎交流

参考资料:

iOS二维码扫描,你需要注意的两件事

iOS:原生二维码扫描 // 强资料

IOS7使用原生API进行二维码和条形码的扫描

二维码的生成细节和原理

一维码和二位码主要原理

二维码的生成细节和原理

[iOS]关于视频方向的若干问题
主题 : AVCaptureVideoPreviewLayer如何设置正确设置大小  





你可能感兴趣的:(iOS--AVFoundation原生二维码与一维码扫描)