我正在尝试跟踪面部表情,例如扬眉、微笑、眨眼等。在 ARKit 中,我可以使用 blendShapes (https://developer.apple.com/documentation/arkit/arfaceanchor/2928251-blendshapes https://developer.apple.com/documentation/arkit/arfaceanchor/2928251-blendshapes)来检测面部不同部位的运动,但在 ARCore 中尚不存在。
我尝试访问相对于面部中心变换的网格顶点,但这些顶点随着面部的旋转而发生显着变化。
有没有办法将面部标志/顶点从 0 标准化为 1,其中 0 是中性,1 是最大面部表情?它不需要像 ARKit BlendShapes 那样准确。
您的问题涉及两个独立的问题:-
- 像 ARKit 一样从 ARCore 获取混合形状的问题。
- 头部旋转的问题使得逐点比较变得困难。
我没有解决问题 1 的方法。但是,对于问题 2,您可以根据地标点计算旋转矩阵。我有一个方法可以为 mediakit 面部网格做这件事。希望这对您有用:-
def calc_rotation_matrix(self):
left_corner_right_eye = get_left_corner_right_eye()
right_corner_left_eye = get_right_corner_left_eye()
left_corner_face = get_left_corner_face()
right_corner_face = get_right_corner_face()
upper_nose = get_upper_pt_nose()
chin = get_chin()
rotation_matrix = np.zeros((3, 3))
rotation_matrix[0:] = (right_corner_face - left_corner_face) / np.linalg.norm(right_corner_face - left_corner_face)
rotation_matrix[1:] = (chin - upper_nose) / np.linalg.norm(chin - upper_nose)
rotation_matrix[2:] = np.cross(rotation_matrix[0, :], rotation_matrix[1, :])
return rotation_matrix
显然,您必须编写方法来为您自己的用例获取相应的点。一旦你有了这个旋转矩阵,你总是可以通过将地标乘以 (pitch, yaw, roll) = (0, 0, 0) 来获得面部np.linalg.inv(rotation_matrix)
AFAIK MediaKit(或 ARCore)没有内置的 blendshapes 功能。@Hardik 在上面的评论中提到 OpenCV 和 Dlib 可以在这方面提供帮助..但我不太确定。事实上,我正在寻找类似的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)