python实现人脸关键部位检测

283 阅读2分钟

人脸特征提取

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

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

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

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

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模型和特征库进行检测。
CV2CV2CV2CV2CV2.imread(args["image"])
(h, w) = image.shape[:2]
width=500
r = width / float(w)
dim = (width, int(h * r))
image = .resize(image, dim, interpolation=.INTER_AREA)
gray = .cvtColor(image, .COLOR_BGR2GRAY)

#人脸检测rects = detector(gray, 1)
" class=" language-javascript">#加载人脸检测与关键点定位
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(args["shape_predictor"])

#读取输入数据,预处理
image =

遍历每个脸部关键点

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

shape = predictor(gray, rect)
shape = shape_to_np(shape)

遍历每一个部分,复制一个副本进行操作,将当前检测的类别标识在图像上。

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

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

CV2.circle(clone, (x, y), 3, (0, 0, 255), -1)
" class=" language-javascript">for (x, y) in shape[i:j]:

提取出该五官部位。

CV2CV2CV2.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 = .resize(roi, dim, interpolation=.INTER_AREA)
" class=" language-javascript">(x, y, w, h) =

最后展示出来即可。

CV2.imshow("ROI", roi)
CV2.imshow("Image", clone)
CV2.waitKey(0)
" class=" language-javascript">

最终效果

原图

脸部检测

全部五官检测

关键部位检测

推荐更多学习课程:

java基础:    Java300集课程-Java必备优质教程_手把手图解学习Java,让学习成为一种享受_

Python基础: Python入门大全套!更适合初学者的Python从业速成计划!两个月可上岗那种!

Java管理系统项目合集: 可以写在简历上的项目合集,2022最新版Java初阶实战项目合集

java游戏项目:  【Java项目】开发王者荣耀教程和素材全套合集,不到2小时用Java做出王者荣耀

前端基础: 超干货!一周时间搭出小米商城!Web前端零基础入门HTML5+css3,学搭网站看这篇就够了!