【进阶OpenCV】 (12)--人脸检测识别

news/2024/10/22 14:43:28/

文章目录

  • 人脸识别
    • 一、获取分类器
    • 二、代码实现
      • 1. 图片预处理
      • 2. 加载人脸检测分类器
      • 3. 检测人脸
      • 4. 标注人脸
  • 总结

人脸识别

要实现人脸识别首先要判断当前图像中是否出现了人脸,这就是人脸检测。只有检测到图像中出现了人脸,才能据此判断这个人到底是谁。那么,如何实现人脸识别呢?

调用 OpenCV 中训练好的分类器实现人脸检测。OpenCV 提供了训练好的haar级联分类器,OpenCV 还提供了使用 HOG 特征(主要用于行人检测)和 LBP 算法的级联分类器。

  • 分类器作用这个分类器是通过机器学习算法训练得到的,能够识别出图像中与人脸特征相匹配的区域。

接下来,我们来尝试对以下照片进行人脸检测:

在这里插入图片描述

一、获取分类器

  • 分类器作用这个分类器是通过机器学习算法训练得到的,能够识别出图像中与人脸特征相匹配的区域。

如何获取分类器呢?在左边的工程中找到外部库“External Libraries”,找到site-packages包,接着找到我们安装的第三方库cv2,该库下的data中,保存着分类器:

在这里插入图片描述

在这里插入图片描述

  • 路径External Libraries/site-packages/cv2/data

二、代码实现

1. 图片预处理

使用cv2.cvtColor()函数将读取的彩色图片转换为灰度图。这是因为人脸检测算法通常在灰度图上运行得更快且更有效

import cv2
image = cv2.imread('p1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

2. 加载人脸检测分类器

使用cv2.CascadeClassifier()函数加载预训练的人脸检测分类器。这个分类器是基于Haar特征的,文件名为**“haarcascade_frontalface_default.xml”**,它通常与OpenCV库一起提供。

faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

3. 检测人脸

  • detectMultiScale()函数
faces = faceCascade.detectMultiScale(gray, scaleFactor, minNeighbors, minSize)
  • 参数
-- faces:该函数返回一个人脸区域的列表。每个区域由其左上角的坐标(x, y)、宽度w和高度h表示。
-- scaleFactor:控制图像尺寸减小的比例。
-- minNeighbors:表示每个候选矩形区域需要有多少个相邻的矩形区域来保留该区域。
-- minSize:定义了人脸可能的最小尺寸。
  • 代码
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=10, minSize=(8,8))
print("发现{0}张人脸!".format(len(faces)))  
print("其位置分别是:", faces)
-------------
发现4张人脸!
其位置分别是: [[208 122 128 128][375 171 132 132][ 37 153 127 127][613 184 148 148]]

4. 标注人脸

使用cv2.rectangle()函数在原始图片上绘制绿色矩形框,标记出检测到的人脸位置。

for (x,y,w,h) in faces:cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2)
cv2.imshow("result",image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

总结

本篇介绍了如何对人脸进行人脸识别检测。就是利用已经训练好的分类器模型,直接进行加载利用,识别图片。


http://www.ppmy.cn/news/1538979.html

相关文章

QD1-P23 CSS 基础选择器

本节学习:CSS 基础选择器(5种) 本节视频 https://www.bilibili.com/video/BV1n64y1U7oj?p23 基础选择器是 CSS 中最常用的选择器类型,它们用于选择 HTML 文档中的元素。以下是基础选择器的列表以及它们的优先级(权重…

Redis 列表(List)

Redis 列表(List) Redis 是一个开源的,内存中的数据结构存储系统,可以用作数据库、缓存和消息中介。它支持多种类型的数据结构,包括字符串、哈希、列表、集合、有序集合等。本文将重点介绍 Redis 中的列表(List)数据结…

docker详解介绍+基础操作 (四)容器镜像

一.镜像结构和原理 Docker 镜像是 Docker 技术的核心组成部分之一,它用于封装应用程序及其依赖项,以便在任何支持 Docker 的环境中运行。了解 Docker 镜像的结构和原理对于有效使用 Docker 至关重要。以下是对 Docker 镜像结构和原理的详细介绍。 Dock…

318页PPT5G智慧校园顶层设计方案

2019年,中共中央、国务院印发的《中国教育现代化2035》提出从构建更为完善信息化基础环境、配置学校数字教学资源、建立学校信息化系统运行维护长效机制、统筹建设一体化智能化教学和管理与服务平台等方面建设智能化校园。因此,未来随着信息通信技术的不…

盒子模型的简单运用

1.块内元素与行内元素 HTML_code <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</titl…

树莓派应用--AI项目实战篇来啦-12.OpenCV摄像头云台物体追踪

1. 介绍 本项目主要是实现OpenCV识别物体&#xff0c;找出中心位置&#xff0c;根据中心位置的偏离情况来修正二维云台&#xff0c;让物体的中心位置始终处于图像的中心位置&#xff0c;要保证追踪的流畅性&#xff0c;这里引入了 PID算法来抑制云台的抖动。 2. PID算法 在实际…

自然语言处理 (NLP) 的 5 个步骤

自然语言处理 (NLP) 的 5 个步骤 引言 如今&#xff0c;我们的世界在数字化连接方面达到了前所未有的水平。信息、见解和数据不断争夺我们的注意力&#xff0c;我们不可能全部消化。对于你的企业来说&#xff0c;挑战在于了解客户和潜在客户对你的产品和服务的看法&#xff0c;…

同城搭子怎么找?靠谱同城找搭子交友攻略分享!

在繁华的城市中&#xff0c;我们常常渴望有个搭子相伴&#xff0c;一起分享生活的点滴。无论是寻找一起品尝美食的饭搭子&#xff0c;还是共同挥洒汗水的运动搭子&#xff0c;亦或是畅谈心事的聊天搭子&#xff0c;都能让生活更加丰富多彩。那么&#xff0c;如何才能找到那个与…