Невозможно обнаружить штрих-код на изображении с помощью Firebase MLKit

Итак, я пытаюсь отсканировать штрих-код с помощью 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, так что проблема не в этом.

использованное изображение: Невозможно обнаружить штрих-код на изображении с помощью Firebase MLKit

Есть ошибка? какие-нибудь предупреждения? дай нам ключ

Scriptable 09.08.2018 12:53

Штрих-коды не обнаружены, поэтому переменная штрих-кода пуста, и поэтому цикл for не вводится.

Arjen M 09.08.2018 13:07

поможет, если вы проверили выход из: print(error.localizedDescription) и разместили изображение, которое вы используете. Вы также можете очень быстро протестировать с помощью встроенного сканера штрих-кода в стандартном приложении камеры.

Scriptable 09.08.2018 13:23

Переменная ошибки = nil, так что проблема не в этом.

Arjen M 09.08.2018 13:36

Работает ли это, если вы просто используете изображение с одним штрих-кодом?

Ian Barber 14.08.2018 01:00

@IanBarber: Нет, к сожалению, нет ...

Arjen M 14.08.2018 08:54

Вы используете все штрих-коды вместе на одном изображении? Я использовал некоторые из моих собственных примеров, и у меня не было проблем. github.com/firebase/quickstart-ios/blob/master/mlvision/…

Ibrahim Ulukaya 14.08.2018 18:24

Если вы можете разместить здесь несколько отдельных изображений, я смогу их отладить. И попробуйте с нашим github.com/firebase/quickstart-ios/blob/master/mlvision/…. github.com/firebase/quickstart-ios/blob/master/mlvision/…. Я хочу узнать, связана ли проблема с кодом или SDK не работает с конкретными штрих-кодами.

Ibrahim Ulukaya 14.08.2018 18:26

@IbrahimUlukaya, Мы обновили наш тестовый проект с предложенными вами штрих-кодами: github.com/tychop/TestScan У нас все еще нет успеха в получении штрих-кодов из метода barcodeDetector.detect (in: visionImage) ...

Tycho Pandelaar 16.08.2018 11:49

Вы тестировали устройство в ландшафтном режиме? Я столкнулся с аналогичной проблемой, когда штрих-коды не обнаруживаются, если устройство не находится в альбомном режиме. В моем случае ориентация метаданных не имеет значения.

rednuht 31.08.2018 19:40

да правда то же самое происходит со мной. @rednuht, как ты это исправил?

Pooja M. Bohora 29.11.2018 13:20

@ PoojaM.Bohora Сейчас я использую встроенное сканирование штрих-кода на iOS. Это так же просто, как использование MLKit, и работает отлично. davidgyoungtech.com/2018/01/24/native-bar-code-scanning-in-i‌ os

rednuht 30.11.2018 14:30

@rednuht хорошо, но я хочу сканировать изображение, а не камеру

Pooja M. Bohora 03.12.2018 07:32

@ PoojaM.Bohora Если вы нацеливаетесь на iOS 11, вы можете использовать Vision Framework для обнаружения штрих-кодов на изображениях: github.com/hansemannn/iOS11-QR-Code-Example - Я не думаю, что это возможно только с AVFoundation. См. stackoverflow.com/questions/19480466/…

rednuht 03.12.2018 16:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
14
1 519
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 13.08.2018 10:55

Убедитесь, что вы добавили эту строку в свой файл модуля:

pod 'Firebase / MLVisionBarcodeModel'

Другие вопросы по теме