基于opencv的人脸检测

简介: 基于opencv的人脸检测

引言

这篇文章,让你用短短的16行代码基于opencv检测一张图片上的人脸,很有意思,快快学起来吧!

一、代码

先将代码直接粘在下面:

1. import cv2 as cv
2. 
3. 
4. def face_detect_demo(img):
5.     img = cv.resize(img, dsize=(800, 800))
6.     gary = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
7.     face_detect = cv.CascadeClassifier("D:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml")
8.     face = face_detect.detectMultiScale(gary, 1.004, 28, 0, (40, 40), (50, 50))
9. for x, y, w, h in face:
10.         cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 225), thickness=4)
11.     cv.imshow("result", img)
12. # img.save("result.jpg")  # 保存图片
13.     cv.imwrite(r"final_result.jpg", img)
14. 
15. img = cv.imread("photo.jpg")
16. face_detect_demo(img)  # 检测单个图片
17. 
18. while True:
19. if ord("q") == cv.waitKey(1):
20. break
21. cv.destroyAllWindows()

二、运行效果

原图片:

识别之后的图片(得自己调参):

三、代码解读

  • 首先导入我们所需要的必要包opencv,对应指令为import cv2 as cv,这里的as就相当于给这个模块起了个别名。如果读者opencv还没有安装的话,可以在终端里面pip install opencv,还不行的话可以看看这个教程:Opencv安装小白教程
  • 首先,我们定义一个函数face_detect_demo,这个函数有一个参数img,即我们要检测的图片,这是一个形参。
  • 调用cv里面的函数resize,改变图片的大小。resize第一个参数是要处理的图片,第二个参数是你想要改成图片的大小,这里的(800,800)就是改成800*800的这样一张图片。处理的结果再返回给img,当然,如果你喜欢的话也可以另外设一个变量,传进去。
  • 接下来更改图片颜色,直接调用cvtColor函数,同样,第一个参数是要处理的图片,第二个参数是要更改的颜色类型,这里的颜色类型有很多种,我这里设置的是COLOR_BGR2GRAY类型。
  • 前两步,你可以理解为将图片标准化,即传入不同大小,不同颜色的图片可以转化成同一大小,同一颜色类型的图片。这样的操作好处在于后面调参数更容易。
  • 重头戏来了!,这是opencv官方已经训练好的一个人脸检测模型,直接调用就可以,非常方便!文章最后有文件和代码提取链接,也有一些其他训练好的模型,如果感兴趣的话你也可以试一试其他模型。
  • 接着,我们检测图片中的人脸,face_detect.detectMultiScale,就是调用模型里面的detectMultiScale。第一个参数gray是要处理的图片,第二个参数是,第三个参数28意思是检测的时候,30次都在同一个位置检测到人脸;这个值高,模型就需要反复验证。第四个参数是。第五个参数是最小矩形框大小,第六个参数是最大矩形框大小。这六个参数需要自己去调,以求最佳匹配。detectMultiScale方法会直接用该模型检测图片,并返回多个x,y,w,h。(x,y)是左顶点的坐标,w是矩形框的宽度,h是矩形框的高度。
  • for循环的功能就是在原来的图片上面绘制矩形框啦,对应的函数是cv.rectangle,这里面的参数很简单就不一一介绍了。
  • cv.imshow进行展示,cv.imwrite进行保存,注意imwrite保存图片时,命名要加上.jpg
  • 函数到此结束,接下来是调用函数:
  • 首先读取图片,由于我把程序和图片放在一个文件夹,可以直接用名字去读,如果你没有放在一个文件家里面,要用绝对路径去读取。
  • 调用上面写好的函数去检验人脸
  • 最后做一个键盘的关联事件退出,,按下键盘q键会退出循环,程序结束。别忘了用cv.destroyAllWindows销毁所以窗口哦。

四、一些思考

我感觉这是一个很有意思的demo,虽然没有什么技术含量,没有数据获取,数据处理,数据训练,模型验证…但是,他能让我们看到cv的强大,如果计算机视觉没有opencv,很多简单的功能将变得复杂,当opencv+openmv,我们能做很多我们感兴趣的事。

