树莓派4B_OpenCv学习笔记21:OpenCV_haar人脸识别

 今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi)

 本人所用树莓派4B 装载的系统与版本如下:

 版本可用命令 (lsb_release -a) 查询:

 Opencv 版本是4.5.1:

 Python 版本3.7.3:

今日学习:OpenCV_haar人脸识别

文章提供测试代码讲解,整体代码贴出、测试效果图、完整测试工程下载

目录

 整体代码贴出:

测试效果图:

整体工程下载:

网上学习资料网址贴出:


 

基于Haar特征和AdaBoost算法训练而成的xml

 以下有XML关特征分类集的知识为AI生成:

1. 文件用途

  • 人脸检测:该文件能够识别并标记出图像或视频帧中的正面人脸区域。
  • 应用场景:广泛应用于人脸识别、安防监控、人脸支付等领域。

2. 算法原理

  • Haar特征:Haar特征是一种图像局部特征描述子,通过计算图像中特定区域的特征值(如黑白矩形框内的像素和之差)来描述图像的局部结构。这些特征能够有效地捕捉图像中的边缘、纹理等信息,适用于面部检测等任务。
  • AdaBoost算法:AdaBoost是一种集成学习算法,用于构建多个弱分类器,并将它们组合成一个强分类器。在Haarcascade算法中,AdaBoost算法用于优化级联分类器的性能,通过不断地对分类器进行训练和调整,提高分类器的准确性和鲁棒性。
  • 级联分类器:级联分类器是一种常用的分类器结构,它将多个弱分类器组合在一起,形成一个强分类器。在Haarcascade算法中,级联分类器用于将图像中的面部区域与非面部区域进行区分。

3. 文件位置

  • OpenCV安装目录:在OpenCV的安装目录下,通常可以在data/haarcascades文件夹中找到该文件。具体位置可能因OpenCV的安装方式和版本而有所不同。
  • GitHub仓库:OpenCV的GitHub仓库中也包含了该文件,可以在opencv/data/haarcascades路径下找到。

4. 使用方法

在OpenCV中,可以通过cv2.CascadeClassifier()函数加载haarcascade_frontalface_default.xml文件,创建一个人脸检测器对象。然后,使用该对象对图像或视频帧进行人脸检测。

5. 注意事项

  • 检测效果:虽然haarcascade_frontalface_default.xml文件在大多数情况下能够取得较好的检测效果,但在某些复杂场景下(如光照变化、遮挡、姿态变化等)可能会出现误检或漏检的情况。
  • 性能优化:为了提高检测性能和准确性,可以根据具体应用场景对模型进行调优或选择其他更适合的模型。

 

cv2.CascadeClassifier 是 OpenCV 库中用于对象检测(尤其是面部、眼睛、车辆等)的一个非常有效的工具。它基于 Viola-Li 积分图像和 AdaBoost 算法,能够快速地从图像中检测出预先训练好的对象。在你给出的例子中,haarcascade_frontalface_default.xmlhaarcascade_eye.xml 是两个预训练的 Haar 特征分类器文件,分别用于检测正面人脸和眼睛。

关于训练你自己的 Haar 特征分类器

可以训练你自己的 Haar 特征分类器,但这通常是一个相对复杂和耗时的过程,需要大量的标记数据(即带有标注的图像)和一定的机器学习知识。以下是训练 Haar 特征分类器的一般步骤:

  1. 收集数据集
    • 你需要收集大量的图像,这些图像应该包含你想要检测的对象(例如,不同角度、光照条件下的面部或眼睛)。
    • 这些图像需要被手动标注,指出每个对象的确切位置(通常是矩形框)。
  2. 准备数据
    • 将你的数据集转换为 OpenCV 需要的格式。这通常涉及到将图像和对应的标注信息组织成一定的文件结构。
  3. 训练分类器
    • 使用 OpenCV 的 opencv_traincascade 工具或类似的库来训练你的分类器。这个工具会读取你的数据集,提取 Haar 特征,并使用 AdaBoost 算法来训练一个分类器。
    • 训练过程可能需要多次迭代和调整参数,以达到最佳的检测效果。
  4. 评估分类器
    • 使用一个独立的测试集来评估你的分类器的性能。
    • 检查准确率、召回率和误报率等指标。
  5. 优化和部署
    • 根据测试结果优化你的分类器(例如,调整训练参数、收集更多数据等)。
    • 一旦你满意了分类器的性能,就可以将其部署到你的应用程序中。

注意事项

  • 训练 Haar 特征分类器需要大量的计算资源(CPU 时间和内存)。
  • 收集高质量、多样化的数据集对于训练出好的分类器至关重要。
  • Haar 特征分类器对于光照变化、遮挡和角度变化等因素比较敏感,可能需要在这些方面进行优化。

