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

devtools/2024/10/18 14:27:43/

文章目录

  • 人脸识别
    • 一、获取分类器
    • 二、代码实现
      • 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/devtools/125387.html

相关文章

实时语音转文字(基于NAudio+Whisper+VOSP+Websocket)

今天花了大半天时间研究一个实时语音转文字的程序,目的还包括能够唤醒服务,并把命令提供给第三方。 由于这方面的材料已经很多,我就只把过程中遇到的和解决方案简单说下。源代码开源在AudioWhisper: 实时语音转文字(基于NAudioWhisperVOSPWe…

解决新版Android studio不能连接手机的问题

我要说的是一个特例,装了22年的版本AS可以正常连接手机,装了23年以后新版本,AS不能正常连接手机了,但是在CMD控制台可以正常的执行adb命令,并且CMD和AS都是指向D:\android_sdk\platform-tools\adb.exe 一、 为什么会出…

应对网站IP劫持的有效策略与技术手段

摘要: IP劫持是一种常见的网络攻击方式,攻击者通过非法手段获取目标网站服务器的控制权,进而改变其网络流量的路由路径,导致用户访问错误的站点。本文将介绍如何识别IP劫持,并提供一系列预防和应对措施,以确…

基于Android11简单分析audio_policy_configuration.xml

开篇先贴上一个高通的例子&#xff0c;后续基于此文件做具体分析。 1 <?xml version"1.0" encoding"UTF-8" standalone"yes"?> 2 <!-- Copyright (c) 2016-2019, The Linux Foundation. All rights reserved 3 Not a Contribut…

C# 字符串(string)三个不同的处理方法:IsNullOrEmpty、IsInterned 、IsNullOrWhiteSpace

在C#中&#xff0c;string.IsNullOrEmpty、string.IsInterned 和 string.IsNullOrWhiteSpace 是三个不同的字符串处理方法&#xff0c;它们各自有不同的用途&#xff1a; 1.string.IsNullOrEmpty&#xff1a; 这个方法用来检查字符串是否为null或者空字符串&#xff08;"…

harbor 如何做到物理删除镜像 harbor镜像清理脚本

一、背景 相比于nexus&#xff0c;harbor的一大优点是方便及时清理无用的docker镜像。本文就harbor怎么设置清理&#xff0c;梳理一下具体的操作办法。 harbor 版本是 v2.9.0 二、目标 随着我们推送至仓库的镜像越来越多&#xff0c;带来的一个最大运维问题就是存储空间的浪…

《OpenCV计算机视觉》—— 人脸检测

文章目录 一、人脸检测流程介绍二、用于人脸检测的关键方法1.加载分类器&#xff08;cv2.CascadeClassifier()&#xff09;2.检测图像中的人脸&#xff08;cv2.CascadeClassifier.detectMultiscale()&#xff09; 三、代码实现 一、人脸检测流程介绍 下面是一张含有多个人脸的…

高性能缓存方案 —— Caffeine

一、简介 Caffeine是一个高性能的Java缓存库&#xff0c;它提供了本地缓存的功能。 Caffeine和Redis都是内存级别的缓存&#xff0c;为什么要使用在这两缓存作为二级缓存&#xff0c;它们两有什么区别呢? 虽然它们都是内存级别的缓存&#xff0c;但是Redis是需要单独部署的&…