当我们在需要使用face_alignment的工程里可能会出现以下错误:
self.model = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, flip_input=False, device=device)
AttributeError: _2D
原因分析:
运行python,按照如下输入命令:
>python #我是从终端直接进入的python,大家也可以新建一个python文件输入下列命令并运行。
Python 3.9.18 (main, Sep 11 2023, 14:09:26) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import face_alignment
>>> print(dir(face_alignment.LandmarksType))
发现只有’THREE_D’, ‘TWO_D’, ‘TW0_HALF_D’。
说明这个类里压根就没有_2D这个属性,应该是版本没对上。
>>> print(dir(face_alignment.LandmarksType))
['THREE_D', 'TWO_D', 'TWO_HALF_D', '__class__', '__doc__', '__members__', '__module__']
解决方案:
要么把这些python包的版本装对。(比下面的方法复杂,我认为没有必要)
要么依据报错信息直接改那个py文件,找到对应的代码位置,我把:
return face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, device=dev)
修改成上面目前所拥有的类型,如2D的话按照如下修改:
return face_alignment.FaceAlignment(face_alignment.LandmarksType.TWO_D, device=dev)
如果是_3D只要改成THREE_D即可。