目录

初步效果设想

像SIRI那样的语音唤醒,开启服务
只有当摄像头检测到人脸时,舵机才开始调整位置,让人脸保持C位
检测人脸是否戴口罩了,没带就发出“提示”,戴了就不管
长时间不戴例如8s,就拍一张照,并发到我的qq邮箱

应用场景:疫情期间,超市、食堂、餐厅用该装置,相比让工作人员去提醒,可以省去大量人力、财力

分五大模块开发:语音唤醒、控制舵机、人脸追踪定位、人脸口罩识别、发送人脸图片至qq邮箱

1.语音唤醒模块

2.控制舵机模块

用两个舵机做一个二自由度云台, 云台外壳可从淘宝买


参考博客

①servoControl.py封装了controlTwoServos(pin1, angle1, pin2, angle2)方法,用来控制舵机
pin1、pin2分别指的是舵机1、舵机2的信号线所接引脚(BCM编码方式)
angle1、angle2分别指舵机1、舵机2要旋转的角度

舵机1控制水平旋转方向, 舵机2控制垂直旋转方向

servoControl.py 

import RPi.GPIO as GPIO
from time import sleepGPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)# 旋转角度转换到PWM占空比
def angleToDutyCycle(angle):return 2.5 + angle / 180.0 * 10# 控制两个舵机的函数
# pin1、pin2分别指的是舵机1、舵机2的信号线所接引脚
# angle1、angle2分别指舵机1、舵机2要旋转的角度
def controlTwoServos(pin1, angle1, pin2, angle2):GPIO.setup(pin1, GPIO.OUT, initial=False)GPIO.setup(pin2, GPIO.OUT, initial=False)p1 = GPIO.PWM(pin1, 50)             # 舵机1初始频率为50HZp1.start(angleToDutyCycle(90))      # 舵机1初始化角度为90sleep(0.5)p1.ChangeDutyCycle(angleToDutyCycle(angle1))          p2 = GPIO.PWM(pin2, 50)             # 舵机2初始频率为50HZp2.start(angleToDutyCycle(90))      # 舵机2初始化角度为90p2.ChangeDutyCycle(angleToDutyCycle(angle2))sleep(0.5)

②测试

main.py (main.py、servoControl.py在同一目录)

from servoControl import controlTwoServosif __name__ == '__main__':controlTwoServos(23, 80, 24, 80)

测试运行 python3  main.py

3.人脸追踪定位模块

参考博客

拍摄的照片640x480

算法如下(参考我上面画的图)

① 我这里规定摄像头拍摄的照片分辨率 640 x 480,所以照片中心坐标(320, 240)
② 利用face_recognition库中的face_locations()函数,算出人脸框的中心坐标

face_locations()会返回一个list,有几个人脸,list就有几个tuple,tuple=(top,right,bottom,left)
top指人脸框上边框到x轴的距离,right指人脸框右边框到y轴的距离
bottom指人脸框下边框到x轴的距离,left指人脸框左边框边到y轴的距离
人脸框的中心坐标((left+right)/2, (top+bottom)/2)

③ 根据照片中心坐标和人脸框的中心坐标很容易算出△x,△y
后面算法参考博客 博客地址

faceTracking.py 

# coding = utf-8
import face_recognition as fr
import cv2
from time import sleep
from servoControl import controlTwoServoswhile True:video_capture = cv2.VideoCapture(0)  # 创建视频对象,打开摄像头print('Capturing image...')# 摄像头抓取一帧照片# ret是布尔值,读取帧成功返回True,文件读到结尾,返回False(如果你读取的是视频,而不是在线拍摄)# frame就是每一帧的图像,一个三维矩阵# 默认拍摄的画面分辨率是640x480,想改可以去翻opencv官方文档ret, frame = video_capture.read()video_capture.release()# 缩小图片,加快处理速度,fx,fy表示x,y轴方向的缩小系数frame = cv2.resize(frame, (0,0), fx=0.5, fy=0.5)    rgb_frame = frame[:, :, ::-1]                   # 将cv2用的BGR颜色转换为face_recognition用的RGB颜色face_locations = fr.face_locations(rgb_frame)   # 获取这一帧里所有脸的位置# 如果画面中有人脸,任选一张人脸,记录下它的位置if len(face_locations) > 0:face_location = face_locations[0]top = face_location[0]right = face_location[1]bottom = face_location[2]left = face_location[3]center_x = (top + bottom) / 2center_y = (left + right) / 2print('捕捉到人脸!')else:center_x, center_y = 160, 120dx = (center_x - 160) * 0.3dy = (center_y - 120) * 0.3print(dx)print(dy)# 设置一个阈值,当角度大于3时,才移动if abs(dx) >= 3 or abs(dy) >= 3:x0 = 90 + dxif x0 > 180:  # 设置界限,超出范围不再转动,下同x0 = 180elif x0 < 0:x0 = 0y0 = 90 + dyif y0 > 180:y0 = 180elif y0 < 0:y0 = 0controlTwoServos(23, x0, 24, y0)

