关于iOS原生条形码扫描问题,以及条形码和二维码的区别

作者 : 开心源码 本文共2048个字,预计阅读时间需要6分钟 发布时间: 2022-05-11 共76人阅读

本文记录的问题是:

????当AVFoundation用多译码器扫描的时候。不论有没有设置扫描区域(setRectOfInterest:),二维码能在扫描区域的任意位置响应扫描成功,但是条形码却不行,只可以在扫码区域的中间位置响应。

如图:四个绿色脚框起来的矩形为设置的扫描区域;

图一:条形码在扫描区域的中间,扫描成功。

图二:条形码在扫描区域的上方,扫描失败。

测试部提出的bug是,为什么微信的这两种都能扫描成功,而我们的不能。

开始怀疑是我自定义扫描区域的时候没有设置好,所以先不调使用setRectOfInterest设置扫描区域,用默认的扫描与去,这样一试,结果还是一样的。后来看到官网文档,才知道原来就是这样的。详细如下:

按照ISO标准解碼,实际上是,按照1:1:3:1:1去寻觅那三个寻像图形,就是标志性的大方块。而后圈出二维码大小再去解碼的。也就是说,再没设定边界的情况下全屏都能。

而条形码完全不同,他是在Detect Center那个点,画一个无限延伸的米字型,而后去判断每一条在线可以否解析出条形码所需要的0101010序列。而iOS默认的Center是 Layer 的 Center。所以条形码扫描仪上往往会有一条红线,这并不是为了拟物化,而是告诉使用户肯定要使用这条线对准条形码,否则会有扫不上的可可以性

查阅官方文档Technical Note TN2325解释请点击


查看这个问题的时候,还发现几个有趣的知识点:

1.AVCaptureMetadataOutput不能一次返回多个条形码数据,但是能一次返回多个二维码,但是最多四个。AVCaptureMetadataOutput的打印如下:

条形码,最多返回一条数据,返回?center-most decodable barcode in the?rectOfInterest

二维码码,能返回多条数据,但最多四条数据the center-most codes in the?rectOfInterest

2.有时候会遇到,当AVFoundation用多译码器扫描的时候。二维码是秒杀,但是条形码却经常扫不上。假如去掉二维码的话,条形码扫描又秒杀的问题。

能回头查看上面table1,假如是二维码和条形码一起,条形码扫描中心线就只有center。但是假如只有条形码,扫描中心线是center+additional。additional的存在的意义是使用更加优秀且略微耗时的算法去优化扫描精准度,也就是牺牲效率换准确度。


记录:

另外记录一下扫描区域的设置详解:

rectOfInterest官方定义:

The value of this property is a CGRect that determines the receiver’s rectangle of interest for each frame of video. The rectangle’s origin is top left and is relative to the coordinate space of the device providing the metadata. Specifying a rectOfInterest may improve detection performance for certain types of metadata. The default value of this property is the value CGRectMake(0, 0, 1, 1). Metadata objects whose bounds do not intersect with the rectOfInterest will not be returned.

大致意思是设置每一帧画面感兴趣的区域 ? ? 也就是扫描范围的设置 ?默认为左上角 ?(0,0,1,1)这是默认值 ?全屏的 最大为1

经实践发现 ?(0,0,,1,1)这个写法有点坑 ? 实际为(y,x,h,w) ?即坐标y,x ?尺寸高,宽(h,w)

下面代码是我设置的扫描区域

size是我的扫描区域 ?也就是那个扫描框框 ?再进行?rectOfInterest ? 那么可以够进行识别 码 的区域也局限于框框内部 ??

CGSize size = self.view.bounds.size;

CGRect cropRect = CGRectMake(SCREEN_WIDTH/2-110,100,220,220);//扫描框

output.rectOfInterest =? CGRectMake(cropRect.origin.y/SCREEN_HEIGHT,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cropRect.origin.x/size.width,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cropRect.size.height/size.height,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cropRect.size.width/size.width);


备注:

苹果开发,遇到问题时候,不光要记得看苹果的 guide 和 reference,还能看看看以下 sample code,tech note, FAQ。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 关于iOS原生条形码扫描问题,以及条形码和二维码的区别

发表回复