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

opencv实现视频人脸识别

一. 实现指定图像的人脸识别

注意:

以下实例参考《OpenCV轻松入门面向Python》李立宗著,使用python语言,编辑器为PyCharm,且都运行成功。
1.dface3.jpg图片文件和当前代码放在同一级目录下。
2.级联分类器文件和当前代码文件放在同一目录下。
3.获取级联分类器方式:
1)安装opencv后,在其安装目录下的data文件夹内查找xml文件。
2)直接在网络上找到相应的XML文件,下载并使用。
访问opencv官网: https://opencv.org/ ,点进Github,在data目录下haarcascade文件夹下寻找需要的级联分类器。
代码如下:

import cv2
#读取待检测的图像
image=cv2.imread('dface3.jpg')
#加载了一个训练好的人脸检测器(xml文件,包含了用于人脸检测的哈尔特征级联分类器)
faceCascade=cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
#将图像转换成灰度图像
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
#调用detectMultiScale()函数在灰度图像上检测人脸,函数会返回一个列表,每个表示一个检测到的人脸
faces=faceCascade.detectMultiScale(gray,scaleFactor=1.15,minNeighbors=5,minSize=(5,5)
)
print(faces)
print("发现{0}个人脸!".format(len(faces)))
#在原始图像上绘制矩形框,框出检测到的人脸
for(x,y,w,h) in faces:cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)
cv2.imshow("tect",image)
cv2.imwrite("re.jpg",image)
cv2.waitKey(0)
cv2.destroyAllWindows()

detectMultiScale():

是一个用于检测目标的函数,其中包含了以下几个参数:

参数1(image):需要进行检测的输入图像,通常是灰度图像。

参数2(scaleFactor):在每个图像尺度上进行尺度变换时的缩放比例。这个参数用于多尺度检测,允许算法检测不同尺寸的目标。例如,如果设置为 1.1,意味着算法会逐渐缩小图像的尺寸进行检测。

参数3(minNeighbors):每个候选矩形应该保留的邻近数。这个参数可以帮助去除一些虚假的检测结果。较大的值会导致更少的检测框,但是这些检测框更可能是真实的目标。

参数4(minSize):目标的最小尺寸。只有大于等于这个尺寸的目标才会被检测到。这个参数可以用于排除一些小目标,以减少虚假检测。

参数5(flags):它是一个可选的参数,用于调整算法的行为。通常情况下,我们可以使用默认值0。

返回值:这个函数返回一个矩形列表,表示检测到的目标的位置和大小。通常情况下,每个矩形都是一个四元组 (x, y, width, height),分别表示目标左上角的坐标以及目标的宽度和高度。

cv2.rectangle()

是 OpenCV 库中用于在图像上绘制矩形的函数,其中包含几个参数:
image:需要绘制矩形的图像,通常是一个 NumPy 数组表示的图像对象。

pt1:矩形的左上角坐标,是一个元组 (x1, y1),其中 x1 是矩形左上角的横坐标,y1 是矩形左上角的纵坐标。

pt2:矩形的右下角坐标,也是一个元组 (x2, y2),其中 x2 是矩形右下角的横坐标,y2 是矩形右下角的纵坐标。(x+w, y+h) 是矩形框的右下角坐标,x+w 表示矩形右边界的横坐标,y+h 表示矩形底边界的纵坐标。

color:矩形的颜色,通常以 BGR 格式表示,即一个包含三个整数值的元组 (B, G, R),其中 B、G、R 分别代表蓝色、绿色、红色的通道值。(0, 255, 0) 表示纯绿色。

thickness:矩形的线条宽度,以像素为单位。如果指定为负值,表示填充整个矩形区域。默认为1。

lineType:线条类型,默认为8连接线。你可以选择不同的线条类型,如8连接、4连接等。

shift:偏移量,默认为0。这个参数通常不需要指定,除非你需要对图像进行一些特殊处理。

二. 捕获摄像头视频

