Новый API Apple Vision VNTranslationalImageRegistrationRequest

Я пытаюсь поиграть с частью анализа выравнивания изображений нового Vision API, но у меня возникают проблемы с инициализацией VNTranslationalImageRegistrationRequest. Мой код выглядит следующим образом:

import UIKit
import Vision

class ImageTranslation {

    var sourceImage: UIImage!

    lazy var imageTranslationRequest: VNTranslationalImageRegistrationRequest = {
//This line fails        let translationRequest = VNTranslationalImageRegistrationRequest(targetedCGImage: sourceImage.cgImage, completionHandler: self.handleImageTranslationRequest)

        return translationRequest
    }()

    func handleImageTranslationRequest(request: VNRequest, error: Error?) {

        guard let observations = request.results as? [VNImageTranslationAlignmentObservation]
            else { print("unexpected result type from VNDetectRectanglesRequest")
                return
        }
        guard observations.first != nil else {
            return
        }
        DispatchQueue.main.async {
            observations.forEach { observation in
                let transform = observation.alignmentTransform
                print(transform)
            }

        }
    }
}

Но в отмеченной строке выше я продолжаю получать следующую ошибку и не знаю, как ее исправить. Instance member 'sourceImage' cannot be used on type 'ImageTranslation'

Может кто-то указать мне верное направление? Спасибо


person Wrumble    schedule 30.06.2017    source источник


Ответы (1)


Пример использования VNTranslationalImageRegistrationRequest на двух изображениях для вычисления перевода между двумя изображениями:

import UIKit
import Vision

class ImageTranslation {

    func translateImages(for referenceImage: UIImage,
                         floatingImage: UIImage,
                         completion: @escaping (_ alignmentTransform : CGAffineTransform?) -> Void) {
        let translationRequest = VNTranslationalImageRegistrationRequest(targetedCGImage: floatingImage.cgImage!) { (request: VNRequest, error: Error?) in
            completion((request.results?.first as? VNImageTranslationAlignmentObservation)?.alignmentTransform)
        }
        let vnImage = VNSequenceRequestHandler()
        try? vnImage.perform([translationRequest], on: referenceImage.cgImage!)
    }

}
person Wazza    schedule 01.07.2017