opencv基于Haar人脸检测和眼睛检测

OpenCV基于Haar人脸检测和眼睛检测攻略

OpenCV是一个功能强大的开源计算机视觉库,可以用于图像和视频处理。其中,基于Haar特征的人脸检测和眼睛检测是OpenCV中的一个经典应用,本文将介绍这一应用的完整攻略。

步骤1:安装OpenCV

首先,我们需要在本地电脑上安装OpenCV库。具体可参考OpenCV官网的安装教程:https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html

步骤2:收集训练数据

在进行人脸检测和眼睛检测之前,我们需要使用大量的训练数据来训练Haar分类器。训练数据可以是正样本和负样本的集合,其中正样本是包含人脸和眼睛的图像,负样本则是一些随机的图像,不包含人脸和眼睛。

我们可以从国际上公开的数据集中下载训练数据。例如:LFW数据集、WIDER FACE数据集、FDDB数据集等。

步骤3:训练Haar分类器

OpenCV提供了一个名为Cascade Trainer GUI的工具,可以用于训练Haar分类器。 使用该工具时,需要为训练数据设置标签,并指定Haar特征、正负样本的数量等相关参数。可以在命令行中运行以下命令来打开该工具:

opencv_createsamples -info your_path/info.txt -num 1000 -w 48 -h 48 -vec your_path/your_samples.vec
opencv_traincascade -data your_path -vec your_path/your_samples.vec -bg your_path/bg.txt -numPos 1000 -numNeg 500 -numStages 20 -w 24 -h 24

这个命令会先用正样本生成vec文件,然后用vec数据和负样本,开始训练Harr分类器,经过N个阶段的训练后,最终生成xml文件,即为完成训练。

步骤4:使用Haar分类器进行人脸检测和眼睛检测

通过使用OpenCV中的Haar分类器,可以在输入图像或视频中进行实时人脸和眼睛检测。下面是基于Python和OpenCV的代码实现示例:

import cv2

# 加载训练好的Haar分类器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

# 读取图像
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 进行人脸检测
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5)

# 遍历检测到的所有人脸
for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    # 对于每张人脸,进行眼睛检测
    eyes = eye_cascade.detectMultiScale(roi_gray)
    for (ex,ey,ew,eh) in eyes:
        cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

# 显示结果
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

示例1:在视频中实时检测人脸和眼睛

import cv2

# 加载训练好的Haar分类器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

# 处理视频
cap = cv2.VideoCapture(0)

while True:
    # 读取帧
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # 进行人脸检测
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5)

    # 遍历检测到的所有人脸
    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]
        # 对于每张人脸,进行眼睛检测
        eyes = eye_cascade.detectMultiScale(roi_gray)
        for (ex,ey,ew,eh) in eyes:
            cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

    # 显示结果
    cv2.imshow('img',img)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

示例2:从摄像头中捕获图片并进行人脸和眼睛检测

import cv2

# 加载训练好的Haar分类器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

# 处理摄像头捕捉的图片
cap = cv2.VideoCapture(0)
ret, img = cap.read()
cv2.imwrite("capture.jpg", img)
cap.release()

