ios二维码和条码扫描时候识别不准

在iOS应用中,同时设置支持二维码和条码扫描时,可能会遇到条码识别不准确的问题。原因是条形码扫描依赖于Detect Center进行米字型判断,而默认设置与SurfaceLayer的中心不符。解决方法是通过设置`rectOfInterest`来调整扫描区域,参考相关博客文章可以找到具体实现。若只需二维码扫描,推荐使用LBXScan库。
摘要由CSDN通过智能技术生成

1.问题:同时设置支持二维码和条码的时候,扫条码识别不准确。

如:    NSArray *arr = @[AVMetadataObjectTypeQRCode, AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];

为了正确解释这个有趣的问题,我们要解释一下条形码扫描原理。

上面有提过二维码是通过全局直方图二值化后,按照ISO标准解碼,实际上是,按照1:1:3:1:1去寻找那三个寻像图形,就是标志性的大方块。然后圈出二维码大小再去解碼的。也就是说,再没设定边界的情况下全屏都可以。

而条形码完全不同,他是在Detect Center那个点,画一个无限延伸的米字型,然后去判断每一条在线能否解析出条形码所需要的0101010序列。而iOS默认的Center是 Layer 的 Center。

我们再回过头来看工程中的 SurfaceLayer,其实他提示给用户的那个框,已经远离了Center。所以我们竖着扫描的时候,那条水平的扫描线是没有贯穿条形码的,所以扫不上他。

解决办法:设置原生 rectOfInterest扫描区域

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

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

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

//获取摄像设备
    AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMed
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值