因此,我正在尝试使用MLKit扫描条形码,但在self.barcodeDetector?.detect
的完成块中,barcode变量中没有条形码。
UIImage(named: "barcode.jpg")存在且已正确加载(包含条形码)。
那么我做错了什么/忽略了什么?
private var barcodeDetector: VisionBarcodeDetector?
private lazy var vision = Vision.vision()
override func viewDidLoad() {
super.viewDidLoad()
guard let barcodeImage = self.imageView.image else { return }
let format = VisionBarcodeFormat.all
let barcodeOptions = VisionBarcodeDetectorOptions(formats: format)
let barcodeDetector = self.vision.barcodeDetector(options: barcodeOptions)
let imageMetadata = VisionImageMetadata()
imageMetadata.orientation = UIUtilities.visionImageOrientation(from: barcodeImage.imageOrientation)
let visionImage = VisionImage(image: barcodeImage)
visionImage.metadata = imageMetadata
self.textView.text = ""
barcodeDetector.detect(in: visionImage) { (barcodes, error) in
guard error == nil, let barcodes = barcodes, !barcodes.isEmpty else {
let errorString = error?.localizedDescription ?? "No error description available"
self.textView.text = "On-Device barcode detection failed with error: \(errorString)"
return
}
self.textView.text = self.textView.text + "\(self.dateFormatter.string(from: Date())) detecting ...\n"
self.textView.text = self.textView.text + "barcodes.count = \(barcodes.count)" + "\n"
print(barcodes.count)
for barcode in barcodes {
self.textView.text = self.textView.text + "\(barcode)" + "\n"
print(barcode)
}
}
所以问题在于条形码(barcodes)变量为空,因此for循环中的代码没有被执行...:
for barcode in barcodes! {
print(barcode.rawValue!)
}
附注:错误变量为nil,因此不是问题所在。
print(error.localizedDescription)
的输出并发布您正在使用的图像,那将会很有帮助。您还可以在标准相机应用程序中使用内置条形码扫描器进行快速测试。 - Scriptable