2025年3月21日 星期五 甲辰(龙)年 月廿 夜 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 人工智能

利用dlib81人脸关键点提取额头脸颊ROI

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

先上实验结果

**在这里插入图片描述**
  • '''
  • 人脸关键点检测——dlib
  • 1 dlib.get_frontal_face_detector() 获取人脸检测器
  • 2 dlib.shape_predictor() 预测人脸关键点
  • '''
  • # import cv2
  • #上面的无法自动补全代码
  • import cv2.cv2 as cv2
  • import matplotlib.pyplot as plt
  • import dlib
  • import numpy as np
  • #读取图片
  • img = cv2.imread("6.png")
  • #调用人脸检测器
  • detector = dlib.get_frontal_face_detector()
  • #加载 预测关键点模型(68个关键点)
  • predictor = dlib.shape_predictor("shape_predictor_81_face_landmarks.dat")
  • #灰度化
  • gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  • #人脸检测
  • faces = detector(gray, 1) # 1:将图片放大一倍,便于识别人脸; 0 原始图像
  • a = np.arange(81)
  • print("a:",a)
  • b = np.arange(81)
  • if (len(faces) != 0):
  • # 找到脸颊区域
  • for i in range(len(faces)):
  • landmarks = np.matrix([[p.x, p.y] for p in predictor(img, faces[i]).parts()])
  • for idx, point in enumerate(landmarks):
  • # 68点的坐标
  • pos = (point[0, 0], point[0, 1])
  • # ROI:脸颊区域
  • a = a.tolist() # 将矩阵转换成列表。
  • b = b.tolist()
  • a[idx] = point[0, 0]
  • b[idx] = point[0, 1]
  • a = np.array(a) # 将数据转化为矩阵
  • b = np.array(b)
  • # 额头区域
  • x1 = int(a[76])
  • y1 = int(b[19])
  • x2 = int(a[73])
  • y2 = int(b[73])
  • if (x1 < 0): # 防止人脸转动,x1位置超出图像
  • x1 = 0
  • forehead_ROI = img[y2:y1, x1:x2]
  • cv2.imshow("forehead_ROI",forehead_ROI)
  • cv2.waitKey()
  • # 脸颊区域
  • x1 = int((a[2] + a[4]) / 2)
  • y1 = int((b[2] + b[4]) / 2)
  • y2 = int((b[2] + b[23]) / 2)
  • x2 = int((a[12] + a[14]) / 2)
  • if (x1 < 0):
  • x1 = 0
  • cheek_ROI = img[y2:y1, x1:x2]
  • cv2.imshow("cheek_ROI",cheek_ROI)
  • cv2.waitKey()
  • # 检测整个人脸区域
  • for k, d in enumerate(faces):
  • [x1, x2, y1, y2] = [d.left(), d.right(), d.top(), d.bottom()]
  • face_ROI = img[y1:y2, x1:x2]
  • cv2.imshow("face_ROI",face_ROI)
  • cv2.waitKey()
  • #显示整个效果
  • plt.imshow(img[:, :, ::-1]) # BGR 2 RGB
  • plt.title("81_face_landmarks")
  • plt.axis("off")
  • # cv2.imwrite("dlib_81_face_landmarks10.jpg", img)
  • plt.show()
在这里插入图片描述
  • '''
  • 人脸关键点检测——dlib
  • 1 dlib.get_frontal_face_detector() 获取人脸检测器
  • 2 dlib.shape_predictor() 预测人脸关键点
  • '''
  • # import cv2
  • #上面的无法自动补全代码
  • import cv2.cv2 as cv2
  • import matplotlib.pyplot as plt
  • import dlib
  • import numpy as np
  • #读取图片
  • img = cv2.imread("6.png")
  • #调用人脸检测器
  • detector = dlib.get_frontal_face_detector()
  • #加载 预测关键点模型(68个关键点)
  • predictor = dlib.shape_predictor("shape_predictor_81_face_landmarks.dat")
  • #灰度化
  • gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  • #人脸检测
  • faces = detector(gray, 1) # 1:将图片放大一倍,便于识别人脸; 0 原始图像
  • a = np.arange(81)
  • b = np.arange(81)
  • if (len(faces) != 0):
  • # 找到脸颊区域
  • for i in range(len(faces)):
  • landmarks = np.matrix([[p.x, p.y] for p in predictor(img, faces[i]).parts()])
  • for idx, point in enumerate(landmarks):
  • # 68点的坐标
  • pos = (point[0, 0], point[0, 1])
  • # ROI:脸颊区域
  • a = a.tolist() # 将矩阵转换成列表。
  • b = b.tolist()
  • a[idx] = point[0, 0]
  • b[idx] = point[0, 1]
  • a = np.array(a) # 将数据转化为矩阵
  • b = np.array(b)
  • # 额头区域
  • x1 = int(a[76])
  • y1 = int(b[19])
  • x2 = int(a[73])
  • y2 = int(b[73])
  • if (x1 < 0): # 防止人脸转动,x1位置超出图像
  • x1 = 0
  • forehead_ROI = img[y2:y1, x1:x2]
  • cv2.rectangle(img, (x1,y2), (x2,y1), (0,255,0), 1)
  • # cv2.imshow("forehead_ROI",forehead_ROI)
  • # cv2.waitKey()
  • # 脸颊区域
  • x1 = int((a[2] + a[4]) / 2)
  • y1 = int((b[2] + b[4]) / 2)
  • y2 = int((b[2] + b[23]) / 2)
  • x2 = int((a[12] + a[14]) / 2)
  • if (x1 < 0):
  • x1 = 0
  • cheek_ROI = img[y2:y1, x1:x2]
  • cv2.rectangle(img, (x1,y2), (x2,y1), (0,255,0), 1)
  • # cv2.imshow("cheek_ROI",cheek_ROI)
  • # cv2.waitKey()
  • # 检测整个人脸区域
  • for k, d in enumerate(faces):
  • [x1, x2, y1, y2] = [d.left(), d.right(), d.top(), d.bottom()]
  • face_ROI = img[y1:y2, x1:x2]
  • cv2.rectangle(img, (x1, y2), (x2, y1), (255, 0, 0), 1) # 蓝色
  • # cv2.imshow("face_ROI",face_ROI)
  • # cv2.waitKey()
  • cv2.imshow("ROI",img)
  • cv2.waitKey()

这个ROI区域确定是根据关键点索引,比较麻烦。引入imutils库,更加简单

查看imutils库使用

查看 face_utils的使用

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