2025年6月6日 星期五 乙巳(蛇)年 三月初十 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 人工智能

提取面部指定区域 dilb 人脸68关键点

时间:04-17来源:作者:点击数:49

这几天在做一个基于AU进行人脸识别的实验,在这过程中,需要提取AU指定部位。但是我又不想自己再训练一个网络,于是,就使用dlib和opencv提供的人脸关键点进行试验。

在这里插入图片描述

具体思路就是通过人脸关键点的坐标进行定位,并提取指定部分,这里就以提取额头部分为例:

  • #coding=utf-8
  • import numpy as np
  • import cv2
  • import dlib
  • from scipy.spatial import distance
  • import os
  • from imutils import face_utils
  • base_path="D:/CK_Emotion_DD/"
  • source_path=base_path+'cohn-kanade/'
  • to_path=base_path+'forehead/'
  • test_path=source_path+'/S010/001/S010_001_01594215.png'
  • shape_detector_path="D:/blink_detect/model/shape_predictor_68_face_landmarks.dat"
  • left_eye_up_point1=38-1
  • left_eye_up_point2=39-1
  • right_eye_up_point1=44-1
  • right_eye_up_point2=45-1
  • detector = dlib.get_frontal_face_detector()# 人脸检测器
  • predictor = dlib.shape_predictor(shape_detector_path)# 人脸特征点检测器
  • def catch_forehead(image_path,save_path):
  • image = cv2.imread(image_path)
  • cv2.imshow("1",image)
  • cv2.waitKey()
  • dets = detector(image,1)
  • sp=image.shape
  • h=sp[0]
  • w=sp[1]
  • print(h)
  • for k, d in enumerate(dets):
  • print("dets{}".format(d))
  • print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
  • k, d.left(), d.top(), d.right(), d.bottom()))
  • shape = predictor(image, d)
  • #print(shape.part(0).x,shape.part(0).y)
  • l1=shape.part(left_eye_up_point1)
  • l2=shape.part(left_eye_up_point2)
  • r1=shape.part(right_eye_up_point1)
  • r2=shape.part(right_eye_up_point2)
  • y=min(l1.y,l2.y,r1.y,r2.y)
  • print(y,h-d.top(),d.left(),w-d.right())
  • forehead=image[d.top():y,d.left():d.right()]
  • cv2.imshow('1',forehead)
  • cv2.waitKey()
  • cv2.imwrite(save_path,forehead)
  • catch_forehead(test_path,"d:/1.png")

提取效果如下

在这里插入图片描述
在这里插入图片描述
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门