简单人脸检测

2023-11-11

1.1 Haar特征分类器介绍

Haar特征分类器就是一个XML文件,该文件中会描述人体各个部位的Haar特征值。包括人脸、眼睛、嘴唇等等。

Haar特征分类器存放目录:

D:\wsbSoft\Anaconda3\envs\tensorflow\Library\etc\haarcascades,根据命名就可以很快知道各个分类器的用途

1.2 detectMultiScale函数详解

cvHaarDetectObjects是opencv1中的函数,opencv2中人脸检测使用的是 detectMultiScale函数。它可以检测出图片中所有的人脸,并将人脸用vector保存各个人脸的坐标、大小(用矩形表示),函数由分类器对象调用:

void detectMultiScale(
    const Mat& image,	
    CV_OUT vector<Rect>& objects,	
    double scaleFactor = 1.1,	
    int minNeighbors = 3, 	
    int flags = 0,	
    Size minSize = Size(),	
    Size maxSize = Size()
);

函数介绍:

参数1:image--待检测图片,一般为灰度图像加快检测速度;

参数2:objects--被检测物体的矩形框向量组;

参数3:scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;

参数4:minNeighbors--表示构成检测目标的相邻矩形的最小个数(默认为3个)。如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。如果min_neighbors 为 0,则函数不做任何操作就返回所有的被检候选矩形框, 这种设定值一般用在用户自定义对检测结果的组合程序上;

参数5:flags--要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,因此这些区域通常不会是人脸所在区域;

参数6、7:minSize和maxSize用来限制得到的目标区域的范围。

1.3 实例应用

1.3.1 图片人脸检测
 

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 人脸分类器 D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_frontalface_alt_tree.xml
# 人脸分类器 face = cv2.CascadeClassifier('D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_frontalface_alt_tree.xml')
# 人眼分类器 face = cv2.CascadeClassifier('D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_eye.xml')
# hfa文件就是haarcascade_frontalface_alt_tree.xml的当前路径

#图片人脸检测
def face_image():
    face = cv2.CascadeClassifier('hfa.xml')
    img = cv2.imread('girl.jpg',cv2.IMREAD_UNCHANGED)
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    faces = face.detectMultiScale(gray)
    print(faces)
    for x,y,w,h in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
        cv2.imshow('face_image',img)
    cv2.waitKey()
    cv2.destroyAllWindows()

face_image()        #调用图像人脸检测函数

1.3.2 摄像头人脸检测

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 人脸分类器 D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_frontalface_alt_tree.xml
# 人脸分类器 face = cv2.CascadeClassifier('D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_frontalface_alt_tree.xml')
# 人眼分类器 face = cv2.CascadeClassifier('D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_eye.xml')
# hfa文件就是haarcascade_frontalface_alt_tree.xml的当前路径


#摄像头人脸检测
def face_came():
    face = cv2.CascadeClassifier('hfa.xml')
    capture = cv2.VideoCapture(0)
    while(True):
        ret,frame = capture.read()
        if ret is False:
            break
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        faces = face.detectMultiScale(gray,1.1,3,0,(100,100))
        for(x,y,w,h) in faces:
            cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
            cv2.imshow('face_came',frame)
        c = cv2.waitKey(10)
        if c == 27:
            break
    capture.release()
    cv2.destroyAllWindows()

face_came()        #摄像头人脸检测
摄像头人脸检测
摄像头人脸检测

1.3.3 视频人脸检测

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 人脸分类器 D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_frontalface_alt_tree.xml
# 人脸分类器 face = cv2.CascadeClassifier('D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_frontalface_alt_tree.xml')
# 人眼分类器 face = cv2.CascadeClassifier('D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_eye.xml')
# hfa文件就是haarcascade_frontalface_alt_tree.xml的当前路径


#视频人脸检测
def face_video():
    face_detector = cv2.CascadeClassifier('hfa.xml')
    capture = cv2.VideoCapture('001.avi')
    while(True):
        ret,frame = capture.read()
        if ret is False:
            break
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        faces = face_detector.detectMultiScale(gray,1.1,3,0,(100,100))
        for x,y,w,h in faces:
            cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
            cv2.imshow('face_video',frame)
        c = cv2.waitKey(10)
        if c==27:
            break
    capture.release()
    cv2.destroyAllWindows()

