Обнаружение вращения штрих-кода с помощью 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

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