Я обучил модель распознавать прямоугольники на изображениях. Я работал нормально, но только с определенными c изображениями (как я думаю, зависит от указанного c соотношения сторон). Например:
действительный пример
введите описание изображения здесь. Но когда я начал использовать то же изображение, но с другим размером, оно не работает.
неверный пример
Может кто-нибудь сказать мне, почему это работает так? И как я могу это исправить?
Что я делаю, чтобы сделать запрос:
let requestHandler = VNImageRequestHandler(cgImage: cgImage, orientation: image.cgImageOrientation, options: [:])
self.request = VNCoreMLRequest(model: model) { (request, error) in
guard let observations = request.results as? [VNRecognizedObjectObservation] else {
return
}
self.visualizeObservations(observations: observations)
print(observations)
}
request.imageCropAndScaleOption = .scaleFill
DispatchQueue.global(qos: .background).async {
do {
try requestHandler.perform([self.request])
} catch let error as NSError {
print("Error in performing Image request: \(error)")
}
}
Кроме того, я хотел бы знать, в каких случаях модель может обнаружить объект в CreateML GUI но не может на экране для того же изображения?
UPD: я уже нашел решение. Причиной root был неверный вывод, и когда я изменил
let requestHandler = VNImageRequestHandler(cgImage: cgImage, orientation: image.cgImageOrientation, options: [:])
на
let requestHandler = VNImageRequestHandler(data: image.jpegData(compressionQuality: 1)!, orientation: image.cgImageOrientation, options: [:])
Решить проблему.