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…

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)所构成的图形,用于刻画…

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

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

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

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

k8s-ingress特性 9

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

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

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

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 表示函数的自变量(通常是一个实数或向量),当输入到该函数…

JavaWeb笔记之前端开发JavaScript

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

统计个数并调用--函数设计与实现

#定义函数 count(s) ,统计字符串中小写字母、大写字母、数字的个数,并以字典为结果返回给调用函数。 # (1)判断字符类型 def count(s):#创建字典,用于保存变量dictionary {数字: 0, 小写字母: 0, 大写字母: 0, 其他字符: 0}for c in s:if c.isdigit():d…

React学习计划-React16--React基础(三)收集表单数据、高阶函数柯里化、类的复习

1. 收集表单数据 包含表单的组件分类 受控组件——页面中所有输入类的DOM,随着输入,把值存维护在状态里,需要用的时候去状态里取值(推荐,避免了过渡使用ref)非受控组件——页面中所有输入类的DOM,现用现取…

Java 并发编程 —— Fork/Join 框架的原理详解

目录 一. 前言 二. 并发和并行 2.1. 并发 2.2. 并行 2.3. 分治法 三. ForkJoin 并行处理框架的理论 3.1. ForkJoin 框架概述 3.2. ForkJoin 框架原理 3.3. 工作窃取算法 四. ForkJoin 并行处理框架的实现 4.1. ForkJoinPool 类 4.2. ForkJoinWorkerThread 类 4.3.…

MongoDB的原子操作findAndModify和findOneAndUpdate

本文主要介绍MongoDB的原子操作findAndModify和findOneAndUpdate。 目录 MongoDB的原子操作一、findAndModify二、findOneAndUpdate MongoDB的原子操作 MongoDB的原子操作指的是在单个操作中对数据库的数据进行读取和修改,并确保操作是原子的,即要么完全…

Swagger2之SpringBoot集成使用

前言: 我们对于Mybatis-Plus的分享较多,都是接触的一些数据库相关的知识,今天给大家带来的是Swagger2 Swagger2 1.介绍: Swagger2是一个规范和完整的框架,用于生成、描述、调用和可视化Restful风格的web服务&#xff…

【蓝桥杯】专题练习

前缀和 3956. 截断数组 - AcWing题库 一看到题目很容易想到的思路是对数组求前缀和&#xff0c;然后枚举两个分段点就好&#xff0c;时间复杂度是On^2&#xff0c;n是1e5会t&#xff0c;需要优化。 朴素的代码&#xff0c;会超时&#xff1a; #include <bits/stdc.h> u…