Pau*_*len 3 vision swift ios16 xcode14
我在 iOS 16 上遇到问题。VNDetectBarcodesRequest我的代码在 iOS 15 上按预期工作,但在 iOS 16 上它在图像中找不到任何条形码。
我已将代码分离到游乐场,并且在这里遇到了同样的问题。在 Xcode 13.4.1 的 Playground 上运行下面的代码,得到结果:
“Google 链接:可选(“https://www.google.com”)”
在 Xcode 14 上运行相同的代码,我得到了nil结果。在带有 Xcode 14 的 iOS15 模拟器中运行此命令会给出积极的结果,仅在 iOS16 和 Playground 上它不会读取 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")
}
Run Code Online (Sandbox Code Playgroud)
我想我已经找到问题了。在 Xcode 14 和 iOS 16 上运行请求时,请求修订版将运行( VNDetectBarcodesRequestVNDetectBarcodesRequestRevision3页面上尚未记录)。但是,使用或有效。VNDetectBarcodesRequestRevision1VNDetectBarcodesRequestRevision2
在执行任务之前添加以下内容对我有用:
request.revision = VNDetectBarcodesRequestRevision1
Run Code Online (Sandbox Code Playgroud)
详细阐述@Paul Peelen的解决方案,为了确保仅在需要的地方使用解决方法(Xcode 14 + iOS 16 + Simulator),我们使用了:
#if targetEnvironment(simulator) && compiler(>=5.7)
if #available(iOS 16, *) {
request.revision = VNDetectBarcodesRequestRevision1
}
#endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1509 次 |
| 最近记录: |