Я пытался нарисовать ограничивающую рамку для QR-кода, обнаруженного во время ARSession. Результат:
boundingbox 1
ограничивающий ящик 2
Штрих-код отслеживается, но геометрия ограничительной рамки неверна.
Как получить правильные координаты ограничительной рамки?
Исходный код:
public func session(_ session: ARSession, didUpdate frame: ARFrame) {
// Only run one Vision request at a time
if self.processing {
return
}
self.processing = true
let request = VNDetectBarcodesRequest { (request, error) in
if let results = request.results, let result = results.first as? VNBarcodeObservation {
DispatchQueue.main.async {
let path = CGMutablePath()
for result in results {
guard let barcode = result as? VNBarcodeObservation else { continue }
let topLeft = self.convert(point: barcode.topLeft)
path.move(to: topLeft)
let topRight = self.convert(point: barcode.topRight)
path.addLine(to: topRight)
let bottomRight = self.convert(point: barcode.bottomRight)
path.addLine(to: bottomRight)
let bottomLeft = self.convert(point: barcode.bottomLeft)
path.addLine(to: bottomLeft)
path.addLine(to: topLeft)
}
self.drawLayer.path = path
self.processing = false
}
} else {
self.processing = false
}
}
DispatchQueue.global(qos: .userInitiated).async {
do {
request.symbologies = [.QR]
let imageRequestHandler = VNImageRequestHandler(cvPixelBuffer: frame.capturedImage, orientation: .right, options: [:])
try imageRequestHandler.perform([request])
} catch {
}
}
}
private func convert(point: CGPoint) -> CGPoint {
return CGPoint(x: point.x * view.bounds.size.width,
y: (1 - point.y) * view.bounds.size.height)
}