Обнаружение вращения штрих-кода с помощью AVCaptureMetadataOutput или VisionIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Гость
 Обнаружение вращения штрих-кода с помощью AVCaptureMetadataOutput или Vision

Сообщение Гость »

У меня есть эти два штрих-кода:
Изображение

Изображение

Он содержит тот же номер: 01069327.

Единственная разница в том, что второй номер перевернут по горизонтали.
Мне нужно распознать переворот, потому что для моей области продукты разные.

Я пробовал использовать и Vision, и AVFoundation< /code> без результатов.
и AVFoundation, похоже, не содержат этой информации или чего-то еще, что могло бы помочь мне получить ее.
Использование AVFoundation:

Код: Выделить всё

func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {

if let metadataObject = metadataObjects.first {
guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else { return }
guard let stringValue = readableObject.stringValue else { return }

let topLeft = readableObject.corners[0]
let topRight = readableObject.corners[1]
let bottomRight = readableObject.corners[2]
let bottomLeft = readableObject.corners[3]

let diffXRight = topRight.x - bottomRight.x
let diffXLeft = topLeft.x - bottomLeft.x
let flipThresholdX: CGFloat = 0.01
let isFlippedHorizontally = abs(diffXRight) > flipThresholdX || abs(diffXLeft) > flipThresholdX

print("BARCODE: \(stringValue), flipped: \(isFlippedHorizontally ? 0 : 1)\n\n")
self.parent.didFindCode(stringValue, isFlippedHorizontally ? 0 : 1)
}

}
Использование Vision (и другой формулы):

Код: Выделить всё

private func createRequest() -> VNDetectBarcodesRequest {
let request = VNDetectBarcodesRequest { request, error in
[...]
if let stringValue = observation.payloadStringValue {
let topLeft = observation.topLeft
let topRight = observation.topRight
let bottomLeft = observation.bottomLeft

let angle = atan2(topRight.y - topLeft.y, topRight.x - topLeft.x) * 180.0 / .pi
let rotationThreshold: Float = 180.0
let isFlippedHorizontally = angle > rotationThreshold || angle < -rotationThreshold

print("BARCODE: \(stringValue), flipped: \(isFlippedHorizontally ? 0 : 1)")
self.parent.didFindCode(stringValue, isFlippedHorizontally ? 0 : 1)
}
}
return request
}
Ничего существенного. Всегда получайте «1».

Кажется, это действительная и легко извлекаемая информация. Этот сайт https://online-barcode-reader.inliteresearch.com, как вы можете видеть на скриншотах, определяет правильное «поворот»:
Изображение

[img]https://i. stack.imgur.com/xDjrH.png[/img]


Есть ли способ получить или извлечь эту информацию?

Также можно использовать внешние (но бесплатные) библиотеки.

Источник: https://stackoverflow.com/questions/776 ... -or-vision
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»