由于这些原因,许多开发者选择使用预训练的 Haar 特征分类器,或者探索其他更现代的对象检测方法,如基于深度学习的模型(如 YOLO、SSD、Faster R-CNN 等),这些方法在检测精度和效率方面通常表现更好。

 整体代码贴出:

这个代码展示了识别人脸以及人眼:

引用预先训练好的XML文件,XML文件要与python文件在同一目录!

# -*- coding: utf-8 -*-
import numpy as np
import cv2# 这两行代码加载了Haar特征分类器,用于检测人脸和眼睛。
# haarcascade_frontalface_default.xml和haarcascade_eye.xml是预先训练好的XML文件,包含了检测人脸和眼睛所需的特征数据。
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')cap = cv2.VideoCapture(0)while 1:ret, img = cap.read()#cv2.flip(img,1)将图像水平翻转,因为摄像头捕获的图像通常是镜像的。img = cv2.flip(img,1)#cv2.cvtColor将图像从BGR颜色空间转换为灰度图像,因为Haar特征分类器在灰度图像上工作得更好。gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#使用人脸分类器在灰度图像上检测多个人脸。detectMultiScale方法返回检测到的面部的边界框列表。faces = face_cascade.detectMultiScale(gray, 1.3, 5)#遍历检测到的每个人脸,x,y,w,h分别是边界框的左上角坐标、宽度和高度。for (x,y,w,h) in faces:#使用cv2.rectangle在原始图像上绘制人脸的矩形框cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)#从人脸区域中裁剪出ROI(Region of Interest,感兴趣区域),并在灰度图像和原始图像上分别进行裁剪roi_gray = gray[y:y+h, x:x+w]roi_color = img[y:y+h, x:x+w]print (int(x+w/2), int(y+h/2))#在人脸ROI上检测眼睛,并在检测到的眼睛位置绘制绿色矩形框eyes = eye_cascade.detectMultiScale(roi_gray)for (ex,ey,ew,eh) in eyes:cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)#显示处理后的图像cv2.imshow('img',img)key = cv2.waitKey(1) & 0xFFif key == ord("q"):breakcap.release()
cv2.destroyAllWindows()

测试效果图:

这里我在自己的PC电脑上也配置了python3.8 含有OpenCv 4.5.1的环境,

因此这第一张图先在 Pycharm 中测试了:

这是在树莓派远程连接测试的效果:

整体工程下载:

https://download.csdn.net/download/qq_64257614/89525385

网上学习资料网址贴出:

[树莓派基础]13.树莓派OpenCV人脸识别视频讲解_哔哩哔哩_bilibili

 https://download.csdn.net/download/qq_64257614/89525385

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

python实现接口自动化

代码实现自动化相关理论 代码编写脚本和工具实现脚本区别是啥? 代码: 优点:代码灵活方便缺点:学习成本高 工具: 优点:易上手缺点:灵活度低,有局限性。 总结: 功能脚本:工…

【Ubuntu】详细说说Parallels DeskTop安装和使用Ubuntu系统

希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏 支持一下博主吧~ 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境二、Ubuntu系统的使用2.1 系统的下载2.2 系统的安装2.3 安装桌面版(可选)2.3.1 安装/更新apt2.3.2 安装桌面版2.3…

【Go】函数的使用

目录 函数返回多个值 init函数和import init函数 main函数 函数的参数 值传递 引用传递(指针) 函数返回多个值 用法如下: package mainimport ("fmt""strconv" )// 返回多个返回值,无参数名 func Mu…

华贝甄选绿色积分模式的可信赖之处揭秘

华贝甄选是天贝集团旗下的数字产融生态领先品牌,业务涵盖 PPP 产业、金融生态、国际投资、智慧能源、数字产业、智慧产业、三农产业、生物科技等领域。其优势在于通过多维系统助力 DAO 组织系统打造,实现财富与健康双丰收;打造全新生态体系&a…

FreeRTOS和UCOS操作系统使用笔记

FreeRTOS使用示例 任务创建与删除 #define START_TASK_PRIO 1 //任务优先级 (1) #define START_STK_SIZE 128 //任务堆栈大小 (2) TaskHandle_t StartTask_Handler; //任务句柄 (3) void start_task(void *pvParameters);//任务函数 (4)#define TASK1_…

vue3 学习 之 vue3使用

为什么要学习vue3呢? vue2.0也是现在比较稳定的一个版本,社区还有周边都比较完善,如果不是非必要其实我们不需要着急直接升级到vue3.0; 那为什么还要学习,主要是还是为了了解一下vue3.0相较于2.0的优势和特性,方便之后…