回到这个人脸检测里面去,为什么叫人脸检测不叫人脸识别呢?因为这个demo只能够知道图片里有几个人,至于他们到底分别是谁就没有办法知道了。

如果加上神经网络又会怎么样呢?比如现在我有A这个人的大量图片,用神经网络进行训练,让计算机能够认出他。那么在一张合照里面,计算机能够很快认出哪个是A,并把他框选出来。

那么到底有什么用呢?畅想未来:

现在有很多重要犯罪嫌疑人逍遥法外,如果能将他的人脸数据训练出来的模型传到全国各地的摄像头中,无论在哪,只要摄像头检测到他的人脸就把地址信息发回警局,这样是不是就能即使抓捕他。

儿童拐卖同样是一个社会热点,现在也有很多网站在帮助找被拐卖的儿童。父母主要是通过网站上上传的照片去猜测这到底是不是他的孩子。但是很多照片都是孩子被拐卖两三年甚至五年十年之后的照片了,就连是亲生父母都很难辨认。如果能用深度学习,强化学习,根据小时候的照片训练出来的模型去匹配网站上的照片,将匹配结果高的反馈给父母,这样父母和子女是不是更容易重逢呢?当然这只是我的猜想。

人脸作为我们的生物密码给我们带来了不少便利,比如说手机一键解锁,支付宝一键支付,各种门禁刷脸进入。“刷脸”逐渐渗透到我们生活,我们的人脸数据不断传入互联网中,互联网的数据库越来越丰富,对应背后的产业链也越来越发达,面部识别并不是一项全新的技术,但人工智能和机器学习不断使面部识别变得更强大。

文件链接:

https://pan.baidu.com/s/1FV3NWT3Vayq3eKq2QsB3mg?pwd=tsvd 

提取码:tsvd


相关文章
|
4月前
|
算法 IDE 开发工具
OpenCV常用的 7 个示例:从读取到人脸检测(Python版)
OpenCV常用的 7 个示例:从读取到人脸检测(Python版)
|
7月前
|
计算机视觉 C++ Python
OpenCV人脸检测打卡系统
OpenCV人脸检测打卡系统
54 0
|
4月前
|
XML 算法 计算机视觉
使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)
使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)
105 1
|
1月前
|
前端开发 Java Maven
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
183 0
|
4月前
|
编解码 计算机视觉 Ruby
Python图像处理(二)opencv人脸检测
人脸检测部分,我们需要使用到opencv,看清楚,是opencv,不是opencv_python 首先,我们打开opencv的官网:opencv.org/# 当然,纯英文的。 我们找到library目录下的release目录: 选择你需要的版本,下载对应的平台就好。如下图所示,我当然要尝试最新版的了。 下载完成之后,双击安装就可以了。 我理解的人脸检测呢,其实就是opencv根据采集到的图像与其库中预置的人脸特征去比对,有符合人脸特征的,就说明采集到的图像是有人脸的。初学,我也不清楚我说的是否正确。 有不对的地方,欢迎大佬指出。
49 0
|
8月前
|
文字识别 算法 IDE
OpenCV常用的 7 个示例:从读取到人脸检测(Python版)
OpenCV常用的 7 个示例:从读取到人脸检测(Python版)
|
11月前
|
机器学习/深度学习 人工智能 算法
LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测(含源码)
LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测
227 0
LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测(含源码)
|
机器学习/深度学习 算法 Shell
基于opencv卷积网络实现人脸检测和性别分类 附项目代码
基于opencv卷积网络实现人脸检测和性别分类 附项目代码
96 0
基于opencv卷积网络实现人脸检测和性别分类 附项目代码
|
机器学习/深度学习 数据可视化 计算机视觉
人脸检测实战高级:使用 OpenCV、Python 和 dlib 完成眨眼检测
今天,我们使用面部标记和 OpenCV 检测视频流中的眨眼次数。 为了构建我们的眨眼检测器,我们将计算一个称为眼睛纵横比 (EAR) 的指标,该指标由 Soukupová 和 Čech 在他们 2016 年的论文《使用面部标记的实时眨眼检测》中介绍。
364 0
人脸检测实战高级:使用 OpenCV、Python 和 dlib 完成眨眼检测
|
算法 数据处理 开发工具

热门文章

最新文章