swift - 视觉框架条形码检测感兴趣区域不起作用
问题描述
我正在尝试解码出现在感兴趣区域上的条形码,即屏幕宽度的 80% 和屏幕高度的 20%,并以两个方向为中心(蓝色矩形)。
相机像素缓冲区向右旋转。
这就是苹果对这个方向的看法:
原点 (0,0) 的 (x,y) 像素坐标分别表示顶行和最右列。像素 (x,y) 位置从上到下、从右到左增加。如果使用此方向对图像进行编码,然后由不知道方向元数据的软件显示,则图像似乎逆时针旋转 90°。(也就是说,要以预期的方向呈现图像,您必须将其顺时针旋转 90°。)
所以,当我定义我感兴趣的区域时,VNDetectBarcodesRequest
我会这样做:
lazy var barcodeRequest: VNDetectBarcodesRequest = {
let barcodeRequest = VNDetectBarcodesRequest {[weak self] request, error in
guard error == nil else {
print ("ERROR")
return
}
self?.classification(request)
}
barcodeRequest.regionOfInterest = CGRect(x: 0.1,
y: 0.4,
width: 0.9,
height: 0.6)
如果条码位于蓝色区域内以及高于该区域的任何位置,包括蓝色区域顶部区域的任何位置,它都会检测到。如果条形码位于蓝色区域下方,则它不会检测到任何东西。
解决方案
只要确保,如果你看regionOfInterest
,文档说:
矩形被标准化为处理后图像的尺寸。它的原点是相对于图像的左下角指定的。
所以原点(0,0)在左下角。使用您当前的 CGRect,
CGRect(x: 0.1,
y: 0.4,
width: 0.9,
height: 0.6)
您将得到预期的结果 - “如果条形码位于蓝色区域内并且在其上方的任何位置,包括蓝色区域顶部区域的任何位置,它将检测到。”
您需要做的就是将高度从 更改0.6
为0.2
。你会想要:
barcodeRequest.regionOfInterest = CGRect(x: 0.1,
y: 0.4,
width: 0.9,
height: 0.2) /// your height is wrong
推荐阅读
- java - 如何检查 Firebase 消息服务是否处于启动完成状态?
- vim - 如何在插入模式下使 coc.nvim 检查代码的语义?
- dart - Dart 类型“int”不是“double”类型的子类型
- xamarin.forms - MapsUI 始终在 LatLng 0,0 处显示“自己的位置”标记
- smalltalk - Smalltalk 指的是尚未定义的类
- powershell - 权限不足,无法完成操作 - PowerShell 创建 Azure 广告应用失败
- php - 如何在 Magento 1 中应用我的自定义目录价格规则条件?
- excel - 如何自动删除与 Excel 中特定值不匹配的行?
- python - python MySQL插入大数据
- javascript - 如何将数组映射到Angular 8中的新单个对象?