Итак, я должен сканировать различные штрих-коды с разными цветами. Например, желтый штрих-код на черном фоне или желтый штрих-код на белом фоне.
У меня нет проблем с их распознаванием традиционными линейными и ПЗС-сканерами штрих-кода. Я пытался использовать Apple Vision Framework, но он не работает на них. Они отлично работают на черных штрих-кодах с белым фоном.
Все мои штрих-коды имеют код 128, поэтому я использую этот код для него:
var barcodeObservations: [String : VNBarcodeObservation] = [:]
for barcode in barcodes {
if let detectedBarcode = barcode as? VNBarcodeObservation {
if detectedBarcode.symbology == .code128 {
barcodeObservations[detectedBarcode.payloadStringValue!] = detectedBarcode
}
}
}
И в функции captureOutput в AVCaptureVideoDataOutputSampleBufferDelegate, я используйте это, чтобы отфильтровать мою прямую трансляцию как черно-белую, что поможет в распознавании золотого штрих-кода на серебряном фоне (первое изображение):
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' не работает.
Редактировать: Это штрих-коды:
![enter image description here](https://i.stack.imgur.com/mHzmD.jpg)
![enter image description here](https://i.stack.imgur.com/Ttsu0.jpg)