请选择 进入手机版 | 继续访问电脑版

[python] 超具体 解释 之OpenCV dlib实现人脸采集

[复制链接]
查看199 | 回复45 | 2021-9-13 11:47:04 | 显示全部楼层 |阅读模式

上一篇博客中,我们相识 了什么是面部标志,以及怎样 利用 dlib,OpenCV和Python检测它们。利用 dlib的HOG SVM的形状 猜测 器获得面部ROI中面部地区 的68个点(x,y)坐标。
这一篇博客中,将演示怎样 利用 NumPy数组切片把戏 来分别访问每个面部部分并提取眼睛,眉毛,鼻子,嘴巴和下巴的特性 。

1. 结果 图

先上一张检测完的图:

在这里插入图片形貌

也可以每一部分先标识出来:

在这里插入图片形貌

2. 原理

面部标志紧张 是: 口 右眉 左眉 右眼 左眼 鼻子 下颚线
这一节即提取这些部分;

在这里插入图片形貌

从图中可以看到假设是以0为下标的数组:

  1. 嘴唇可以认为是: points [48, 68]. 内嘴唇:[60,68]
  2. 右眉毛 points [17, 22].
  3. 左眉毛 points [22, 27].
  4. 右眼 [36, 42].
  5. 左眼 [42, 48].
  6. 鼻子 [27, 35].
  7. 下颌 [0, 17].
复制代码

已经知道下标,数组切片,并用不同的颜色来标识各个部位,imutils包,可以帮助我们更优雅的写代码的包;已经有封装好方法face_utils 。
嘴唇等是闭合地区 ,用闭合的凸包表示,下颌用线勾勒;

面部标志检测返回结果 是:68个(x,y)坐标:
(1)先转为得当 OpenCV处理的 Numpy array,
(2)数组切片,用不同的颜色标识不同的面部布局 部分;

3. 源码

  1. # 安装了dlib
  2. # imutils 是最新的版本
  3. # python detect_face_parts.py --shape-predictor shape_predictor_68_face_landmarks.dat --image images/girl.jpg
  4. from imutils import face_utils
  5. import numpy as np
  6. import argparse
  7. import imutils
  8. import dlib
  9. import cv2
  10. import shutil
  11. import os
  12. # 构建命令行参数
  13. # --shape-predictor 必须 形状检测器位置
  14. # --image 必须 待检测的图片
  15. ap = argparse.ArgumentParser()
  16. ap.add_argument("-p", "--shape-predictor", required=True,
  17. help="path to facial landmark predictor")
  18. ap.add_argument("-i", "--image", required=True,
  19. help="path to input image")
  20. args = vars(ap.parse_args())
  21. temp_dir = "temp"
  22. shutil.rmtree(temp_dir, ignore_errors=True)
  23. os.makedirs(temp_dir)
  24. # 初始化dlib中基于HOG的面部检测器,及形状预测器
  25. detector = dlib.get_frontal_face_detector()
  26. predictor = dlib.shape_predictor(args["shape_predictor"])
  27. # 加载待检测的图片,resize,并且装换为灰度图
  28. image = cv2.imread(args["image"])
  29. image = imutils.resize(image, width=500)
  30. gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  31. # 在灰度图中检测面部
  32. rects = detector(gray, 1)
  33. # 循环检测到的面部
  34. num = 0
  35. for (i, rect) in enumerate(rects):
  36. # 确定面部区域进行面部标志检测,并将其检测到的68个点转换为方便python处理的Numpy array
  37. shape = predictor(gray, rect)
  38. shape = face_utils.shape_to_np(shape)
  39. # 循环遍历面部标志独立的每一部分
  40. for (name, (i, j)) in face_utils.FACIAL_LANDMARKS_IDXS.items():
  41. # 复制一张原始图的拷贝,以便于绘制面部区域,及其名称
  42. clone = image.copy()
  43. cv2.putText(clone, name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX,
  44. 0.7, (0, 0, 255), 2)
  45. # 遍历独立的面部标志的每一部分包含的点,并画在图中
  46. for (x, y) in shape[i:j]:
  47. cv2.circle(clone, (x, y), 1, (0, 0, 255), -1)
  48. # 要实际提取每个面部区域,我们只需要计算与特定区域关联的(x,y)坐标的边界框,并使用NumPy数组切片来提取它:
  49. (x, y, w, h) = cv2.boundingRect(np.array([shape[i:j]]))
  50. roi = image[y:y + h, x:x + w]
  51. # resize ROI区域为 宽度250,以便于更好的可视化
  52. roi = imutils.resize(roi, width=250, inter=cv2.INTER_CUBIC)
  53. # 展示独立的面部标志
  54. cv2.imshow("ROI", roi)
  55. cv2.imshow("Image", clone)
  56. cv2.waitKey(0)
  57. num = num + 1
  58. p = os.path.sep.join([temp_dir, "{}.jpg".format(
  59. str(num).zfill(8))])
  60. print('p: ', p)
  61. cv2.imwrite(p, output)
  62. # 应用visualize_facial_landmarks 功能为每个面部部位创建透明的覆盖层。(transparent overlay)
  63. output = face_utils.visualize_facial_landmarks(image, shape)
  64. cv2.imshow("Image", output)
  65. cv2.waitKey(0)
复制代码

参考

https://www.pyimagesearch.com/2017/04/10/detect-eyes-nose-lips-jaw-dlib-opencv-python/

到此这篇关于超具体 表明 之OpenCV dlib实现人脸采集的文章就先容 到这了,更多相干 OpenCV 人脸采集内容请搜索 脚本之家从前 的文章或继续欣赏 下面的相干 文章盼望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 阿拉斯加他爸爸 | 2021-9-13 14:42:46 | 显示全部楼层
东方不败外加灭绝师太啊!
回复

使用道具 举报

avatar 慧眼识英雄1 | 2021-9-13 14:42:47 | 显示全部楼层
admin楼主今年多大了?
回复

使用道具 举报

avatar 涵宸霖 | 2021-9-27 01:18:38 | 显示全部楼层
今天皮痒了?
回复

使用道具 举报

avatar Lieutenant555 | 2021-9-30 04:19:52 | 显示全部楼层
顶!顶!顶!
回复

使用道具 举报

avatar 乔峰之逆风痰 | 2021-10-2 08:12:39 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的源码论坛他的站点都是商业源码,还是免费下载的那种!特别好用。访问地址:http://www.mxswl.com 猫先森网络
回复

使用道具 举报

avatar 陈辞滥调 | 2021-10-3 20:06:59 | 显示全部楼层
这一年啥事没干,光研究admin楼主的帖子了!
回复

使用道具 举报

avatar 厕层柴 | 2021-10-3 21:47:23 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的源码论坛他的站点都是商业源码,还是免费下载的那种!特别好用。访问地址:http://www.mxswl.com 猫先森网络
回复

使用道具 举报

avatar 马小心小a | 2021-10-3 22:23:37 | 显示全部楼层
最近精神病院在打折,admin楼主去看看吧?
回复

使用道具 举报

avatar 里脊鱼鱼si | 2021-10-4 09:53:29 | 显示全部楼层
admin楼主就是我的榜样哦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则