opencv通过从cv2.VideoCapture提供了非常方便的捕获摄像头视频的方法。
代码如下:

import cv2
#从指定的设备中获取视频流
cap=cv2.VideoCapture(0)
while(cap.isOpened()):ret, frame = cap.read()cv2.imshow('frame',frame)c = cv2.waitKey(1)if c == 27:break
cap.release()
cv2.destroyAllWindows()

cv2.VideoCapture()

参数为 0,代表使用默认的摄像头设备(通常是计算机上内置的摄像头),如果你有多个摄像头,可以通过不同的参数值来选择不同的摄像头。例如,cv2.VideoCapture(1) 表示选择第二个摄像头。也可以传入视频文件的路径作为参数,以便从文件中读取视频流。

三.实现视频人脸识别

代码如下:

import cv2
import numpy as np
#创建了一个VideoCapture对象cap用于捕获视频,0表示打开默认的摄像头
cap=cv2.VideoCapture(0)
#加载人脸识别检测器
faceCascade=cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
#只要摄像头处于打开状态就一直运行
while(cap.isOpened()):#使用read方法从摄像头捕获一帧,ret是个布尔值表示是否成功读取帧,frame是捕获的视频帧ret,frame=cap.read()if ret:#对每个帧进行解析#将每一帧转换为灰度图像gray_image=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)faces=faceCascade.detectMultiScale(gray_image,scaleFactor=1.15,minNeighbors=5,minSize=(5,5))#逐个标注检测到的人脸for(x,y,w,h) in faces:cv2.rectangle(frame,(x,y),(x+w,y+w),(0,255,0),2)cv2.imshow("detect",frame)#按esc键控制退出c=cv2.waitKey(1)if c==27:breakelse:break
cap.release()
cv2.destroyAllWindows()

相关文章:

opencv实现视频人脸识别

一. 实现指定图像的人脸识别 注意: 以下实例参考《OpenCV轻松入门面向Python》李立宗著,使用python语言,编辑器为PyCharm,且都运行成功。 1.dface3.jpg图片文件和当前代码放在同一级目录下。 2.级联分类器文件和当前代码文件放在…...

【今日面经】24/3/9 广州Java某小厂电话面经

面经来源:https://www.nowcoder.com/?type818_1 目录 1、 和equals()有什么区别?2、String变量直接赋值和构造函数赋值比较相等吗?3、String一些方法?4、抽象类和接口有什么区别?5、Java容器有哪些?6、Lis…...

日期问题---算法精讲

前言 今天讲讲日期问题,所谓日期问题,在蓝桥杯中出现众多,但是解法比较固定。 一般有判断日期合法性,判断是否闰年,判断日期的特殊形式(回文或abababab型等) 目录 例题 题2 题三 总结 …...

倒计时35天

dp预备(来源:b站acm刘春英老师) 1. 2. 3. 4. 5. 6. 7....

JAVA后端开发面试基础知识(七)——多线程

1. 线程池原理 优点 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线…...

Apache的安装与目录结构详细解说

