基于opencv的人脸检测

本文涉及的产品
视觉智能开放平台,视频资源包5000点
视觉智能开放平台,图像资源包5000点
视觉智能开放平台,分割抠图1万点
简介: 基于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


相关文章
|
6月前
|
算法 计算机视觉
OpenCV(四十三):Shi-Tomas角点检测
OpenCV(四十三):Shi-Tomas角点检测
86 0
|
6月前
|
存储 资源调度 算法
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
348 0
|
1月前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
96 1
|
1月前
|
机器学习/深度学习 计算机视觉
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
本文介绍了如何使用OpenCV进行特定区域的目标检测,包括人脸检测实例,展示了两种实现方法和相应的代码。
65 1
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
|
5月前
|
机器学习/深度学习 Java 开发工具
【移花接木】OpenCV4.8 For Java 深度学习 实时人脸检测
【移花接木】OpenCV4.8 For Java 深度学习 实时人脸检测
105 0
|
1月前
|
算法 计算机视觉 Python
圆形检测算法-基于颜色和形状(opencv)
该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。
75 0
|
4月前
|
机器学习/深度学习 传感器 算法
OpenCV4工业缺陷检测的六种方法
OpenCV4工业缺陷检测的六种方法
|
5月前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
95 0
|
6月前
|
数据采集 Java 数据挖掘
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
|
5月前
|
监控 安全 计算机视觉
实战 | 18行代码轻松实现人脸实时检测【附完整代码与源码详解】Opencv、人脸检测
实战 | 18行代码轻松实现人脸实时检测【附完整代码与源码详解】Opencv、人脸检测

热门文章

最新文章

下一篇
无影云桌面