文章目录

  • 一、环境
  • 二、使用Haar级联进行人脸检测
  • 三、Haar级联结合摄像头
  • 四、使用SSD的人脸检测
  • 五、 SSD结合摄像头人脸检测
  • 六、结语

一、环境

pip install opencv-python

python3.9
pycharm2020
人狠话不多,直接上代码,注释在代码里面,不说废话。

二、使用Haar级联进行人脸检测

测试案例:

代码:(记得自己到下载地址下载对应的xml)

# coding=gbk
"""
作者:川川
@时间  : 2021/9/5 16:38
https://github.com/opencv/opencv/tree/master/data/haarcascades
"""
import cv2# 待检测的图片路径
imagepath="2.jpg"image = cv2.imread(imagepath)#读取图片
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#图像转换为灰度图:face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')#加载使用人脸识别器faces = face_cascade.detectMultiScale(gray)#检测图像中的所有面孔#为每个人脸绘制一个蓝色矩形
for x, y, width, height in faces:# 这里的color是 蓝 黄 红,与rgb相反,thickness设置宽度cv2.rectangle(image, (x, y), (x + width, y + height), color=(255, 0, 0), thickness=2)# 最后,让我们保存新图像
cv2.imwrite("beauty_detected.jpg", image)

效果:

效果可以看出这个效果并不是很好。

三、Haar级联结合摄像头

代码:(还是用的前面得xml)

# coding=gbk
"""
摄像头人脸识别
作者:川川
@时间  : 2021/9/5 17:15
Haar级联结合摄像头
"""
import cv2#创建新的cam对象
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
#初始化人脸识别器(默认的人脸haar级联)
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')while True:# 从摄像头读取图像_, image = cap.read()# 转换为灰度image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 检测图像中的所有人脸faces = face_cascade.detectMultiScale(image_gray, 1.3, 5)# 为每个人脸绘制一个蓝色矩形for x, y, width, height in faces:cv2.rectangle(image, (x, y), (x + width, y + height), color=(255, 0, 0), thickness=2)cv2.imshow("image", image)if cv2.waitKey(1) == ord("q"):breakcap.release()
cv2.destroyAllWindows()

效果:

四、使用SSD的人脸检测

代码:

# coding=gbk
"""
图片人脸识别
作者:川川
@时间  : 2021/9/5 17:22
"""
import cv2
import numpy as np
# 下载链接:https://raw.githubusercontent.com/opencv/opencv/master/samples/dnn/face_detector/deploy.prototxt
prototxt_path = r"./deploy.prototxt.txt"
# 下载链接:https://raw.githubusercontent.com/opencv/opencv_3rdparty/dnn_samples_face_detector_20180205_fp16/res10_300x300_ssd_iter_140000_fp16.caffemodel
model_path =r"./res10_300x300_ssd_iter_140000_fp16.caffemodel"
model = cv2.dnn.readNetFromCaffe(prototxt_path, model_path)
image = cv2.imread("2.jpg")
h, w = image.shape[:2]
blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300),(104.0, 177.0, 123.0))
model.setInput(blob)
output = np.squeeze(model.forward())
font_scale = 1.0
for i in range(0, output.shape[0]):confidence = output[i, 2]if confidence > 0.5:box = output[i, 3:7] * np.array([w, h, w, h])start_x, start_y, end_x, end_y = box.astype(np.int)cv2.rectangle(image, (start_x, start_y), (end_x, end_y), color=(255, 0, 0), thickness=2)cv2.putText(image, f"{confidence*100:.2f}%", (start_x, start_y-5), cv2.FONT_HERSHEY_SIMPLEX, font_scale, (255, 0, 0), 2)
cv2.imshow("image", image)
cv2.waitKey(0)
cv2.imwrite("beauty_detected.jpg", image)

效果:

我们可以看到现在的识别效果非常好了。

五、 SSD结合摄像头人脸检测

代码:

# coding=gbk
"""
作者:川川
@时间  : 2021/9/5 17:26
SSD结合摄像头的人脸检测
"""
import cv2
import numpy as np
prototxt_path = "deploy.prototxt.txt"
model_path = "res10_300x300_ssd_iter_140000_fp16.caffemodel"
model = cv2.dnn.readNetFromCaffe(prototxt_path, model_path)
cap = cv2.VideoCapture(0)
while True:_, image = cap.read()h, w = image.shape[:2]blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300), (104.0, 177.0, 123.0))model.setInput(blob)output = np.squeeze(model.forward())font_scale = 1.0for i in range(0, output.shape[0]):confidence = output[i, 2]if confidence > 0.5:box = output[i, 3:7] * np.array([w, h, w, h])start_x, start_y, end_x, end_y = box.astype(np.int)cv2.rectangle(image, (start_x, start_y), (end_x, end_y), color=(255, 0, 0), thickness=2)cv2.putText(image, f"{confidence*100:.2f}%", (start_x, start_y-5), cv2.FONT_HERSHEY_SIMPLEX, font_scale, (255, 0, 0), 2)cv2.imshow("image", image)if cv2.waitKey(1) == ord("q"):break
cv2.destroyAllWindows()
cap.release()

