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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】 - import cv2 opencv安装python

果然不出我所料&#xff0c;直接pip就出了很多奇奇怪怪的错误&#xff0c;还是用清华镜像吧 输入&#xff1a;pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 安装完后&#xff0c;重启spyder即可使用。 下载方法2&#xff1a; 下载地址&#xff1a…

Sharepoin学习笔记—架构系列—Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 2

上一篇我们以问答的方式明确了Sharepoint服务的一些概念&#xff0c;这里我们重点来看两个方面:Sharepoint服务器构架对象模型以及Sharepoint 服务应用程序的某些拓扑结构 一、Sharepoint服务器构架对象模型 二、Sharepoint 服务应用程序的某些拓扑结构 Sharepoint 服务应用程…

【深度学习】 - MobileNet使用的可分离卷积

任何看过MobileNet架构的人都会遇到可分离卷积&#xff08;separable convolutions&#xff09;这个概念。但什么是“可分离卷积”&#xff0c;它与标准的卷积又有什么区别&#xff1f;可分离卷积主要有两种类型&#xff1a; 空间可分离卷积&#xff08;spatial separable con…

SharePoint 2010 WSP包部署过程中究竟发生什么?

在SharePoint 2010中&#xff0c;我们可以使用Visual Studio 2010轻松创建WSP包来安装Web Part&#xff0c; Event Handler&#xff0c; Application Page以及其他。非常方便&#xff0c;但是你有没有研究过在在整个过程中SharePoint究竟做了些什么&#xff1f;以下是我根据htt…

【机器学习】 - 目标检测 - VOC格式数据集介绍与自己制作

一、VOC数据集 PASCAL VOC 挑战赛主要有 Object Classification 、Object Detection、Object Segmentation、Human Layout、Action Classification 这几类子任务。每年都有新的数据集供参赛者进行训练。公布了2007和2012两年的数据集&#xff0c;分别称之为VOC2007和VOC2012&am…

【Python学习】win10+Anaconda3环境,安装phthon第三方库Jieba

一、介绍 jieba库是一款优秀的 Python 第三方中文分词库&#xff0c;jieba 支持三种分词模式&#xff1a;精确模式、全模式和搜索引擎模式&#xff0c;下面是三种模式的特点。 精确模式&#xff1a;试图将语句最精确的切分&#xff0c;不存在冗余数据&#xff0c;适合做文本分…

【PAT甲级最新题解】PAT甲级2020.7月春季考试满分题解(附代码)

写在前面&#xff1a;这次题目虽然大多数是模拟题且不算难&#xff0c;但是题面其实不算友好&#xff0c;不少同学因为题目描述而错失满分。 A&#xff1a; 题意&#xff1a;给定一个数字串&#xff0c;问每一个前缀串是否是素数。 模拟题不多解释。 #include<cstdio>…

SharePoint PowerShell命令系列

(1) Backup-SPSite & Restore-SPSite 这两条命令可能是大家最先接触的PowerShell命令了吧, 一个是备份网站集, 另一个是还原网站集. Backup-SPSite 例子 Backup-SPSite http://site_name -Path C:\Backup\site_name.bak 参数 Force: 覆盖现有备份NoSiteLock: 设置备份…

【Processing学习】 - 公交车马路动态绘制