face_video()        #视频人脸检测
视频人脸检测
视频人脸检测

 

如果要识别人体的其它部位,只需将上面的haarcascade_frontalface_alt2.xml分类器替换即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单人脸检测 的相关文章

  • 如何在 CMake Makefile 中包含 OpenCV 库

    我希望你可以帮助我 我有一个简单的 CMakeLists txt 以便在 Leopard 10 5 8 上构建我的项目 我正在使用 CMake 2 8 1 目前这是代码 cmake minimum required VERSION 2 8
  • OpenCV Python 删除图像中的某些对象

    我正在使用带有 opencv 和 numpy 的 python 来检测天文中的星星 例如这个1 https i stack imgur com AKwEJ jpg图片 使用模板匹配 我可以用阈值检测星星 单击 2 2 https i sta
  • 使用 K 均值聚类 OpenCV 进行交通标志分割

    I used K Means Clustering to perform segmentation on this traffic sign as shown below 这些是我的代码 读取图像并模糊 img cv imread 000
  • 针对不同相机(RGB 和红外)的 StereoCalibrate

    我在校准两个摄像头时遇到问题 第一个是 RGB 第二个是红外 它们有不同的分辨率 我调整了大小并裁剪了更大的图像 焦距等等 例子 RGB 1920x1080 Infrared 512x424 如何相互校准它们 我应该在stereoCalib
  • 附加信息:OpenCV:使用 c# 的不同大小的对象

    目前 我的 EmguCV c 代码面临问题 我试图从数据库中识别我的图像 但它不起作用 一旦检测到我的脸 它就会崩溃 然后会出现此错误 附加信息 OpenCV 不同大小的对象 我尝试寻找这个错误 但我一无所知 这是我的代码 Action f
  • 从单应性估计 R/T

    我一直在尝试计算 2 个图像中的特征 然后将这些特征传递回CameraParams R没有运气 特征已成功计算并匹配 但是问题是将它们传递回R t 我明白你必须分解Homography为了使这一点成为可能 我已经使用如下方法完成了 http
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • Pyinstaller“无法执行脚本 pyi_rth_pkgres”并且缺少软件包

    这是我第一次在这里发布问题 因为我的大部分问题已经被其他人回答了 我正在 python 中开发 GUI 应用程序 并尝试使用 pyinstaller 将其打包到单个文件夹和 exe 中 以便于移植 目前 我使用 Windows 10 和 a
  • Opencv - 找不到头文件

    我正在尝试使用 opencv 开始开发 问题是 到目前为止我几乎无法设置 opencv 因为我找不到它的头文件 我对此主题进行了一些研究 但没有一个真正有帮助 下面是一些链接 opencv2 包含文件在哪里 https stackoverf
  • 在 Android 中使用 OpenCV 查找图像匹配

    我正在尝试构建一个 Android 应用程序 该应用程序可以比较设备相机拍摄的照片 以在一组图像中找到匹配项 我已经在 Android Studio 上配置了 OpenCV 但仅此而已 有人可以通过链接到资源或建议教程来提供帮助吗 Open
  • 如何将k4a_image_t转换为opencv矩阵? (Azure Kinect 传感器 SDK)

    我开始尝试使用 Azure Kinect Sensor SDK 我经历了官方操作指南 https learn microsoft com en us azure Kinect dk about sensor sdk sensor sdk 我
  • 将yuv420p原始数据转换为opencv图像

    我有来自 rtmp 服务器的原始数据 像素格式为 yuv420p 我使用管道来读取数据 但我不知道如何将原始数据解码为图像 command ffmpeg command extend loglevel fatal i rtmp localh
  • 使用opencv+picamera流IO用树莓派捕获视频

    我使用 Raspberry 来简单地显示一个视频 目前仅此 为此 我必须使用 opencv cv2 我尝试了很多解决方案 但现在我想使用 Picamera 库捕获视频 我将向您展示我的代码 import io import time imp
  • 如何平滑循环列向量

    这是一个 OpenCV2 问题 我有一个矩阵代表closed空间曲线 cv Mat
  • 如何使用Android opencv使图像的白色部分透明

    我无法链接超过 2 个网址 因此我将我的照片发布到此博客 请在这里查看我的问题 http blog naver com mail1001 220650041897 http blog naver com mail1001 220650041
  • 如何将 Opencv VideoWriter 与 GStreamer 结合使用?

    我正在尝试使用 Opencv VideoWriter 传输 h264 流 以使用 VideoCapture 将其传输到网络上的另一台电脑上 但是 我被困在 VideoWriter 上 执行此代码会返回错误 并且 out isOpened 始
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 寻找两个框架之间的变换

    我有来自视频源的两个连续帧 并且我使用 FAST 算法检测这两个帧的关键点 我使用平方差之和法 SSD 来匹配关键点 所以基本上我已经匹配了两个框架之间的关键点 现在我想根据匹配的关键点集计算两个帧之间的仿射变换 缩放 旋转 平移 我知道如
  • 线程“main”java.lang.UnsatisfiedLinkError中出现异常:java.library.path中没有opencv_java249

    我目前正在尝试在我的 32 位笔记本电脑上设置 OpenCV 但我不断收到一条令我困惑的错误消息 Exception in thread main java lang UnsatisfiedLinkError no opencv java2
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac

