Python人脸识别

实现效果 

代码

import cv2# 加载人脸识别分类器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')# 打开摄像头
cap = cv2.VideoCapture(0)while True:# 读取摄像头捕获的帧ret, frame = cap.read()# 将帧转换为灰度图像gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 使用分类器检测人脸faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))# 在帧上绘制人脸框for (x, y, w, h) in faces:cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)# 显示结果图像cv2.imshow('人脸识别', frame)# 按下 'q' 键退出循环if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头资源
cap.release()
cv2.destroyAllWindows()

解释

加载人脸识别分类器(理论可不看直接用就行)

1.cv2.CascadeClassifier() 是 OpenCV 提供的一个级联分类器对象,用于进行目标检测任务。在这行代码中,我们创建了一个名为 face_cascade 的级联分类器对象。

2.'haarcascade_frontalface_default.xml' 是一个训练好的人脸检测器模型文件,它基于 Haar 特征和 Adaboost 算法进行训练。这个模型文件包含了用于检测人脸的特征和分类器参数。

3.在运行这段代码之前,你需要确保 haarcascade_frontalface_default.xml 文件存在,并且位于当前工作目录下或者指定了正确的路径。(没有这个文件的可以私聊我)

 打开摄像头 

创建了一个 VideoCapture 对象,用于从摄像头读取视频流或者视频文件。

cv2.VideoCapture(0) 中的参数 0 表示打开默认的摄像头设备。如果你的电脑上有多个摄像头,可以使用不同的整数值来选择不同的摄像头。

通过创建 VideoCapture 对象,我们可以使用它提供的方法来获取连续的视频帧,然后对每一帧进行处理,如人脸检测、图像识别等

读取摄像头捕获的帧

cap 对象中读取一帧视频帧,并将结果赋值给 frame 变量

cap.read() 方法返回两个值,第一个值 ret 表示是否成功读取了一帧数据,如果成功则返回 True,否则返回 False。第二个值 frame 是一个 Numpy 数组,表示读取到的视频帧。

每次调用 cap.read() 方法都会读取下一帧视频帧,因此我们可以使用循环语句来不断读取视频流中的每一帧数据。

将帧转换为灰度图像 

将读取到的彩色图像 frame 转换为灰度图像 gray

OpenCV 中,许多图像处理操作需要使用灰度图像作为输入,而不是彩色图像。因此,在进行人脸检测、边缘检测、图像处理等操作时,通常需要先将彩色图像转换为灰度图像。

cv2.cvtColor() 是 OpenCV 提供的一个颜色空间转换函数,用于将图像从一个颜色空间转换到另一个颜色空间。其中,frame 是输入图像,cv2.COLOR_BGR2GRAY 是目标颜色空间,表示将图像从 BGR(蓝绿红)颜色空间转换为灰度颜色空间。

使用分类器检测人脸 

gray 是输入的灰度图像,scaleFactor 是每个图像尺度的缩小比例,minNeighbors 是每个候选矩形应该保留的邻居矩形数目的最小值,minSize 是检测到的目标的最小尺寸。

在帧上绘制人脸框 

for (x, y, w, h) in faces: 循环遍历每个检测到的人脸区域,并将其表示为 (x, y, w, h) 四元组,其中 (x, y) 是矩形左上角的坐标,wh 分别是矩形的宽度和高度。

cv2.rectangle() 是 OpenCV 提供的一个绘制矩形框的函数,用于在图像上绘制矩形。其中,frame 是要绘制矩形框的图像,(x, y)(x+w, y+h) 分别是矩形框左上角和右下角的坐标,(0, 255, 0) 是绘制矩形框的颜色(在 RGB 颜色空间中,绿色的值为 255,而红色和蓝色的值都为 0),2 是矩形框的线宽。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/235669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迪文屏开发保姆级教程——页面键盘

迪文屏页面键盘保姆级教程。 本篇文章主要介绍了在DGBUS平台上使用页面键盘的步骤。 迪文屏官方开发指南PDF:(不方便下载的私聊我发给你) https://download.csdn.net/download/qq_21370051/88647174?spm1001.2014.3001.5503https://downloa…

vivado 关于时钟

关于时钟 在数字设计中,时钟代表了从寄存器可靠传输数据的时间基准注册。AMD Vivado™集成设计环境(IDE)计时引擎使用时钟计算时序路径要求并通过以下方式报告设计时序裕度的特性松弛计算的方法有关更多信息,请参阅Vivado Design…

Oracle 游标混合使用