# 读取图片,并进行人脸检测
img = cv2.imread('capture.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5)

# 遍历检测到的所有人脸
for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    # 对于每张人脸,进行眼睛检测
    eyes = eye_cascade.detectMultiScale(roi_gray)
    for (ex,ey,ew,eh) in eyes:
        cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

# 显示结果
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上示例代码可以在Python环境下运行,并基于OpenCV进行实时人脸和眼睛检测,可以根据需要进行参考和修改。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:opencv基于Haar人脸检测和眼睛检测 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • Python中列表,元组,字典和集合的区别及它们之间的转换

    以下是“Python中列表、元组、字典和集合的区别及它们之间的转换”的完整攻略。 1. 列表、元组、字典和集合的概述 在Python中,列表、元组、字典和集合都是常见的数据结构。它们各自有不同的特点和用途。 列表:列表是一种有序的可变序列,可以存储任意类型的数据。 元组:元组是一种有序的不可变序列,可以存储任意类型的数据。 字典:字典是一种无序的键值对集合,…

    python 2023年5月13日
    00
  • 使用Python可设置抽奖者权重的抽奖脚本代码

    下面详细讲解一下“使用Python可设置抽奖者权重的抽奖脚本代码”的完整攻略。 确定需求 在开始编写代码之前,我们需要确定需求,也就是明确要做什么。在这个案例中,我们需要编写一个抽奖脚本,需要满足以下两个需求: 根据每个参与者的权重进行抽奖; 抽取的结果需要随机并且公平,避免出现任何人被远远落后的情况。 设计抽奖脚本 构建参与者列表和权重列表 我们需要构建一…

    python 2023年6月3日
    00
  • python实现数字炸弹游戏

    Python实现数字炸弹游戏攻略 简介 数字炸弹游戏是一种基于猜数字的游戏,适合Python初学者进行练手和实践。玩家需要在规定的次数内猜出指定范围内的随机数,难度由范围和次数设定决定,同时可以进行游戏得分排名等竞争操作,非常实用。 实现步骤 随机数生成 使用Python中的random模块随机生成数字,通过指定范围和所需生成随机数个数来实现。 import…

    python 2023年5月19日
    00
  • PySpark中RDD的数据输出问题详解

    PySpark中RDD的数据输出问题详解 PySpark是Python下的Spark API,RDD(Resilient Distributed Datasets)是其中非常重要的一个概念。RDD被设计为可以被切分、并行处理,是一个具有容错特性的分布式数据结构。 在使用PySpark时,我们常常需要将RDD中的数据输出,本文将详细讲解PySpark中RDD的…

    python 2023年5月14日
    00
  • Python变量定义的简单使用介绍

    Python变量定义的简单使用介绍 在Python中,变量是存储数据的容器,可用于存储各种类型的数据,例如数字、字符串、列表、元组等。本文将介绍Python中变量的定义和使用,帮助初学者快速入门。 变量的定义 在Python中,变量的定义采用“变量名=变量值”的形式,变量名需要遵循以下规则: 变量名只能包含字母、数字和下划线 变量名不能以数字开头 变量名不能…

    python 2023年5月13日
    00
  • Python实现孤立随机森林算法的示例代码

    欢迎阅读本文,本文将详细讲解如何用 Python 实现孤立随机森林算法,并提供示例代码。 1. 了解孤立森林算法 孤立森林算法是一种用来检测异常值的算法。它基于随机森林的思想,通过构建随机森林进行异常值的检测。孤立森林算法的核心思想是,异常值在随机树中的深度较浅,正常值在随机树中的深度较深。 2. 孤立森林算法的实现步骤 2.1 数据预处理 首先需要对数据进…

    python 2023年6月3日
    00
  • Python 如何优雅的将数字转化为时间格式的方法

    将数字转化为时间格式是Python常见的需求之一,Python提供了众多的时间操作库,如datetime、time、arrow等,下面就让我来讲解一下Python如何优雅的将数字转化为时间格式的方法。 使用datetime库 datetime库是Python日期处理中最常用的库之一,它提供了一个datetime类,它能够轻松地将数字转化为时间格式。 具体实现…

    python 2023年6月2日
    00
  • tkinter使用js的canvas实现渐变色

    使用Canvas实现渐变背景色 引言 Canvas是Web前端中常用的元素之一,它提供了一种绘制图形的方式。在不同的开发场景中,我们可以使用JavaScript的Canvas API来绘制一些复杂的图形和效果。在本文中,我们将向大家展示如何使用JavaScript的Canvas API来创建渐变背景色。 实现步骤 创建Canvas元素。 html<ca…

    python 2023年6月13日
    00
合作推广
合作推广
分享本页
返回顶部