4.人脸口罩识别模块 

鉴于树莓派没有Nivida显卡,树莓派4的显卡是VideoCore VI GPU树莓派3的显卡我也不清楚,所以很多项目跑不了,调百度的API好像还要花钱o(╥﹏╥)o

我找了一个只需要opencv的项目,但是效果一般
【武汉加油!中国加油!】挑战七天 实现机器视觉检测有没有戴口罩系统——第四五六七天_云敬山-CSDN博客

我又找了一个基于opencv的,感觉可以
博客地址

项目地址

环境配置:安装opencv、numpy和pygame

pip3 install opencv-python
pip3 install numpy==1.21.4         # 安装numpy,我这里指定了版本
pip3 install pygame

我这里安装的opencv版本是4.5.4,默认有dnn模块,opencv如果版本低了好像还要安装扩展,反正保证要有dnn模块

在windows上跑没问题,在树莓派上跑有点问题,我改了一下

原文

修改之后

后来我还做了一点改动,察觉没有戴口罩就播放提示语音,还有,视频窗口就不展示了,树莓派配置差点

5.图片发送模块

①先基于下文进行配置  

树莓派 --- 开机自动发送IP到自己的QQ邮箱

②send_pic.py封装一个send_mail(file_path)方法,只要传入图片路径file_path,就能实现图片发送到我的qq邮箱

send_pic.py

# coding=utf-8
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart  # 创建附件类型# 设置发件人和收件人信息
my_sender='xxxxxxxxxxxxxxxxx'  # 发件人邮箱账号
my_pass = 'xxxxxxxxxxxxxxxxx'   # 发件人邮箱密码(之前获取的授权码)
my_user='xxxxxxxxxxxxxxxxx'    # 收件人邮箱账号
msg = MIMEMultipart('related')  # 邮件信息为空,相当于信封,related表示使用内嵌资源的形式,将邮件发送给对方def send_mail(file_path):ret=Truetry:# 发送信息内容msg_html = MIMEText('自拍照', 'html', 'utf-8')msg.attach(msg_html)# 发送图片,以附件形式msg_image = MIMEText(open(file_path, 'rb').read(), 'base64', 'utf-8')msg_image['Content-disposition'] = "attachment;filename='me.jpg'" # 设置图片在附件中的名字msg.attach(msg_image)msg['From']=formataddr(["Jack",my_sender])          # 括号里的对应发件人邮箱昵称、发件人邮箱账号msg['To']=formataddr(["Rose",my_user])              # 括号里的对应收件人邮箱昵称、收件人邮箱账号msg['Subject']="我的自拍照"                         # 邮件的主题,也可以说是标题server=smtplib.SMTP("smtp.qq.com", 587)             # 发件人邮箱中的SMTP服务器,端口是587server.login(my_sender, my_pass)                    # 括号中对应的是发件人邮箱账号、邮箱密码server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件server.quit()  # 关闭连接except Exception:ret=Falsereturn ret

③测试上面封装的send_mail(file_path)函数

main.py (main.py、send_pic.py、test.jpg在同一目录)

from send_pic import send_mailif __name__ == '__main__':if send_mail('test.jpg'):print('发送邮件成功!')else:print('发送邮件失败!')

6.模块整合

7.深入思考

①如果很多人不戴口罩,用qq邮件一张张发送人脸照片太麻烦了,还不如存到一个固定文件夹中

②如果一个人在监控范围内因为长时间不戴口罩(尽管有语音提示)而被记录下人脸,他走出监控范围才戴了口罩,第二次进入监控范围,如何消除上次记下的人脸记录?
其实我想了想,长时间不戴口罩就已经算是危险分子了,就不消除记录了吧,哈哈

③在超市、餐厅这样的地方,需要放多个这样的装置才能覆盖更大的范围

④人脸追踪云台监控相比传统固定监控,优势在于扩大了监控的范围

⑤舵机不能360度控制也是一个缺陷

