iOS Vision API для распознавания лиц: как определить лица на нескольких изображениях? - PullRequest
0 голосов
/ 10 апреля 2019

Я использую следующее, которое отлично работает на отдельных изображениях. Как я могу адаптировать это для нескольких изображений (из массива изображений)? Я попытался поместить VNImageRequestHandler & requestHandler.perform в цикл for для всех изображений в массиве, но поскольку completionHandler является асинхронным, мой метод addFaceLandmarksToImage вызывается в случайном порядке. Таким образом, я понятия не имею, для какого изображения индекса массива я получаю вызов.

  1. Есть ли лучший способ сделать это без цикла изображений?
  2. Как вернуть исходное изображение из параметра VNRequest completionHandler?

Код:

@IBAction func process(_ sender: UIButton) {
        var orientation:CGImagePropertyOrientation = .down

        switch image.imageOrientation {
        case .up:
            orientation = .up
        case .right:
            orientation = .right
        case .down:
            orientation = .down
        case .left:
            orientation = .left
        default:
            orientation = .down
        }

        let requestHandler = VNImageRequestHandler(cgImage: image.cgImage!, orientation: orientation ,options: [:])
        do {
            try requestHandler.perform([VNDetectFaceLandmarksRequest(completionHandler: self.handleFaceFeatures)])
        } catch {
            print(error)
        }
    }

func handleFaceFeatures(request: VNRequest, errror: Error?) {
        guard let observations = request.results as? [VNFaceObservation] else {
            fatalError("unexpected result type!")
        }

        for face in observations {
            addFaceLandmarksToImage(face)
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...