1. Apache安装步骤 Apache是一款开源的Web服务器软件,常用于搭建网站和服务。以下是Apache的安装步骤: 在官方网站(https://httpd.apache.org/)下载最新版本的Apache软件包。解压下载的软件包到指定目录。运行安装程序&#xff…...

axios的详细使用

目录 axios:现代前端开发的HTTP客户端王者 一、axios简介 二、axios的基本用法 1. 安装axios 2. 发起GET请求 3. 发起POST请求 三、axios的高级特性 1. 拦截器 2. 取消请求 3. 自动转换JSON数据 四、axios在前端开发中的应用 五、总结 axios&#xff1a…...

空间复杂度的OJ练习——轮转数组

旋转数组OJ链接:https://leetcode-cn.com/problems/rotate-array/ 题目: 思路: 通过题目我们可以知道这是一个无序数组,只需要将数组中的数按给定条件重新排列,因此我们可以想到以下几种方法: 1.暴力求解法…...

学习与学习理论 - 2024教招 - test

一 方向 所有学习理论大的观点,到某个人物个人的观点。抖音:按照粉丝数量、收藏数量、点赞数量排名从编程(思想)、java、自己所拥有的特点看学习方法顺序:java、自身、教学理论的总观点、教学理论代表人物的观点、散兵…...

Spring web开发(入门)

1、我们在执行程序时,运行的需要是这个界面 2、简单的web接口(127.0.0.1表示本机IP) package com.example.demo;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestCont…...

这是谁的女儿?其母亲早已红过头了,现在小小年纪的她也爆红网络,没想到吧?

这是谁的女儿?其母亲早已红过头了,现在小小年纪的她也爆红网络,没想到吧? 原来,作母亲的她在红极一时后似乎沉寂了下来,没想到她11岁的女儿近年来也在社交媒体上走红,她为何也成了小网红呢&…...

鸿蒙开发之gson解析

作为老牌的Java程序员,几乎每个项目都逃不掉fastjson/gson等三方库。那么在OpenHarmony/HarmonyOS应用开发中,做数据解析时能不能使用fastjson/gson三方库呢?于是我搜索了一下,其实在arkts开发过程中也是可以使用JS里自带的JSONparse和JSONstringify方法来实现JSON和对象转…...

图形库实战丨C语言扫雷小游戏(超2w字,附图片素材)

目录 效果展示 游玩链接(无需安装图形库及VS) 开发环境及准备 1.VS2022版本 2.图形库 游戏初始化 1.头文件 2.创建窗口 3.主函数框架 开始界面函数 1.初始化 1-1.设置背景颜色及字体 1-2.处理背景音乐及图片素材 1-3.处理背景图位置 2.选…...

c++: string中 find, rfind, find_frist_of, find_laste_of 与 substr之间的操作

在 C 的 std::string 类中,有几个成员函数可以用于在字符串中执行搜索和子字符串提取操作。以下是这些函数的简要说明: find(): 查找子字符串的第一个出现位置。 size_t find(const string& str, size_t pos 0) const; size_t find(const char* s, …...

[python3] dataclass的对象排序

在使用 dataclass(orderTrue) 中,会比较数据类中定义的所有属性。具体来说,生成的比较运算符方法会按照数据类中定义属性的顺序逐个比较属性的取值。 下面是一个示例代码,演示了 orderTrue 比较数据类中所有属性的情况: from da…...

数据库基础——mysql知识体系(掌握mysql,看完这篇文章就够了)

1.关系型数据库 关系型数据库是一种基于关系模型的数据库系统,将数据组织成表格的形式,表格由行和列组成,每行代表一个记录,每列代表一个属性。它使用结构化查询语言SQL进行数据管理和操作。 特点:1.数据的组织&…...

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(二)

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(前导) Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(一) Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(三) 五、实验目的 本次实验使用电脑上的…...

高级语言讲义2010计专(仅高级语言部分)

1.编写一程序&#xff0c;对输入的正整数&#xff0c;求他的约数和。 如&#xff1a;18的约数和为1236939 #include <stdio.h>int getsum(int n){int i,sum0;for(i1;i<n;i)if(n%i0)sumi;return sum; } int main(){int sum getsum(18);printf("%d",sum); …...

你喜欢那种舞者呢?

迷宫中的舞者&#xff1a;程序员职业赛道的探索与魅力 在数字世界的深处&#xff0c;程序员的职业赛道宛如一座神秘而迷人的迷宫。这个迷宫中&#xff0c;每个转角都隐藏着无限的可能&#xff0c;每个领域都散发着独特的魅力。前端开发者如同花园中的精灵&#xff0c;后端工程师…...

LeetCode每日一题之 快乐数

目录 题目介绍&#xff1a; 算法原理&#xff1a; 鸽巢原理&#xff1a; 如何找到环里元素&#xff1a; 代码实现&#xff1a; 题目介绍&#xff1a; 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 算法原理&#xff1a; 我先简单举两个例子&#xff…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...