树莓派 --- 人脸口罩识别智能监控相关推荐

  1. 人脸口罩识别的项目总结

    人脸口罩识别的项目总结 最近一段时间,国内部分地区又爆发了新冠疫情,传播速度很快.但最近天气炎热,人们戴口罩的自觉性不如从前了,在商场等公共场所,需要专门的人员去提醒顾客佩戴好口罩.因此萌发了使用计算 ...

  2. Python+Yolov5人脸口罩识别

     程序示例精选 Python+Yolov5人脸口罩识别 如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助! 前言 Yolov5比较Yolov4,Yolov3等其他识别框架,速度快 ...

  3. 人脸口罩识别_APP开发

    程序运行展示     程序相关说明 代码逻辑实现 使用tensorflow2.x训练的模型,可使用迁移学习减少训练参数,导出的tflite模型体积较小 相机模块使用CameraX,人脸检测模块使用Go ...

  4. python人脸口罩识别_基于Python+OpenCV的人脸口罩识别检测

    以下编程在Jupyter notbook平台上进行 一.OpenCV下载安装 二.人脸口罩数据集下载处理 (一)人脸口罩数据集下载 下载人脸口罩数据集的目的是利用OpenCV进行模型训练,这里采用口罩 ...

  5. 实战6:基于OpenCV的人脸口罩识别检测详细教程

    背景介绍:     从19年疫情爆发到现在,佩戴口罩对大家来说已是常态.应运而生的就有了很多相关应用,如病毒发展预测.口罩佩戴检测以及戴口罩的人脸识别等. 今天介绍的人脸口罩佩戴检测系统主要使用Ope ...

  6. 人脸口罩识别全面开放 6大能力快速部署 疫情服务项目免费使用

    科学有序复工复产是目前经济社会发展形势的客观要求,也是各地尽快恢复正常经济秩序的必要之举.随着返工人员陆续从全国各地回到工作城市,机场.火车站.地铁等人员密集的通行场所更要加强联防联控工作. 为保障及 ...

  7. 人脸口罩识别——人脸添加口罩方法masked_faces

    文章目录: 1 人脸添加口罩masked_faces 2 添加口罩原理 3 添加口罩代码操作 4 源码分析 A realistic approach to generate masked faces ...

  8. 【K210】人脸口罩识别

    硬件平台:K210 Sipeed Maix Dock 软件平台:maixpy .kmodelv4 实现功能 检测人脸是否佩戴口罩 第一步 训练模型 或 下载模型 模型下载地址:https://www. ...

  9. python人脸口罩识别训练模型_【每天进步一点点】基于ModelArts,跑通口罩检测案例(Python版本)——模型训练与转化部分...

    今天接着说说模型训练的部分,这部分比较简单,在ModelArts上官方提供了算法和强大的算力,这极大简化了AI开发中最为复杂的模型训练部分.这里要说明的是,这个算法提供了预置算法的版本(1种,GPU训 ...

最新文章

  1. django 增加验证邮箱功能
  2. ThumbnailUtils的使用
  3. Glib实例学习(6)双端队列
  4. android 文件并发读写,Android下,rxJava+retrofit 并发上传文件和串行上传文件的效率为什么差不多?...
  5. Python用@property使类方法像属性一样访问
  6. phpcms 指定id范围 调用_Elasticsearch v7 中Java High-Level REST Client同步和异步调用
  7. 刷magisk模块后不能开机_刷Magisk模块开机卡Logo了怎么办?两种方法教你轻松解决...
  8. oracle性能优化之awr分析
  9. 牛客网——最简真分数
  10. 【转】Emacs -- 自动补齐
  11. 用SDWebImage渐变加载图片
  12. .NET Framework总三
  13. 解析库的基本使用(BeautifulSoup、Xpath(重点)、PyQuery)
  14. python实现钉钉群自动警报
  15. oracle sla 设置文档,Oracle EBS SLA 详解(转)
  16. photoshop 安装和使用 蓝湖上传设计图
  17. android recyclerview 滑动状态,RecyclerView的滑动监听
  18. 更换固态硬盘并使用微pe安装windows7系统及万能网卡
  19. qprocess qt 打开word_Qt QProcess启动和关闭外部程序
  20. 2022年上海市安全员C证考试内容及上海市安全员C证考试技巧

热门文章

  1. 基于WIN32 API界面编程实现的贪吃蛇游戏
  2. 基于Selenium实现网易云音乐的登录
  3. 前后端项目的糅合模式mashup
  4. 多智能体强化学习-G2ANet
  5. SAP MM 常见移动类型及定义
  6. Programiranje
  7. Mongodb被黑经历
  8. 收益率的分解 无风险利率
  9. html知识点总结1
  10. 方阵的特征值与特征向量