您可以使用两种不同的请求通过 iOS 视觉框架执行人脸检测任务:
VNDetectFaceLandmarksRequest
和 VNDetectFaceRectanglesRequest
。它们都返回一组 VNFaceObservation
,每个检测到的人脸对应一个。 VNFaceObservation
有多种可选属性,包括boundingBox
和landmarks
。然后,地标对象还包括可选属性,如 nose
、innerLips
、leftEye
等。
两种不同的 Vision 请求执行人脸检测的方式是否有所不同?
看起来
VNDetectFaceRectanglesRequest
只找到了一个边界框(也许还有一些其他属性),但没有找到任何地标。另一方面,VNDetectFaceLandmarksRequest
似乎同时找到了边界框和地标。
是否存在一种请求类型可以找到人脸而另一种则不能的情况? VNDetectFaceLandmarksRequest
优于 于VNDetectFaceRectanglesRequest
,还是后者在性能或可靠性方面具有优势?
以下是如何使用这两个 Vision 请求的示例代码:
let faceLandmarkRequest = VNDetectFaceLandmarksRequest()
let faceRectangleRequest = VNDetectFaceRectanglesRequest()
let requestHandler = VNImageRequestHandler(ciImage: image, options: [:])
try requestHandler.perform([faceRectangleRequest, faceLandmarkRequest])
if let rectangleResults = faceRectangleRequest.results as? [VNFaceObservation] {
let boundingBox1 = rectangleResults.first?.boundingBox //this is an optional type
}
if let landmarkResults = faceLandmarkRequest.results as? [VNFaceObservation] {
let boundingBox2 = landmarkResults.first?.boundingBox //this is an optional type
let landmarks = landmarkResults.first?.landmarks //this is an optional type
}
VNDetectFaceRectanglesRequest
是一种更轻量级的查找面部矩形的操作VNDetectFaceLandmarksRequest
是一个较重的操作,也可以帮助定位脸部的标志点