使用Dlib的cnn_face_detection_model_v1加载模型文件报错求助
问题根源与解决方案
嘿,这个问题其实是你把模型文件和加载函数配错对啦,不是函数本身有问题~
为什么会报错?
dlib.cnn_face_detection_model_v1() 和 dlib.shape_predictor() 是完全不同用途的函数,对应着不同类型的模型文件:
shape_predictor_68_face_landmarks.dat是用来检测人脸68个关键点的模型,只能用dlib.shape_predictor()加载,这也是为什么你用这个函数加载时完全正常。cnn_face_detection_model_v1()是专门用来加载CNN人脸检测模型的函数,它需要的是类似mmod_human_face_detector.dat这类模型文件,而不是关键点预测模型。你把关键点模型塞给它,自然会出现反序列化错误。
怎么解决?
分两种情况处理:
- 如果你需要用CNN做人脸检测:
下载对应的CNN人脸检测模型,然后用正确的函数加载,示例代码如下:import dlib # 加载CNN人脸检测模型 face_detector = dlib.cnn_face_detection_model_v1('mmod_human_face_detector.dat') # 之后可以用这个检测器检测图像中的人脸 dets = face_detector(img, 1) - 如果你本来的需求就是检测人脸关键点:
继续使用dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')就好,记得要先用人脸检测器(比如dlib自带的HOG检测器或者上面的CNN检测器)定位到人脸区域,再把区域传给关键点预测器。
内容的提问来源于stack exchange,提问作者Peshmerge
相关产品推荐
相关产品推荐

