python实现人脸关键部位检测(附源码)

举报
鸣海步 发表于 2022/05/03 20:52:53 2022/05/03
【摘要】 人脸特征提取本文主要使用dlib库中的人脸特征识别功能。dlib库使用68个特征点标注出人脸特征,通过对应序列的特征点,获得对应的脸部特征。下图展示了68个特征点。比如我们要提取眼睛特征,获取37到46这几个特征点即可。在代码中增加类似的映射,直接通过调用对应部位。Python学习交流Q群:906715085##3FACIAL_LANDMARKS_68_IDXS = OrderedDict(...

人脸特征提取
本文主要使用dlib库中的人脸特征识别功能。

dlib库使用68个特征点标注出人脸特征,通过对应序列的特征点,获得对应的脸部特征。下图展示了68个特征点。比如我们要提

取眼睛特征,获取37到46这几个特征点即可。


在代码中增加类似的映射,直接通过调用对应部位。

Python学习交流Q群:906715085##3
FACIAL_LANDMARKS_68_IDXS = OrderedDict([  
("mouth", (48, 68)),
  ("right_eyebrow", (17, 22)), 
   ("left_eyebrow", (22, 27)),
     ("right_eye", (36, 42)),  
     ("left_eye", (42, 48)), 
      ("nose", (27, 36)), 
  ("jaw", (0, 17))])FACIAL_LANDMARKS_5_IDXS = OrderedDict([ 
   ("right_eye", (2, 3)),  
   ("left_eye", (0, 1)),  
   ("nose", (4))


数据预处理与模型加载
我们按照输入图像的要求对图像进行变形处理,这里需要转化为灰度图,加载get_frontal_face_detector模型和特征库进行检测。

Python学习交流Q群:906715085###
#加载人脸检测与关键点定位
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(args["shape_predictor"])

#读取输入数据,预处理
image = cv2.imread(args["image"])
(h, w) = image.shape[:2]
width=500
r = width / float(w)
dim = (width, int(h * r))
image = cv2.resize(image, dim, interpolation=cv2.INTER_AREA)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

#人脸检测rects = detector(gray, 1)

遍历每个脸部关键点
对提取出来的人脸进行特征点预测,对人脸关键部位进行定位,同时将其转化为np_array的形式。

shape = predictor(gray, rect)
shape = shape_to_np(shape)
1
2
遍历每一个部分,复制一个副本进行操作,将当前检测的类别标识在图像上。

#遍历每一个部分
for (name, (i, j)) in FACIAL_LANDMARKS_68_IDXS.items():  
clone = image.copy() 
 cv2.putText(clone, name, (10, 30),
  cv2.FONT_HERSHEY_SIMPLEX,    0.7, (0, 0, 255), 2)

根据识别出来的位置,将特征点画在图像上。

for (x, y) in shape[i:j]:      
cv2.circle(clone, (x, y), 3, (0, 0, 255), -1)

提取出该五官部位。

(x, y, w, h) = cv2.boundingRect(np.array([shape[i:j]]))
roi = image[y:y + h, x:x + w]
(h, w) = roi.shape[:2]
width=250
r = width / float(w)
dim = (width, int(h * r))
roi = cv2.resize(roi, dim, interpolation=cv2.INTER_AREA)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。