随机推荐

  • js实现雪花飘落效果

    js实现雪花飘落效果 我们可以先看看效果 点这里 雪花 其实总的代码都不到 100 行 代码很少 因此 css 样式 和 js 代码我都放在一个 HTML 文件里面了 我们先看看主体的 HTML 代码 div div html 的代码就只有
  • 搭建目标检测模型之Domain Adaptive Faster R-CNN for Object Detection in the Wild

    搭建环境 方法1 直接搭建环境 报错及解决方法 准备数据集 官方数据集 训练模型 测试模型 训练结果 有问题 搭建环境 方法1 直接搭建环境 克隆项目Domain Adaptive Faster RCNN PyTorch git clone
  • 华为od机试题8 真题

    华为od机试题 真题 10 输出最多类型的个数 11 树根节点到最小的叶子节点的路径 12 货车最大载货量 13 太阳能板最大面积 14 单词接龙 17 输出连续出现次数第k多的字母的次数 18 喊7 19 删除出现次数最少的字符 以下题目
  • actuator--基础--08--application.yml配置

    actuator 基础 08 application yml配置 management endpoints 暴露 EndPoint 以供访问 有jmx和web两种方式 exclude 的优先级高于 include jmx exposure
  • windows7 64位机上,libjpeg-turbo的安装和使用

    libjpeg turbo是对libjpeg的扩展 支持SIMD指令 如X86架构的MMX SSE SSE2 3DNOW ARM架构的NEON 在对jpeg进行编码和解码的过程中能提高速度 MMX 多媒体扩展的缩写 第六代CPU芯片重要特点
  • 【Modbus】 RTU CRC校验码计算方法

    Modbus是美国Modicon公司 即现在的Schneider Electric公司 于1979年开发的一种通信协议 其目的是采用一根双绞线实现多个设备之间的通信 Modbus 协议采用问答式的通信方式 具有简单 硬件便宜 通用性强 使用
  • 2023_华为OD机试真题_Java_001_AI处理器组合

    AI处理器组合 题目描述 某公司研发了一款高性能AI处理器 每台物理设备具备8颗AI处理器 编号分别为0 1 2 3 4 5 6 7 编号0 3的处理器处于同一个链路中 编号4 7的处理器处于另外一个链路中 不通链路中的处理器不能通信 如下
  • pip 删除安装包_最新版pip用法一览

    pip 是 Python 包管理工具 该工具提供了对Python 包的查找 下载 安装 卸载的功能 熟练使用此工具 也是python的基本功 https pypi org目前最新版本为20 2 2 以下就以此版本来演示其使用 下面演示 是在
  • pytorch学习(六)---搭建简单的神经网络以及sequential的使用

    本篇自学笔记来自于b站 PyTorch深度学习快速入门教程 绝对通俗易懂 小土堆 Up主讲的非常通俗易懂 文章下方有视频连接 如有需要可移步up主讲解视频 如有侵权 实非故意 深表歉意 请与我联系 删除相关内容 本节以CIFAR10的模型结
  • emwin多语言实现的两种方式

    MCU开发中经常会涉及到多语言的制作和支持 本文将介绍两种制作字库的方法 字库的实现主要包含两部分 一是 字库 一是要显示的字符串 将这两个东西准备好 就可以实现了 第一种方法 详细的可以直接参考这篇博客 可 EMWIN 多国语言实现方法
  • 【信号采集】基于FPGA的高速信号采集系统

    1 高速采集系统实现的功能 FPGA内部功能模块组成 2 高速ADC接口的FPGA实现 3 数字下变频 DDC 的FPGA实现 4 三倍抽取功能的FPGA实现 5 Aurora接口的FPGA实现 高速采集系统的功能和组成 1 实现功能 对中
  • 《消息队列高手课》传输协议:应用程序之间对话的语言

    传输协议就是应用程序之间对话的语言 设计传输协议 并没有太多规范和要求 只要是通信双方的应用程序都能正确处理这个协议 并且没有歧义就好了 这节课 我们就来说一下设计高性能传输协议的一些方法和技巧 如何 断句 既然传输协议也是一种语言 那么在
  • CentOS8基础篇5:用户账号与用户组的创建

    一 用户与用户组概念 Linux是一个多用户 多任务的服务器操作系统 多用户多任务指可以在系统上建立多个用户 而多个用户可以在同一时间内登录同一个系统执行各自不同的任务 而互不影响 Linux用户是根据角色定义的 具体分为三种角色 超级用户
  • C++中拒绝编译器自动生成copy构造函数和copy赋值运算符操作(6)---《Effective C++》

    C 是一片荆棘遍布的雷区 等待用于挑战的你去探索 在 Effective C 系列的第5篇中我们已经看到当用户进行赋值或者拷贝操作的时候 即使我们没有定义拷贝构造函数或者拷贝赋值运算符操作 编译器也会自动为其生成copy构造函数和copy赋
  • P50发布,鸿蒙OS用户突破4000万!

    大家期盼已久的华为 P50 系列手机终于来了 7 月 29 日晚间 华为在线上举行 万象新生 为主题的旗舰新品发布会 华为旗舰新机 P50 系列正式全球发布 太难了 迟到 4 个月的 P50 发布 在今年 6 月份华为鸿蒙 2 0 发布会上
  • 基于HashHeap的LFU实现

    普通heap支持的操作和queue stack一样 就是push pop 只是pop出的是最小值 具体点就是add delMin hashheap支持一般HashMap的功能 同时维护最小值 和LinkedHashMap是对等的 后者是Ha
  • 手机开启应急预警通知 / 地震预警

    前言 安卓手机在检测到地震时 将发送地震预警通知 但此设置是默认关闭的 原因是以防引发用户恐慌从而引发安全问题 且开启此设置需要完成指引教程 因此默认关闭此设置 下文介绍如何开启此设置 开启方法 华为手机开启方法 以华为手机为例 详细介绍开
  • Metasploit渗透测试框架的基本使用

    1 Metasploit体系框架 1 基础库 metasploit基础库文件位于源码根目录路径下的libraries目录中 包括Rex framework core和framework base三部分 Rex是整个框架所依赖的最基础的一些组
  • Linux-fork(),vfork()和clone的区别

    在linux系统中 fork vfork 和clone函数都可以创建一个进程 但是它们的区别是什么呢 本文就这三者做一个较深入的分析 1 fork fork 函数的作用是创建一个新进程 由fork创建的进程称为子进程 fork函数调用一次返
  • 简单人脸检测

    1 1 Haar特征分类器介绍 Haar特征分类器就是一个XML文件 该文件中会描述人体各个部位的Haar特征值 包括人脸 眼睛 嘴唇等等 Haar特征分类器存放目录 D wsbSoft Anaconda3 envs tensorflow