ML Kit 面部轮廓功能,让可视化应用更智能
文 / Christiaan Prins 产品经理
如果您正在或想要构建一个可视化应用,那么 ML Kit 新添加的面部轮廓检测功能肯定会让您倾心。借助 ML Kit,您可以利用许多常见的机器学习 (ML) 用例,例如使用计算机视觉检测面部。需要知道在照片中把帽子戴在头上的哪个部位?想要在眼睛上放置一副眼镜?或者只想在左眼上放置一个单片眼镜。ML Kit 的人脸检测功能都可以做到。在本篇文章中,我们将讨论新添加的面部轮廓功能,该功能允许您在 Android 或 iOS 平台上构建更出色的可视化应用。
检测面部轮廓
现在,您只需几个配置选项,即可检测详细的面部轮廓。轮廓是 100 多个点的集合,能够勾勒出面部和常见特征,例如眼睛、鼻子和嘴巴。具体如下图所示。请注意,当图中人物挑眉时,轮廓点也会相应移动以进行匹配。高级相机应用正是通过这些点在用户面部设置创意滤镜和艺术镜头。
设置检测这些点的人脸检测器只需短短几行代码。
lazy var vision = Vision.vision()
let options = VisionFaceDetectorOptions()
options.contourMode = .all
let faceDetector = vision.faceDetector(options: options)
轮廓点还可以实时更新。为达到理想的帧速率,人脸探测器默认配置为 fast 模式。
当您准备好检测面部的点时,请向 ML Kit 发送一张图像或一个缓冲区供其处理。
faceDetector.process(visionImage) { faces, error in
guard error == nil, let faces = faces, !faces.isEmpty else { return }
for face in faces {
if let faceContour = face.contour(ofType: .face) {
for point in faceContour.points {
print(point.x) // the x coordinate
print(point.y) // the y coordinate
}
}
}
然后,ML Kit 会向您提供一组点,这些点均为轮廓的 x 和 y 坐标,且轮廓与图像尺寸相同。
检测面部特征的位置
人脸检测器还可以检测面部地标。地标只是鼻子、眼睛、耳朵和嘴巴等面部特征的统称。自从在 I/O 上发布 ML Kit 以来,我们已大幅提升了该款产品的性能!
如要检测地标,请使用 landmarkMode 选项配置人脸检测器:
lazy var vision = Vision.vision()
let options = VisionFaceDetectorOptions()
options.landmarkMode = .all
let faceDetector = vision.faceDetector(options: options)
然后将图像传送到检测器中,以便接收和处理检测到的地标坐标。
faceDetector.process(visionImage) { faces, error in
guard error == nil, let faces = faces, !faces.isEmpty else { return }
for face in faces {
// check for the presence of a left eye
if let leftEye = face.landmark(ofType: .leftEye) {
// TODO: put a monocle over the eye [monocle emoji]
print(leftEye.position.x) // the x coordinate
print(leftEye.position.y) // the y coordinate
}
}
}
我们迫切期待看到您使用 ML Kit 构建的成果
希望您可以借助这些新功能为自己的可视化应用轻松构建更智能的功能。如需了解使用 ML Kit 进行人脸检测的全部信息,请查看我们的 iOS (https://firebase.google.com/docs/ml-kit/ios/detect-faces)或 Android(https://firebase.google.com/docs/ml-kit/android/detect-faces)版文档。祝大家尽情享受构建的乐趣!
更多 AI 相关阅读: