Apple Vision – 条形码检测不适用于不同颜色的条形码

2024-03-19

所以,我必须扫描不同颜色的不同条形码。例如,黑底黄色条形码或白底黄色条形码。

我对传统线性和 CCD 条码扫描仪识别它们没有任何问题。我尝试过使用 Apple Vision 框架,但它对它们不起作用。它们在白色背景的黑色条形码上工作得非常好。

我的条形码都是 Code 128,所以我使用这个代码:

var barcodeObservations: [String : VNBarcodeObservation] = [:]

for barcode in barcodes {

    if let detectedBarcode = barcode as? VNBarcodeObservation {

        if detectedBarcode.symbology == .code128 {
            barcodeObservations[detectedBarcode.payloadStringValue!] = detectedBarcode
        }
    }
}

在 AVCaptureVideoDataOutputSampleBufferDelegate 下的“captureOutput”函数中,我用它来将实时源过滤为黑白,这有助于识别银色背景上的金色条形码(第一张图片):

let context = CIContext(options: nil)

let currentFilter = CIFilter(name: "CIPhotoEffectMono")
currentFilter!.setValue(CIImage(cvImageBuffer: pixelBuffer), forKey: kCIInputImageKey)
let output = currentFilter!.outputImage!

context.render(output, to: pixelBuffer)

如何使 Vision Framework 检测具有反色的条形码?

“CIColorInvert”过滤器不起作用。

编辑:这些是条形码:


Theory

默认情况下,Apple Vision、CoreML、ARKit 和 RealityKit 框架旨在检测必须通过相机才能看到的条形码high-contrast black-and-white图像(具有可预测的通道权重:r=30%, g=59%, b=11%)。在您的情况下,白色背景上的黄色条形码具有最低对比度,因此没有任何真正的条形码扫描仪可以读取它,包括 Vision 的 RGB 相机输入。

让我们看看有什么条码标签的最佳和最差颜色 https://consolidatedlabel.com/label-articles/colors-for-barcode-labels文章告诉我们:

条形码难以扫描的原因之一是color,或更具体地说,缺乏颜色对比度。如果背景和条形颜色之间没有足够的对比度,条码扫描仪将很难读取它.

避免使用以下颜色的组合,因为它们属于低对比度灰度幽灵:

实用的解决方案

(仅当条形码使用漫反射涂料打印在平面上时)

尽管如果您想使用 Vision 成功检测彩色背景上的彩色条形码,您肯定需要对颜色应用灰度滤镜CVPixelBuffer在 Vision 开始识别条形码之前进行流传输。对于此用途AVFoundation and CoreImage构架。

请阅读这三篇文章,了解如何做到这一点:

  • 将过滤器应用于捕获流 https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/avcamfilter_applying_filters_to_a_capture_stream
  • 将图像转换为 CVPixelBuffer 以进行机器学习 Swift https://stackoverflow.com/questions/44400741/convert-image-to-cvpixelbuffer-for-machine-learning-swift
  • 将彩色图像转换为灰度图像 https://developer.apple.com/documentation/accelerate/converting_color_images_to_grayscale

P.S.

金属漆

用金属涂料(金、银、铜等)印刷的条形码对于条形码读取器来说是最糟糕的情况。这是因为金属涂料会产生反射,并且具有环境光的镜面反射。因此,用金属涂料打印的条形码几乎无法读取。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apple Vision – 条形码检测不适用于不同颜色的条形码 的相关文章

随机推荐