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

yizhihongxing

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 Scrapy框架:通用爬虫之CrawlSpider用法简单示例

    Python是一种广泛使用的高级语言,Scrapy是一个基于Python的网络爬虫框架,可以用于从网站上爬取数据。这个攻略将介绍Scrapy框架的CrawlSpider模块,提供一个通用的爬虫实现,可以根据用户的需求,定制特定的数据爬虫。 设置Scrapy环境 首先,我们需要设置Scrapy环境,并确保安装了Scrapy插件。在命令行中使用以下命令安装Scr…

    python 2023年5月14日
    00
  • python 使用while循环输出*组成的菱形实例

    下面是使用Python编写while循环输出*组成菱形的完整攻略。 1. 思路 首先我们需要明确一下本例的思路: 首先需要一个输入,这个输入为一个整数,表示菱形的宽度 然后,我们通过while循环来控制每一行输出的星号数,从而输出整个菱形。 具体细节详见下面代码实现。 2. 代码实现 def print_diamond(width: int): n = (w…

    python 2023年6月5日
    00
  • Python程序员面试题 你必须提前准备!(答案及解析)

    “Python程序员面试题你必须提前准备!(答案及解析)”是一篇关于Python程序员面试准备的文章,内容主要包括四个部分:基础知识题、算法题、常用模块题以及高级题。以下是详细的攻略: 基础知识题 这部分的考试内容主要涵盖Python的基础语法、数据类型、操作符等。以下列举几个常见的考试题目: 题目1:Python中的有哪些基本数据类型? 常见的数据类型包括…

    python 2023年5月14日
    00
  • python利用urllib实现爬取京东网站商品图片的爬虫实例

    本攻略将介绍如何使用Python的urllib库实现爬取京东网站商品图片的爬虫实例。我们将使用urllib库获取网页内容,并使用正则表达式提取商品图片的URL。我们将提供两个示例,分别用于获取单个商品的图片和获取多个商品的图片。 获取单个商品的图片 以下是一个示例代码,用于获取单个商品的图片: import urllib.request import re …

    python 2023年5月15日
    00
  • 在Python中表示一个对象的方法

    当使用Python编程时,所有的数据都是以对象的形式存在的。可以使用方法来操作这些对象,包括在内建函数中或自己编写的函数中使用各种方法来操作不同的数据类型。Python中表示一个对象的方法包括以下几个方面: 类型函数 Python中内置了一些类型函数来获取对象的数据类型。这些函数可以告诉我们一个对象是哪种类型,Python中常用的类型函数有: type()函…

    python 2023年6月3日
    00
  • Python中过滤字符串列表的方法

    在Python中,我们可以使用各种方法来过滤字符串列表。本文将详细讲解Python中过滤字符串列表的方法,并提供两个示例说明。 方法一:使用列表推导式 列表推导式是Python中一种简而强大的语法,可以快速一个新的列表。我们可以使用列表推导式来过滤字符串列表。下面是示例: my_list = [‘apple’, ‘banana’, ‘orange’, ‘pe…

    python 2023年5月13日
    00
  • python基础入门之列表(一)

    以下是详细讲解“Python基础入门之列表(一)”的完整攻略。 列表 在Python中,列表是一种常用的数据类型,它可以存储多个值,并且可以进行增改查等操作。下面是一些常见的操作: 创建列表 lst = [1, 2, 3, 4, ] 上述代码创建了一个包含1到5的列表。 访问列表中的元素 lst = [1, 2, 3, 4, 5] print(lst[0])…

    python 2023年5月13日
    00
  • Python基础之列表常见操作经典实例详解

    Python基础之列表常见操作经典实例详解 在Python中,列表是一种非常常用的数据类型。列表是一种有序的集合,可以包含任意类型,例如、字符串、列表等。本文将详细介绍Python列表常见操作,并演示如何使用列表实现一些常见的任务。 列表的创建 在Python,我们可以使用方括号[]或list()函数来创建列表。例如: # 创建列表 my_list = [1…

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