Преобразовать VNFaceLandmarkRegion2D для обнаружения лиц Vision в координаты кадра для масштабирования

Я использую каркас зрения для определения ориентира лица, и он работает нормально, но мне нужно преобразовать ориентиры лица, такие как нос, глаза, и для этого мне нужно получить нос, положение глаз в координате кадра, поскольку ориентир лица рисуется с использованием точек VNFaceLandmarkRegion2D.

Пожалуйста, дайте мне знать, как преобразовать точки VNFaceLandmarkRegion2D в координаты кадра. Так что я могу получить местоположение для трансформации или предложить любой другой способ трансформации ориентира лица.

1 ответ

Этот код от Джошуа Ньюнхема решает вашу проблему.

 func getTransformedPoints(
                landmark:VNFaceLandmarkRegion2D,
                faceRect:CGRect,
                imageSize:CGSize) -> [CGPoint]{

                // last point is 0.0
                return landmark.normalizedPoints.map({ (np) -> CGPoint in
                    return CGPoint(
                        x: faceRect.origin.x + np.x * faceRect.size.width,
                        y: imageSize.height - (np.y * faceRect.size.height + faceRect.origin.y))
                })
            }

Как новичок это то, что я мог найти, чтобы получить метки лица как CGPoint:

  1. Сначала преобразовал выбранное изображение в CIImage
  2. Используется faceDetector на изображении
  3. Проанализировал изображение для каждого лица, если оно имеет более одного

Код:

let chosenPicture = CIImage(data: (self.selectedimage.image?.tiffRepresentation)!)
let selectedFace = faceDetector?.features(in: chosenPicture!, options: [CIDetectorSmile:true])
for person in selectedFace as! [CIFaceFeature] {
    let p1LeftEye = person.leftEyePosition
    let p1RightEye = person.rightEyePosition
    let p1Mouth = person.mouthPosition
Другие вопросы по тегам