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协程并发数控制攻略 本攻略将介绍如何使用Python协程并发数控制。我们将使用asyncio库来创建协程,使用Semaphore类来控制并发数。 创建协程 在开始之前,我们需要了解如何使用asyncio库创建协程。以下是一个示例代码,用于创建一个简单的协程: import asyncio async def my_coroutine(): pri…

    python 2023年5月15日
    00
  • python爬虫使用requests发送post请求示例详解

    以下是关于Python爬虫使用requests发送POST请求的攻略: Python爬虫使用requests发送POST请求 requests是一个流行的HTTP库,用于向Web服务器发送HTTP请求和接收响应。以下是Python爬虫使用requests发送POST请求的攻略: 发送POST请求 以下是使用requests库发送POST请求的示例: impo…

    python 2023年5月14日
    00
  • 详解用pyecharts Geo实现动态数据热力图城市找不到问题解决

    详解用pyechartsGeo实现动态数据热力图城市找不到问题解决 pyechartsGeo是一个基于Python的数据可视化库,可以用于生成各种类型的地图和热力图。在本文中,我们将详细讲解如何使用pyechartsGeo实现动态数据热力图,并解决城市找不到的问题。 安装pyechartsGeo 在使用pyechartsGeo之前,我们需要先安装它。以下是一…

    python 2023年5月15日
    00
  • 200个Python 标准库总结

    针对“200个Python 标准库总结”的完整攻略,包含以下几个方面的内容: 了解Python标准库 学习Python标准库的方法 Python标准库中的一些常用模块介绍,包括用途和示例 1.了解Python标准库 Python标准库是Python语言的一部分,包括一系列模块,用于实现一些常见的编程任务,如文件I/O、网络通信、数据库连接、日期时间处理等。标…

    python 2023年5月20日
    00
  • Python机器学习入门(六)之Python优化模型

    下面是详细讲解“Python机器学习入门(六)之Python优化模型”的完整攻略。 1. 什么是模型优化 在机器学习中,模型优化是指通过调整模型的参数和超参数,使得模型在训练集和测试集上的表现更好。模型优化可以提高模型的准确性、泛化能力和效率。 2. 模型优化方法 以下是一些常用的模型优化方法。 2.1 网格搜索 网格搜索是一种通过遍历给定的参数组合来优化模…

    python 2023年5月14日
    00
  • python接口自动化使用requests库发送http请求

    以下是关于Python接口自动化使用requests库发送HTTP请求的攻略: Python接口自动化使用requests库发送HTTP请求 在Python接口自动化中,使用requests库发送HTTP请求是非常常见的操作。以下是Python接口自动化使用requests库发送HTTP请求的攻略。 发送GET请求 使用requests库发送GET请求非常简…

    python 2023年5月14日
    00
  • Python标准库uuid模块(生成唯一标识)详解

    Python标准库uuid模块(生成唯一标识)详解 什么是UUID? UUID英文全称是“Universally Unique Identifier”,中文意思是“通用唯一识别码”。它是一个由算法生成的二进制长度为128位的数字,通常用连字符将其分为32位的5段,表示成8-4-4-4-12的格式。 为什么使用UUID? 在我们开发程序时,有时需要生成唯一的标…

    python 2023年6月2日
    00
  • python 集合 并集、交集 Series list set 转换的实例

    在Python中,可以使用集合(set)来进行集合运算,包括并集、交集等。同时,我们也可以将Series、List等数据类型转换为集合进行运算。下将介绍两个示例,分别演示了集的并集、交集运算以及Series、List转换为集合的方法。 示例一:集合的并集、交集运算 # 集合的并集、交集运算 set1 = {1, 2, 3, 4, 5} set2 = {4, …

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