将Vision人脸检测VNFaceLandmarkRegion2D点转换为要缩放的帧坐标
Posted
技术标签:
【中文标题】将Vision人脸检测VNFaceLandmarkRegion2D点转换为要缩放的帧坐标【英文标题】:Convert Vision face detection VNFaceLandmarkRegion2D points into frame coordinates to be scale 【发布时间】:2019-07-14 07:01:41 【问题描述】:我正在使用视觉框架来检测面部标志,它工作正常,但我需要转换面部标志,如鼻子、眼睛,为此我需要获取帧坐标中的鼻子、眼睛位置,因为面部标志正在使用 VNFaceLandmarkRegion2D 绘制点。
请告诉我如何将 VNFaceLandmarkRegion2D 点转换为框架坐标。因此,我可以获取要转换的位置或建议任何其他方式来转换面部地标。
【问题讨论】:
【参考方案1】:Joshua Newnham 的这段代码解决了您的问题。
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))
)
【讨论】:
我在 y 位置上苦苦挣扎,这解决了我的问题。谢谢@Ozgur【参考方案2】:作为一个新手,这是我可以找到的将面部标记作为 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
【讨论】:
感谢您的回复。我想使用视觉框架而不是 CIDetector 定位以上是关于将Vision人脸检测VNFaceLandmarkRegion2D点转换为要缩放的帧坐标的主要内容,如果未能解决你的问题,请参考以下文章
将Vision人脸检测VNFaceLandmarkRegion2D点转换为要缩放的帧坐标
使用“android-vision”库保存实时检测到的人脸(跟踪人脸)图像