存储过程:cursor_4 (cursor_1 cursor_2 cursor_3 ) CREATE OR REPLACE PROCEDURE TKSWSHRZS.PROC_BBBBB(in_FYear NUMBER ,in_FPeriod NUMBER ) ISv_name varchar2(100) :;v_adminnumber varchar2(100) :;v_Company_FNumber VARCHAR2(10…

AI百模大战:引领行业变革与开启人才黄金时代

🍎个人博客:个人主页 🏆个人专栏:Linux学习 ⛳️ 功不唐捐,玉汝于成 目录 前言 技术进步:AI的飞速发展 1. 深度学习的多领域应用 2. 自然语言处理的语境理解提升 3. 计算机视觉的实时处理能力提高 4…

Python学习笔记(六):函数的多返回值、函数的多种参数使用形式、匿名函数、文件的读取操作、文件的写入 、文件的追加

目录 一、函数的多返回值 二、函数的多种参数使用形式 2.1位置参数 2.2关键字参数 2.3缺省参数 2.4不定长参数 三、匿名函数 3.1 函数作为参数传递 3.2 函数的定义 3.3 匿名函数定义语法: 四、文件的读取操作 4.1 open()打开函数…

图卷积神经网络发展

1. 图神经网络(GNN) 图神经网络的概念最早在2005年提出。2009年Franco博士在其论文 [2]中定义了图神经网络的理论基础。 本文中所提到的图均指图论中的图(Graph)。它是一种由若干个结点(Node)及连接两个结点的边(Edge)所构成的图形,用于刻画…

ETL-从1学到100(1/100):ETL涉及到的名词解释

本文章主要介绍ETL和大数据中涉及到名词,同时解释这些名词的含义。由于不是一次性收集这些名词,所以这篇文章将会持续更新,更新日志会存放在本段话下面: 12-19更新:OLTP、OLAP、BI、ETL。 12-20更新:ELT、…

php文本文件操作和php文本文件操作像数据库一样操

一、在PHP中,你可以使用一些内置的函数来进行文本文件操作。下面是一些常见的文本文件操作示 例: 打开文件: $filename "example.txt"; $file fopen($filename, "r"); // 打开文件以供读取 $file fopen($filename,…

【模式识别】解锁降维奥秘:深度剖析PCA人脸识别技术

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《模式之谜 | 数据奇迹解码》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 🌌1 初识模式识…

12.20力扣

2828. 判别首字母缩略词 题目介绍:   给你一个字符串数组 words 和一个字符串 s ,请你判断 s 是不是 words 的 首字母缩略词 。   如果可以按顺序串联 words 中每个字符串的第一个字符形成字符串 s ,则认为 s 是 words 的首字母缩略词。…

智能化物联网(IoT):发展、问题与未来前景

导言 智能化物联网(IoT)作为信息技术领域的一项核心技术,正在深刻改变人们的生活和工作方式。本文将深入研究IoT的发展过程、遇到的问题及解决过程、未来的可用范围,以及在各国的应用和未来的研究趋势。探讨在哪些方面能够取得胜利…

k8s-ingress特性 9

TLS加密 创建证书 测试访问 auth认证 创建认证文件 rewrite重定向 进入域名时,会自动重定向到hostname.html 示例: 测试 版本的升级迭代,之前利用控制器进行滚动更新,在升级过程中无法做到快速回滚 更加平滑的升级&#xff1…

【数据结构】线段树算法总结(区间修改)

知识概览 线段树一般有5个操作: pushup:用子节点更新当前节点信息pushdown:把懒标记往下传build:初始化一棵树modify:修改一个区间query:查询一个区间 不带懒标记(支持单点修改)的线…

【PostgreSQL】从零开始:(二十)数据类型-日期/时间类型

日期/时间类型是一种数据类型,用于表示日期和时间的值。在PostgreSQL数据库中,日期/时间类型通常包括以下几种形式: 名字存储大小描述最低值最高值最小单位timestamp [(p)][without time zone]8字节日期和时间(无时区公元前4713年294276 AD1…

Mysql-干净卸载教程

卸载 服务停掉 先把mysql服务停掉,如下点击右键,停止运行。 删除C盘内文件 接下来c盘里面的三个文件下的MySQL一一删除,需要注意的是 需要注意的是programdata文件下可能 隐藏了MySQL文件,所以可以在查看选项显示隐藏的文件。 …

PolarDB-X、OceanBase、CockroachDB、TiDB二级索引写入性能测评

为什么要做这个测试 二级索引是关系型数据库相较于NoSQL数据库的一个关键差异。二级索引必须是强一致的,因此索引的写入需要与主键的写入放在一个事务当中,事务的性能是二级索引性能的基础。 目前市面上的分布式数据库中,从使用体验的角度看…

前后端分离下的鸿鹄电子招投标系统:使用Spring Boot、Mybatis、Redis和Layui实现源码与立项流程

在数字化时代,采购管理也正经历着前所未有的变革。全过程数字化采购管理成为了企业追求高效、透明和规范的关键。该系统通过Spring Cloud、Spring Boot2、Mybatis等先进技术,打造了从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通过…

argmin与argmax

argmin 是一个数学术语,用于表示一个函数在其定义域中取得最小值的参数值(自变量的值),而不是最小值本身。 具体来说,argmin 表示函数的自变量(通常是一个实数或向量),当输入到该函数…

VueRouter路由

目录 一、路由的基本使用 二、多级路由 三、路由的query参数 四、命令路由 五、路由的params参数 六、路由的props配置 七、router-link的replace的属性 八、编程式路由导航 九、缓存路由组件 十、全局路由守卫 十二、组件内部路由守卫 十三、history模式和hash模式…

JavaWeb笔记之前端开发JavaScript

一、引言 1.1 简介 JavaScript一种解释性脚本语言,是一种动态类型、弱类型、基于原型继承的语言,内置支持类型。 它的解释器被称为JavaScript引擎,作为浏览器的一部分,广泛用于客户端的脚本语言,用来给HTML网页增加…