当前位置: 首页 > article >正文

【计算机视觉·OpenCV】使用Haar+Cascade实现人脸检测

前言

人脸检测的目标是找出图像中所有的人脸对应的位置,算法的输出是人脸的外接矩形在图像中的坐标。使用 haar 特征和 cascade 检测器进行人脸检测是一种传统的方式,下面将给出利用 OpenCV 中的 haarcascade 进行人脸检测的代码。

请添加图片描述

程序流程

请添加图片描述

代码

import cv2

# 原图
img = xxx

# 使用预训练模型创建 Cascade 分类器
getCascade = lambda model_name: cv2.CascadeClassifier(cv2.data.haarcascades + model_name)
faceCascade = getCascade("haarcascade_frontalface_default.xml")

# 获取原图像灰度图
imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 识别,将结果存储到 faces 变量中
faces = faceCascade.detectMultiScale(imgGray , 1.2 , 8)

for (x,y,w,h) in faces:
    
    # 将结果绘制到原图中
    cv2.rectangle(img, (x,y), (x+w,y+h), (0,0,255) ,2)

# 显示图像
cv2.imshow("img", img)
cv2.waitKey(0)

可选的人脸检测模型(区别是检测速度和精度不同):

  • haarcascade_frontalface_alt.xml
  • haarcascade_frontalface_alt2.xml
  • haarcascade_frontalface_alt_tree.xml
  • haarcascade_frontalface_default.xml
  • haarcascade_profileface.xml

说明:使用 haar 特征和 cascade 检测器进行目标检测属于传统机器学习的方式,检测精度较低,效果并不是非常理想

从图像中检测人脸

'''
Author: CloudSir
@Github: https://github.com/CloudSir
Date: 2023-04-05 10:03:53
LastEditTime: 2023-04-05 10:08:37
LastEditors: CloudSir
Description: 
'''
import cv2

# 原图
img = cv2.imread("./test.jpg")

# 使用预训练模型创建 Cascade 分类器
getCascade = lambda model_name: cv2.CascadeClassifier(cv2.data.haarcascades + model_name)
faceCascade = getCascade("haarcascade_frontalface_default.xml")

# 获取原图像灰度图
imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 识别,将结果存储到 faces 变量中
faces = faceCascade.detectMultiScale(imgGray , 1.2 , 8)

for (x,y,w,h) in faces:
    
    # 将结果绘制到原图中
    cv2.rectangle(img, (x,y), (x+w,y+h), (0,0,255) ,2)

cv2.imshow("img", img)
cv2.waitKey(0)

原图:
请添加图片描述
结果:
请添加图片描述

从视频中检测人脸

'''
Author: CloudSir
@Github: https://github.com/CloudSir
Date: 2023-04-03 19:50:34
LastEditTime: 2023-04-05 09:59:51
LastEditors: CloudSir
Description: 
'''
import cv2
import numpy as np

cap = cv2.VideoCapture("./test.mp4")

while cap.isOpened():
    img = cap.read()[1]
    getCascade = lambda model_name: cv2.CascadeClassifier(cv2.data.haarcascades + model_name)
    faceCascade = getCascade("haarcascade_frontalface_default.xml")
    imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(imgGray, 1.2, 8)

    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)
        print(x, y, w, h)

    cv2.imshow("cam", img)
    if cv2.waitKey(1) == ord('q'): # 按下q退出
        cv2.destroyAllWindows()
        cap.release()
        break

从摄像头中实时检测人脸

'''
Author: CloudSir
@Github: https://github.com/CloudSir
Date: 2023-04-03 19:50:34
LastEditTime: 2023-04-05 09:59:51
LastEditors: CloudSir
Description: 
'''
import cv2
import numpy as np

cap = cv2.VideoCapture(0)
while cap.isOpened():
    img = cap.read()[1]
    img = cv2.flip(img, 1) # 镜像

    getCascade = lambda model_name: cv2.CascadeClassifier(cv2.data.haarcascades + model_name)
    faceCascade = getCascade("haarcascade_frontalface_default.xml")
    imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(imgGray, 1.2, 8)

    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)
        print(x, y, w, h)

    cv2.imshow("cam", img)
    if cv2.waitKey(1) == ord('q'): # 按下q退出
        cv2.destroyAllWindows()
        cap.release()
        break


致正在学习计算机视觉的小伙伴们:

计算机视觉往往离不开 Python 语言,Python 是调用计算机视觉工具的必备语言,如 OpenCV、TensorFlow、PyTorch、PaddlePaddle 等都需要使用 Python。

如果你正打算学习计算机视觉,而恰巧又是一个 Python 新手,需要找一个可以在线学习的网站,我建议你去牛客网 ,他们的python题单是从最基础的输出、字符串格式化输出开始,经过运算符、列表、循环语句、条件语句、元组、字典、函数等知识点,一步一步教你慢慢学会Python那为数不多的基本语法,最后再配合上8道具有实践意义的综合实践题,可以帮你更加有效的巩固前面学会的知识。

  • 牛客网 - Python学习专区

在这里插入图片描述

加油,希望在计算机视觉这条路上的前方遇见你。


http://www.kler.cn/a/8239.html

相关文章:

  • C# 模拟浏览器自操作(自动化办公)
  • css:盒子模型
  • 【专题】计算机网络之网络层
  • K8资源之endpoint资源EP资源
  • 俏美韵从心出发,与女性一道为健康生活贡献力量
  • 量化交易系统开发-实时行情自动化交易-3.4.2.Okex行情交易数据
  • ESP32设备驱动-MLX90615红外测温仪驱动
  • Files的常用方法都有哪些?
  • 快速尝鲜Oracle 23c免费开发者版,惊喜多多
  • 分布式一致性协议
  • ctfshow web入门 爆破 21-28
  • P1011 [NOIP1998 提高组] 车站
  • Java设计模式 07-装饰者模式
  • 【Spring】2—IOC容器
  • 教你如何搭建物业-后勤管理系统,demo可分享
  • 静态路由的原理和配置(理论详细实验全面)
  • 周记录总结
  • 微积分——Rolle定理的理解(罗尔定理)
  • [Win32] 窗体暗色模式, C++, WinForm, WPF 使用方法, 判断颜色模式, 响应颜色变更消息, 设置标题栏暗色.
  • 初学对象存储OSS---学习笔记
  • CTP_将C++封装为Python可调用接口
  • Excel快捷键
  • CTF杂项提纲
  • leetcode每日一题:数组篇(1/2)
  • 乘法逆元讲解
  • 1004[递归]母牛的故事