我在iOS 16上使用VNDetectBarcodesRequest
时遇到问题。我的代码在iOS 15上按预期工作,但在iOS 16上未在图像中找到任何条形码。
我把代码放到了一个操场上,现在遇到了同样的问题,在Xcode 13.4.1的操场上运行下面的代码,得到了如下结果:
“谷歌链接:可选(“https://www.google.com“)
在Xcode 14上运行相同的代码,我得到了nil
的结果。在iOS15模拟器中用Xcode 14运行这个给出了积极的结果,只是在iOS16和操场上它不是在阅读QR码。
要添加到它,也不会抛出异常。
有没有人经历过同样的事情并设法解决了这个问题?
这是我的游戏规则:
import UIKit
import Vision
extension UIImage {
func qrCodeLink(completion: @escaping (String?) -> Void) {
guard let ciImage = CIImage(image: self) else {
completion(nil)
return
}
let imageRequestHandler = VNImageRequestHandler(ciImage: ciImage,
orientation: .up,
options: [:])
let request = VNDetectBarcodesRequest { (request,error) in
guard error == nil else {
completion(nil)
return
}
guard let observations = request.results as? [VNDetectedObjectObservation] else {
completion(nil)
return
}
let result = (observations.first as? VNBarcodeObservation)?.payloadStringValue
completion(result)
}
try? imageRequestHandler.perform([request])
}
}
if let google = UIImage(named: "google") {
google.qrCodeLink { link in
debugPrint("Google link: \(link)")
}
} else {
debugPrint("No google image")
}
在上面的代码中,我使用了这个图像,它只是一个到https://www.google.com
的链接:
3条答案
按热度按时间yqkkidmi1#
我想我已经找到问题了。当在Xcode 14和iOS 16上运行请求时,请求版本在
VNDetectBarcodesRequestRevision3
上运行(VNDetectBarcodesRequest页面上还没有记录)。但是,使用VNDetectBarcodesRequestRevision1
或VNDetectBarcodesRequestRevision2
可以工作。在执行任务对我起作用之前添加了以下内容:
a14dhokn2#
在详细阐述@Paul Peelen的解决方案时,为了确保仅在需要时使用变通方案(Xcode 14 + iOS 16 +模拟器),我们使用了:
zvms9eto3#
在为iOS 15或16编译时,我发现扫描带边框的条形码和不带边框的条形码时,VNDetectedBarcodesRequest的行为有所不同。该边框似乎会触发扫描代码何时开始。
带边框:它正确地扫描黑背景图像和白背景图像。
无边界:它可以正确扫描显示器上黑色背景的条形码图像,但当图像打印在白色上并扫描时,它会失败。无边框=无条形码。
新问题:当扫描该单个边界条形码时,返回了一个由17个相同条形码观察结果组成的阵列。