detector = dlib.get_frontal_face_detector()

功能:人脸检测画框
参数:无
返回值:默认的人脸检测器

faces = detector(img_gray, 0)

功能:对图像画人脸框
参数:img_gray:输入的图片
返回值:人脸检测矩形框4点坐标。坐标为[(x1, y1) (x2, y2)]。可以通过函数的left,right,top,bottom方法分别获取对应的x1, x2, y1, y2值。(cv里的矩阵和C++的那种一样,左上角是(0,0)点,水平为x方向,竖直为y方向,类似笛卡尔系(区别是y轴正方向不同),所以top的y坐标 < bottom的y坐标。matplotlib是相反的。)

后面那个参数代表将原始图像是否进行放大,1表示放大1倍再检查,提高小人脸的检测效果。

                       

左图是参数为0的检测情况,右图是参数为1的检测情况。

上述例子参考自链接:http://blog.sina.com.cn/s/blog_49b3ba190102yvl9.html

注意dlib只能对灰度图进行检测:

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

注意更改当前文件运行目录 为 程序执行文件路径 的方法:

https://www.jb51.net/article/138980.htm

下面进行代码实战:

原图地址

代码实战1:人脸检测

import numpy
import dlib
import cv2
import sys
import os# 修改执行目录为该.py文件所在目录
#dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
dirname, filename = os.path.split(sys.argv[0])
# print(dirname,filename)
# path = os.getcwd()
os.chdir(dirname)
print(os.getcwd())# 人脸检测
detector = dlib.get_frontal_face_detector()# 人脸关键点标注。
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat'
)
img = cv2.imread('sdtw2.jpg')gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#这样也可以灰度图但是不建议用:im2 = cv2.imread('tfboys.jpg',flags = 0)faces = detector(gray,0)# 第二个参数越大,代表讲原图放大多少倍在进行检测,提高小人脸的检测效果。for face in faces:#左上角(x1,y1),右下角(x2,y2)x1, y1, x2, y2 = face.left(), face.top(), face.right(), face.bottom()print(x1,y1,x2,y2)cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.imshow("image", img)
cv2.waitKey(0)

运行结果:

代码实战2:人脸关键点标注

import numpy
import dlib
import cv2
import sys
import os#dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
dirname, filename = os.path.split(sys.argv[0])
# print(dirname,filename)
# path = os.getcwd()
os.chdir(dirname)
print(os.getcwd())# 人脸检测
detector = dlib.get_frontal_face_detector()# 人脸关键点标注。
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat'
)
img = cv2.imread('sdtw2.jpg')gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#这样也可以灰度图但是不建议用:im2 = cv2.imread('tfboys.jpg',flags = 0)dets = detector(gray,0)# 第二个参数越大,代表讲原图放大多少倍在进行检测,提高小人脸的检测效果。for d in dets:# 使用predictor进行人脸关键点检测 shape为返回的结果shape = predictor(gray, d)for index, pt in enumerate(shape.parts()):print('Part {}: {}'.format(index, pt))pt_pos = (pt.x, pt.y)cv2.circle(img, pt_pos, 1, (255, 0, 0), 2)                          #利用cv2.putText标注序号font = cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img, str(index+1),pt_pos,font, 0.3, (0, 0, 255), 1, cv2.LINE_AA)
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

实验结果:

人脸关键点:

附标号:

代码实战3:佩戴口罩

我们取2,8,14,28作为口罩关键点,即下图3,9,15,29,放入points_key中

对于待测图片的每一个人脸框,按照对应points_key来检测边界,将口罩图片进行缩放,填入对应区域。

注意对下载后的口罩要进行背景去除,这里可以用一些在线处理网站,或者ps等等。(本项目使用已去除背景的口罩已上传到github)

注意实现的时候,有个问题就是透明度的问题,不然会出现下面这个问题:

为了方便讲解,我们将口罩区域分成口罩图像区域,和口罩真实区域。

在代码实现的时候,刚开始只是想着分摊像素值,比如对口罩图像区域,让他80%保留原图像素值,20%来自口罩图像,这样进行merge。但是效果并不是期待的那样。

发现其实口罩部分还是要口罩占主体,所以换成了20%保留原图像素值,80%来自口罩图像,如下图。

剩下的就是透明度的问题了,这里我采用的是二值化方法,把像素值较小的背景部分隐去,像素值较大的是口罩真实区域,采用口罩图80%和人脸图20%进行merge。

阈值设置为80,表现良好。

此项目代码对应代码和实验所用到的图像均放到了github:https://github.com/xuanweiace/put_a_mask_on_the_face/

欢迎下载和star。

项目中是用二值化的方法来实验背景透明的功能,cv2中也自带了一个功能可以实现透明化处理,感兴趣的同学可以搜一下:

透明度覆盖:

img_mix = cv2.addWeighted(img1, 1, img2,1, 0) #合并,其中参数1表示透明度,第一个1表示img1不透明,第二个1表示img1不透明,如果改成0.5表示合并的时候已多少透明度覆盖。

相关拓展链接:

识别戴口罩的人脸的四种方法:https://blog.csdn.net/qq_23670601/article/details/104344917

