Базовое обнаружение объектов ML для изображений различного размера - PullRequest
1 голос
/ 24 апреля 2020

Я обучил модель распознавать прямоугольники на изображениях. Я работал нормально, но только с определенными 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: [:])

Решить проблему.

1 Ответ

0 голосов
/ 24 апреля 2020

UPD: я уже профинансировал решение. Причиной root был неверный вывод, и когда я изменил

let requestHandler = VNImageRequestHandler(cgImage: cgImage, orientation: image.cgImageOrientation, options: [:])

На

let requestHandler = VNImageRequestHandler(data: image.jpegData(compressionQuality: 1)!, orientation: image.cgImageOrientation, options: [:])

Решить проблему.

...