效果:

可以发现SSD效果特别好!

六、结语

如果你想更深了解这些原理,去读一下opencv文档吧,中文官方文档如下:

https://woshicver.com/

在很多人调用xm会遇到一些坑,我在这里说一下,读取xml的时候用相对路径./这种,参考我的,建议不要路径中出现中文,其它没啥了。如果对你有帮助,三连支持一下,谢谢。

手把手教你opencv做人脸识别(附源码+文档)相关推荐

  1. 【毕业设计】基于ssm的演唱会订票管理系统,订票管理系统,网上演唱会票务系统,票务管理系统,附源码+文档+PPT

    1.项目介绍 基于ssm的演唱会订票管理系统,订票管理系统,网上演唱会票务系统,票务管理系统. 系统中的核心用户是系统管理员,管理员登录后,主要功能有管理员信息管理.网站用户管理.新闻公告信息管理.演 ...

  2. 【java家教系统】手把手教你制作计算机毕业设计(附源码+课件)

    很多大四同学苦于没有参考的毕设资料,或者下载的资料不全.代码有问题,数据有问题等等,造成毕设出现问题影响大学毕业.现在,免费提供项目源码和视频教程,让大家在短时间内可以完成自己的毕业设计. 对于jav ...

  3. Java项目—健身房管理系统(附源码+文档)

    今天给大家分享一个Java实战项目-健身房管理系统(附源码+数据库+文档) 需要资料源码的小伙伴可以点击下方链接和小编一起学习~ 需要源码直接私信小编哟~https://www.bilibili.co ...

  4. 【Golang项目实战】手把手教你写一个备忘录程序|附源码——建议收藏

    博主简介:努力学习的大一在校计算机专业学生,热爱学习和创作.目前在学习和分享:数据结构.Go,Java等相关知识. 博主主页: @是瑶瑶子啦 所属专栏: Go语言核心编程 近期目标:写好专栏的每一篇文 ...

  5. java毕业设计-大学生实习管理系统 实习申请系统【附源码+文档】

  6. Java项目-坦克大战(附源码+文档)

    今天给小伙伴们分享一个坦克大战游戏的详细编写流程,即使你是刚入门java的新手,只要你简单掌握了该游戏所需要的javase基础知识,便可以跟随教程视频完成属于你自己的坦克大战游戏!同时还可以加深和巩固 ...

  7. 基于java+SSM+校园BBS论坛项目(附源码+文档+PPT)

  8. 基于SpringBoot+Vue心理咨询系统 大学生心理建设网站(附源码+文档)

  9. 视频教程-手把手搭建Java金融借贷系统【附源码】(毕设)-Java

    手把手搭建Java金融借贷系统[附源码](毕设) 南京大学软件工程硕士,全栈开发工程师,全栈讲师. 曾就职于中软国际.擎天科技.华为等公司,擅长Java开发.Web前端.Python爬虫.PHP等领域 ...

  10. 手把手搭建Java金融借贷系统【附源码】(毕设)

    一.项目简介 本课程演示的是一套基于基于JavaWeb实现的金融借贷系统 或 P2P金融管理系统 或 小额贷款系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群. 详细介绍 ...

最新文章

  1. 盘点智能语音行业:Nuance没落 BAT围绕核心业务
  2. arm oe linux gnueabi 系统,【技术分享】Quectel 4G模块Opencpu中实现高通wifi功能
  3. Spring AOP XML配置及注解配置
  4. 移植 uC/OS-III 到 STM32
  5. 计算机二级网址打不开,大神为你解决win7系统打不开二级网页链接的操作教程...
  6. QT保留小数点后位数
  7. Kettle:创建资源库
  8. 测试es from size error,from + size must be less than or equal to: [10000]异常问题
  9. 基本知识 100028
  10. 小程序实现保存图片到手机
  11. 【Pic】图片怎么去除马赛克?
  12. 作文 我眼中的计算机1000字,我眼中的自己作文范文1000字(精选6篇)
  13. sdkman 的酷炫 Logo 欢迎界面: 安装 kscript (Kotlin Shell)
  14. 画外因 | 笛卡尔与瑞典女王在 “数学课”上谈人生
  15. java远控_基于java的远程控制 示例源码
  16. adguard没有核心 core no_树莓派安装AdGuard Home屏蔽广告
  17. 安卓手机测评_2018最全安卓模拟器跑分测评
  18. 关于Xftp7的下载和安装
  19. html自动适应屏幕分辨率,关于HTML的屏幕分辨率适配的方法,求主流HTML自适应方法。...
  20. 谷歌浏览器不能登录同步

热门文章

  1. Delphi2010
  2. 《算法设计与分析》期末不挂科
  3. 嵌入式Linux必读经典书籍
  4. 怎样用计算机绘制幂函数图像,几何画板如何画幂函数的图像
  5. 人工智能究竟能否实现?
  6. 如何下载vue.js
  7. 学习笔记(3):掌握JQuery视频教程-jquery选择器03
  8. Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!
  9. 实践的意义——写给图像处理算法爱好者的建议
  10. 计算机体系结构和计算机组成原理