****树莓派基于opencv的人脸识别和口罩检测****

本文介绍了在树莓派上使用opencv和face_recognition库进行人脸识别和口罩检测的步骤,包括人脸收集、模型训练和口罩识别。通过调整代码,可以实现实时监控并判断是否佩戴口罩。
摘要由CSDN通过智能技术生成

树莓派基于opencv的人脸识别和口罩检测

学习目标:

目标:人脸识别和口罩的检测
实现的功能:
1:检测到人脸,画框,并识别已训练的人的模型,并打印出名字
2:识别是否带了口罩


学习内容:

内容:基于python的opencv和face_recognition来实现
1、 掌握opencv,face_recognition的安装
2、 掌握 训练模型
3、 掌握调用模型
4、 掌握树莓派安装opencv和contrib以及face_recognition



前言

打电赛输了,在比赛的几天后一个人做出来,也了解到了硬件的重要性

一、opencv是什么?

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1] 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。

二、步骤

1.树莓派安装模块

值得一提,我就是安装不上才失败的,因为有的模块需要很大的内存,而树莓派分不出来,所以经常就是安装到99%的时候卡住,然后就是程序已杀死,我心态崩了都!!!!

安装教程链接:

1:安装opencv:

https://zhuanlan.zhihu.com/p/92184435

2:安装dlib:

https://blog.csdn.net/weixin_44086593/article/details/87467537

3:安装face_recognition:

https://blog.csdn.net/weixin_43106043/article/details/104962026

4:xml模型的下载:
链接:https://pan.baidu.com/s/1ULupRUJGRtRRPfLw-Iooyw
提取码:6zf8

祝大家成功哈哈哈哈哈

2.设计思路

有点长,希望大家不要嫌啰嗦
1;首先,在多种优秀的人脸识别的方法中,我们还是毅然决然的选择了最为有效,最为方便的python+opencv,因为其有相对应的函数库供我们使用,效果明显,代码简洁。

2;收集:一开始,因为只需要测试三个队员和其他未知者,所以先通过face_collect.py开始通过电脑内置摄像头对三个队员进行人脸采集,并输入自己的id号和顺序,便于后期的数组遍历寻找匹配对象,加载人脸分类识别器,导入人脸识别的模型找出人脸进行截取,经过测试,由***于彩色的照片会占据大量内存并且受外界干扰明显,所以使用OpenCV调用摄像头获取图像并进行基础的处理(灰度等)转为灰度图片,减少程序符合,提高识别度,特定功能库Dlib进行特征获取,然后以jpg格式保存,并每个人都存储101张在totalfaces的文件中。***

3;训练:对得到的303张jpg图片,通过python中的os文件处理,PIL以及numpy数据库的结合,再次导入人脸识别模型和输入输出格式的绝对路径的设置,通过遍历照片文件进行对其整体的一个封装,并且保存为以yml为后缀的训练型文件。我们在前一部分的同目录下创建一个Python文件,文件名为trainner.py,用于编写数据集生成脚本。同目录下,创建一个文件夹,名为trainner,用于存放我们训练后的识别器。

4;测试:由于项目需要实现口罩的检测功能,但是经过查找opencv的API文档,并没有找到针对口罩的识别模型,所以,通过思考和小组讨论,因为口罩主要是掩盖了口鼻,所以以是否检测到下半部分的嘴巴替代,如果检测到嘴巴,并框选出来,则说明并没有佩戴口罩,若没有检测到嘴,则说明有按照防控标准佩戴口罩。LBP是一种特征提取方式,能提取出图像的局部的纹理特征,最开始的LBP算子是在3X3窗口中,取中心像素的像素值为阀值,与其周围八个像素点的像素值比较,若像素点的像素值大于阀值,则此像素点被标记为1,否则标记为0。这样就能得到一个八位二进制的码,转换为十进制即LBP码,于是得到了这个窗口的LBP值,用这个值来反映这个窗口内的纹理信息。LBPH是在原始LBP上的一个改进,在opencv支持下我们可以直接调用函数直接创建一个LBPH人脸识别的模型。就此开始通过face.LBPHFaceRecognizer_create读取前一步的训练模型,定义数组,填入队员姓名,同样的,通过内置摄像头扫出人脸,并转换为灰度,并记录下人脸是识别范围,作为下一步检测嘴的区域范围,进一步缩小工作量,以达到更为准确的识别读取。为了实现检测是否有嘴巴,我们通过len()方法对画出的矩形框进行与0的比较,大于0则打印没带口罩,小于0则打印有带口罩,并通过之前识别的数据,进行格式化输出并打印在对话框中,并在程序最后设置了窗口等待以及键盘控制退出等按钮的设置,以及在左上角设置了相关的fps参数,来显示面部识别的帧数,更加直观的呈现了数据,最后关闭摄像头,并释放窗口。

代码如下:
face_collect.py
这个是收集101张人脸
**

然后注意一下,下面的yml文件,和xml文件,必须都用绝对路径来写!!!!!!

**

import cv2
#计数
count = 0
#输入id
face_id = input('\n enter user id:')
#输入姓名
username = input('\n enter user name:')
print('\n 正在初始化脸部识别,请保持在摄像头前面 .......')
# 读取内置摄像头中的图像,获取图像grabbed为true
cap = cv2.VideoCapture(0)
# 加载人脸分类识别器
face_detector = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')#改成这个文件的绝对路径!!!

while True:
    grabbed, img = cap.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值