跳转控制语句—break和continue

break语句我本人只在switch语句和循环语句中遇见,continue则只在循环语句中遇见; 下面我来记录一下,它俩的不同之处: 1.break 相比之下,break是比较简单的,就是跳出循环体,执行循环体下方的代…

刷题之删除有序数组中的重复项(leetcode)

删除有序数组中的重复项 这题简单题&#xff0c;双指针&#xff0c;一个指针记录未重复的数的个数&#xff0c;另一个记录遍历的位置。 以下是简单模拟&#xff0c;可以优化&#xff1a; class Solution { public:int removeDuplicates(vector<int>& nums) {int l0…

智慧地产视觉监控系统开源了,系统采用多种优化技术,提高系统的响应速度和资源利用率

智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用户只需在界面上…

YOLOv5改进 | 注意力机制 | 结合静态和动态上下文信息的注意力机制【全网独家】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a; 《YOLOv5入门 改…

环信IM实现小米、oppo推送详细步骤

本文教大家集成环信IM后如何实现小米、oppo推送。 一、小米推送 步骤一、在小米开放平台创建应用。 在 小米开放平台 创建应用&#xff0c;开启推送服务。详见小米官方网站的 推送服务接入指南。 步骤二、上传推送证书。 注册完成后&#xff0c;需要在环信即时通讯云控制台…

「Java开发指南」如何用MyEclipse完成Spring Web Flow 2.0搭建?

本教程将引导您完成Spring Web Flow的软件组件生成&#xff0c;这是Spring的一个项目&#xff0c;用于简化Web应用程序的开发。虽然Spring Web Flow与Spring MVC兼容&#xff0c;但Spring Web Flow使用流而不是控制器来实现应用程序的Web层。在本教程中&#xff0c;您将学习如何…

Python前沿技术:机器学习与人工智能

Python前沿技术&#xff1a;机器学习与人工智能 一、引言 随着科技的飞速发展&#xff0c;机器学习和人工智能&#xff08;AI&#xff09;已经成为了计算机科学领域的热门话题。Python作为一门易学易用且功能强大的编程语言&#xff0c;已经成为了这两个领域的首选语言之一。本…

LibreOffice的国内镜像安装地址和node.js国内快速下载网站

文章目录 1、LibreOffice1.1、LibreOffice在application-conf.yml中的配置2、node.js 1、LibreOffice 国内镜像包网址&#xff1a;https://mirrors.cloud.tencent.com/libreoffice/libreoffice/ 1.1、LibreOffice在application-conf.yml中的配置 jodconverter:local:enable…

如何处理 PostgreSQL 中由于索引过多导致的性能下降问题?

文章目录 一、索引过多导致性能下降的原因二、识别过多索引导致的性能问题&#xff08;一&#xff09;监控数据库性能指标&#xff08;二&#xff09;检查索引使用情况&#xff08;三&#xff09;分析查询计划 三、解决方案&#xff08;一&#xff09;删除不必要的索引&#xf…

家里老人能操作的电视直播软件,目前能用的免费看直播的电视软件app,适合电视和手机使用!

2024年许多能看电视直播的软件都不能用了&#xff0c;家里的老人也不会手机投屏&#xff0c;平时什么娱乐都没有了&#xff0c;这真的太不方便了。 很多老人并不喜欢去买一个广电的机顶盒&#xff0c;或者花钱拉有线电视。 现在的电视大多数都是智能电视&#xff0c;所以许多电…

数据防泄密软件精选|6款好用的数据防泄漏软件强推

某科技公司会议室&#xff0c;CEO张总、CIO李总、信息安全主管王经理正围绕最近发生的一起数据泄露事件展开讨论。 张总&#xff08;忧虑&#xff09;: 大家&#xff0c;这次的数据泄露事件对我们来说是个沉重的打击。客户信息的外泄不仅损害了我们的信誉&#xff0c;还可能面…

lora/lycoris

Stable Diffusion 训练指南 (LyCORIS) | Coding HuskyStable Diffusion 文字生成图片的教程已经很多了。这篇文章是讲解如何用 Kohya Trainer 在 Google Colab 上训练一个 LyCORIS 模型。在读之前希望你已经至少玩过 Stable Diffusion。https://ericfu.me/stable-diffusion-fin…

2.硬盘和内存区别

2.2 磁盘比内存慢几万倍&#xff1f; 存储器方面的设备&#xff0c;分类比较多&#xff0c;那我们肯定不能只买一种存储器&#xff0c;比如你除了要买内存&#xff0c;还要买硬盘&#xff0c;而针对硬盘我们还可以选择是固态硬盘还是机械硬盘。 相信大家都知道内存和硬盘都属…