Преобразовать 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:
- Сначала преобразовал выбранное изображение в CIImage
- Используется faceDetector на изображении
- Проанализировал изображение для каждого лица, если оно имеет более одного
Код:
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