Я пытаюсь использовать новый Обнаружение и отслеживание объектов с помощью ML Kit на iOS, однако я, похоже, наталкиваюсь на контрольно-пропускной пункт с ограничивающей рамкой обнаружения объектов.
На примере фигуры le go в соответствии с документацией ориентация изображения всегда преобразуется в .up
, однако ограничивающая рамка, кажется, почти повернута на 90 градусов до правильных размеров, несмотря на изображение ориентация правильная. Такое же поведение существует и в других объектах со смещением блока.
let options = VisionObjectDetectorOptions()
options.detectorMode = .singleImage
options.shouldEnableMultipleObjects = false
let objectDetector = Vision.vision().objectDetector(options: options)
let image = VisionImage(image: self.originalImage)
objectDetector.process(image) { detectedObjects, error in
guard error == nil else {
print(error)
return
}
guard let detectedObjects = detectedObjects, !detectedObjects.isEmpty else {
print("No objects detected")
return
}
let primaryObject = detectedObjects.first
print(primaryObject as Any)
guard let objectFrame = primaryObject?.frame else{return}
print(objectFrame)
self.imageView.image = self.drawOccurrencesOnImage([objectFrame], self.originalImage)
}
и функцией, которая вызывает aws красное поле;
private func drawOccurrencesOnImage(_ occurrences: [CGRect], _ image: UIImage) -> UIImage? {
let imageSize = image.size
let scale: CGFloat = 0.0
UIGraphicsBeginImageContextWithOptions(imageSize, false, scale)
image.draw(at: CGPoint.zero)
let ctx = UIGraphicsGetCurrentContext()
ctx?.addRects(occurrences)
ctx?.setStrokeColor(UIColor.red.cgColor)
ctx?.setLineWidth(20)
ctx?.strokePath()
guard let drawnImage = UIGraphicsGetImageFromCurrentImageContext() else {
return nil
}
UIGraphicsEndImageContext()
return drawnImage
}
Размеры изображения согласно image.size
равны (3024.0, 4032.0)
, а рамка рамки (1274.0, 569.0, 1299.0, 2023.0)
. Любое понимание этого поведения должно быть оценено.