【机器学习】 - 使用dlib进行人脸定位,人脸检测,给人脸图片戴口罩相关推荐

  1. 调用摄像头使用face_recognition 或 opencv中haar人脸特征实时检测识别人脸、给人脸打马赛克/给人脸贴图

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) OpenCV:python调用摄像头同时使用OpenCV中自带 ...

  2. python︱利用dlib和opencv实现简单换脸、人脸对齐、关键点定位与画图

    这是一个利用dlib进行关键点定位 + opencv处理的人脸对齐.换脸.关键点识别的小demo.原文来自于<Switching Eds: Face swapping with Python, ...

  3. 活体检测眨眼、张嘴、点头、摇头动作一网打尽:人脸面部活体检测系统【含Python源码+PyqtUI界面+原理详解】

    基本功能演示 摘要:活体检测是用于判断捕捉到的人脸是真实人脸,还是伪造的人脸攻击的一种技术手段.本文详细介绍了其实现的技术原理,同时给出完整的Python实现代码,并且通过PyQT实现了UI界面,更方 ...

  4. 人脸特征点检测(一)

    人脸特征点检测(Facial landmark detection),即人脸特征点定位.人脸对齐(Face Alignment),是在人脸检测的基础上进行的,对人脸上的特征点例如嘴角.眼角等进行定位. ...

  5. Pytorch实现戴口罩人脸检测和戴口罩识别(含训练代码 戴口罩人脸数据集)

    Pytorch实现戴口罩人脸检测和戴口罩识别(含训练代码 戴口罩人脸数据集) 目录 Pytorch实现戴口罩人脸检测和戴口罩识别(含训练代码 戴口罩人脸数据集) 1.戴口罩识别的方法 (1)基于多类别 ...

  6. 树莓派人脸识别_童话树莓派|(十一)进入AI世界人脸识别(防疫检测)

    童话树莓派 第十一集-进入AI世界-人脸识别(防疫检测) [人脸识别+口罩检测] 小朋友们,很快又见面了 今天我们继续进入AI人工智能世界,探寻人脸识别的奥秘 你看起来多少岁呢? 你看起来是男的还是女 ...

  7. 【英特尔杯记录】Python戴口罩人脸识别部分

    博主参加英特尔杯后,主要完成机器视觉相关代码的编写,首先是人脸识别 采用Dlib作为人脸检测分类器,对于戴口罩人脸也有较好的识别效果,最终将人脸图像上传至百度云人脸库,通过调用百度API进行人脸识别 ...

  8. 疫情加速百度人脸识别变革:戴口罩也能准确识别,迅速上线

    2020-03-20 11:49:14 十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 疫情之下,口罩识别有多难,问问你的iPhone用户朋友就知道了. 在"刷脸时代" ...

  9. 智能抗疫 | 戴口罩人脸数据助力科技防疫

    新冠肺炎疫情防控牵动着国人的心,同时也是中国科技实力的一次临场考验."提升科技防控疫情力度,积极为打赢疫情防控阻击战作出贡献."1月29日,国资委主任郝鹏表示.帮助安检及医护人员提 ...

最新文章

  1. 第六周读书笔记《浪潮之巅》
  2. 64位传参利用方法LibcSearcher使用入门ROPgadget利用
  3. MIPS下CPU和RAM的数据流动情况详解
  4. 程序猿永远就是程序员的命么?
  5. #一周五# VS2015 CTP6, TFS2015 CTP1更新,老衣的开发工具汇总,2015 MVP 社区巡讲...
  6. 牛客网编程题07--提取不重复的整数
  7. JavaScript学习总结(3)——JavaScript函数(function)
  8. 《『若水新闻』客户端开发教程》——10.代码编写(2)
  9. c# socket接收字符串_php 的 socket简单原理及实现
  10. linux下的screen工具配置(针对 string escape)
  11. 挨踢部落故事汇(2):机缘所致转型之路
  12. html怎么设置文字无法复制粘贴,网页文字无法复制粘贴怎么办
  13. 微型计算机MC定义,mc是什么意思
  14. 四、Echart图表 之 颜色color配置项大全
  15. VS2008假死点击无反应解决办法
  16. tkinter+爬虫实现有道翻译桌面软件
  17. qq飞车前瞻版服务器维护,QQ飞车手游前瞻版
  18. 大数据快速发展,离不开互联网、大计算和云数据的支持
  19. 16_开发工具IntelliJ IDEA
  20. We found potential security vulnerabilities in your dependencies. Only the owner of this reposito...

热门文章

  1. itext jsp页面打印
  2. 【数据结构与算法】【算法思想】拓扑排序
  3. codeup 1128: 出租车费 贪心|找规律
  4. python基础公式_一、Python基础(数据类型、基本函数、基本运算)
  5. visualvm远程监控jvm_大型企业JVM实战:优化及面试热点分析
  6. python数据预处理_Python数据预处理——缺失值、重复值
  7. Django框架里的MVC思想
  8. Linux下gSOAP的使用 (c++)
  9. C++设计模式之 简单工厂模式讲解(历史上最简单明白的例子)
  10. php原生session,利用Memcached在php下实现session机制 替换PHP的原生session支持