使用Firebase的MLKit无法从图像中检测到条形码

7

因此,我正在尝试使用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,因此不是问题所在。

使用的图片: enter image description here


没有检测到条形码,因此条形码变量为空,因此不进入for循环。 - Arjen M
如果您检查了 print(error.localizedDescription) 的输出并发布您正在使用的图像,那将会很有帮助。您还可以在标准相机应用程序中使用内置条形码扫描器进行快速测试。 - Scriptable
如果您只使用带有单个条形码的图像,它是否有效? - Ian Barber
@IanBarber:很遗憾,不是的... - Arjen M
你是否将所有条形码都放在一个图像中使用?我使用了一些自己的示例,没有遇到任何问题。 https://github.com/firebase/quickstart-ios/blob/master/mlvision/MLVisionExample/ViewController.swift#L559 - Ibrahim Ulukaya
显示剩余9条评论
2个回答

2
您很可能缺少图像的“方向”。
// Define the metadata for the image.
let imageMetadata = VisionImageMetadata()
imageMetadata.orientation = UIUtilities.visionImageOrientation(from: image.imageOrientation)

// Initialize a VisionImage object with the given UIImage.
let visionImage = VisionImage(image: image)
visionImage.metadata = imageMetadata

如果那个方法不起作用,尝试将条形码格式设置为“所有”

let format = VisionBarcodeFormat.all
let barcodeOptions = VisionBarcodeDetectorOptions(formats: format)
// Create a barcode detector.
let barcodeDetector = vision.barcodeDetector(options: barcodeOptions)

谢谢,我们尝试了并更新了答案,但结果仍然相同。 - Arjen M

1

请确认您在Podfile中已添加此行:

pod 'Firebase / MLVisionBarcodeModel'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接