Итак, я пытаюсь отсканировать штрих-код с помощью MLKit, но в переменной штрих-кода в блоке завершения self.barcodeDetector?.detect нет штрих-кодов.
UIImage (названный: "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)
}
}
Итак, проблема в том, что штрих-коды var пусты, поэтому код в цикле for не достигается ...:
for barcode in barcodes! {
print(barcode.rawValue!)
}
P.s. Переменная ошибки = nil, так что проблема не в этом.
Штрих-коды не обнаружены, поэтому переменная штрих-кода пуста, и поэтому цикл for не вводится.
поможет, если вы проверили выход из: print(error.localizedDescription) и разместили изображение, которое вы используете. Вы также можете очень быстро протестировать с помощью встроенного сканера штрих-кода в стандартном приложении камеры.
Переменная ошибки = nil, так что проблема не в этом.
Работает ли это, если вы просто используете изображение с одним штрих-кодом?
@IanBarber: Нет, к сожалению, нет ...
Вы используете все штрих-коды вместе на одном изображении? Я использовал некоторые из моих собственных примеров, и у меня не было проблем. github.com/firebase/quickstart-ios/blob/master/mlvision/…
Если вы можете разместить здесь несколько отдельных изображений, я смогу их отладить. И попробуйте с нашим github.com/firebase/quickstart-ios/blob/master/mlvision/…. github.com/firebase/quickstart-ios/blob/master/mlvision/…. Я хочу узнать, связана ли проблема с кодом или SDK не работает с конкретными штрих-кодами.
@IbrahimUlukaya, Мы обновили наш тестовый проект с предложенными вами штрих-кодами: github.com/tychop/TestScan У нас все еще нет успеха в получении штрих-кодов из метода barcodeDetector.detect (in: visionImage) ...
Вы тестировали устройство в ландшафтном режиме? Я столкнулся с аналогичной проблемой, когда штрих-коды не обнаруживаются, если устройство не находится в альбомном режиме. В моем случае ориентация метаданных не имеет значения.
да правда то же самое происходит со мной. @rednuht, как ты это исправил?
@ PoojaM.Bohora Сейчас я использую встроенное сканирование штрих-кода на iOS. Это так же просто, как использование MLKit, и работает отлично. davidgyoungtech.com/2018/01/24/native-bar-code-scanning-in-i os
@rednuht хорошо, но я хочу сканировать изображение, а не камеру
@ PoojaM.Bohora Если вы нацеливаетесь на iOS 11, вы можете использовать Vision Framework для обнаружения штрих-кодов на изображениях: github.com/hansemannn/iOS11-QR-Code-Example - Я не думаю, что это возможно только с AVFoundation. См. stackoverflow.com/questions/19480466/…





Вам, скорее всего, не хватает «ориентации» изображения.
// 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)
Спасибо, мы попробовали, увидели обновленный ответ, но результат тот же.
Убедитесь, что вы добавили эту строку в свой файл модуля:
pod 'Firebase / MLVisionBarcodeModel'
Есть ошибка? какие-нибудь предупреждения? дай нам ключ