效果图: 汽车动态移动,云彩动态移动,小草没有找到矢量图,百度了一张先用着. float q 0; int s 0; int add 1;PImage p1;void setup() {size(800, 400);background(0, 0, 255);rect(300, 150, 300, 140, 30);//sunfill(255, 255, 0);circle(800, 0, 40);first//circle(360,…

Qt 5.14 安装,windows10系统,64位,详细步骤,非常简单!

下载地址&#xff1a;http://download.qt.io/archive/qt/5.14/5.14.2/ 直接选择windows系统或mac兄或Linux系统对应版本即可。 这里解释一下 Qt 的版本号&#xff0c;比如 5.14.2 是完整的 Qt 库版本号&#xff0c;第一个数字 5 是大版本号&#xff08;major&#xff09;&…

2023年12月16日~12月22日(自适应反馈机制下基于卷积神经网络的高清晰反射波反演算法:CNN-RWI)

标题&#xff1a;Adaptive Feedback Convolutional-Neural-Network-Based High-Resolution Reflection-Waveform Inversion 全波形反演&#xff08;FWI&#xff09;是一种非线性拟合观测地震记录从而获得高清晰速度模型的最优化算法。FWI能够通过拟合浅层初至波和反射波获得较准…

SharePoint 2016文档库所在数据库表的说明(文档库数据库)

突然被客户问一个问题&#xff0c;说数据库存在哪一个表&#xff0c;这个原本是开发的事&#xff0c;竟然文档我了&#xff0c;好吧这里记录一下&#xff0c;以便记忆给客户汇报。 SharePoint 数据库表说明&#xff1a; FeaturesTable that holds information about all the …

SharePoint 2013 RBS(Remote BLOB Storag) 安装、部署、垃圾回收

SharePoint 承担着文件管理的工作&#xff0c;默认都是将它们以BLOB的数据形式存储在内容数据库当中&#xff1b;当文件大时&#xff0c;就很容易导致数据库容量被这些BLOB数据所快速消耗&#xff0c;而且频繁地对这些大数据量的BLOB数据进行读写访问&#xff0c;很容易在SQL端…

Processing 闪烁的圆 动画效果

打开Processing,CtrlR运行. 运行效果 : class myRect {float x,y;float r,a;//banjing secai bianhua myRect(float x, float y, float r,float a) {this.x x;this.y y;this.r r;this.a a;}void chang(){this.a 0.02;} void display() {stroke(255);fill(120-120*cos(a…

用生动的例子花式解释:python类中一定需要有 __init__方法么?没有会怎样?

python 类中一定需要有 __init __方法么&#xff1f;没有的会怎样&#xff1f; 在回答这个问题之前&#xff0c;先说两个问题&#xff1a;① 面向对象编程&#xff1f; ② 什么是类&#xff1f; 面向对象&#xff0c;先上一个正式点的解释&#xff1a; “把一组数据结构和处…

Anaconda安装绘图模块altair

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple altair

MOSS/Sharepoint RBS概念以及运用

注&#xff1a;原文作者不知道是谁&#xff0c;先收藏了这篇&#xff08;若有侵权&#xff0c;请留言&#xff0c;删除&#xff09; EBS -> External Blob Storage 外部大二进制对象存储 RBS -> Remote Blob Storage 远程大二进制对象存储 这俩概念据我所知&#xff0c;…

【Python学习】 - 超详细的零基础Pandas学习(附Python数据分析与应用课本第四章实训答案)

&#xff08;博文体系参考&#xff1a;《Python数据分析与应用》课本&#xff09; 任务数据如下&#xff1a; 读入csv文件时&#xff0c;encoding必须是正确的&#xff0c;常用的编码格式有&#xff1a;UTF-8 , UTF-16 , GBK , GB2312 , GB18030等。 如果和文件的编码格式不符…

win10,配置环境变量时系统环境变量和用户环境变量的优先级

关于%%中间夹着的东西&#xff0c;比如%AppData%的路径&#xff0c;是在注册表中可以修改的&#xff0c;用户也可以自定义这种%...%&#xff0c;相当于你定义了一个路径常量&#xff0c;定义方法也是去系统的环境变量中去添加即可。 比如一般常用%JAVAHOME%这种。 参考文章&a…

sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系**

1.一个数据库用户可以对应多个架构&#xff08;架构是表容器&#xff09;。架构里面包含的是数据库表。 2.一个数据库角色有可能涉及多个架构。数据库角色对应的是权限。 3.一个用户对应一个数据库角色。 4.登录名与数据库用户在服务器级别是一对多的&#xff1b;在数据库级…