使用树莓派实现的口罩检测
Nie_Hen 2020-05-17 11:48:53 17280 收藏 614 原力计划
分类专栏: IOT应用 人工智能
版权
基于树莓派3B+ 官方摄像头 两个指示灯 以及基于目标检测SSD算法实现的树莓派口罩检测
项目演示: 链接
口罩检测项目地址
在这里插入图片描述
使用的口罩检测 项目是AIZOO团队实现的 使用的是目标检测常用的SSD算法。
该团队也提供了数据集,大家也可以自己去训练一下。
(由于疫情在家 连不上实验室的服务器我还无法训练)
项目GitHub链接
在这里插入图片描述
(最后那几帧是做GIF图的问题…)
AIZOO团队给出的 代码在Windows上很容易以跑通。安装opencv和kears比较容易。也不需要很复杂的更改代码。
下面重点讲在树莓派上的配置以及使用
树莓派配置
参考链接有很多基础配置
对树莓派进行换源 进行网络配置等等
1.配置环境
使用python版本是 python3 (我使用的是python3.5)
opencv以及kears 这两个库在树莓派上比较难以安装
参考我博客里面 都有两个的安装教程
树莓派上安装opencv以及各种采坑
opencv要耐心仔细装,容易出错!!!
树莓派安装kears
终端输入 ls /dev/ 进行验证
如果输出内容中有video0 跳过下一步
ls /dev/无 video0:
1、输入 sudo raspi-config
先在interfacing option里把camera接口打开(enable)。
2、如果使用的是树莓派官方摄像头,还需输入sudo modprobe bcm2835-v4l2
输入这行命令,发现/dev/下已经有摄像头的设备了。
这句话相当于加载驱动模块,每次开机都要开启,摄像头才能使用。
可以将这条命令放入 /etc/rc.local 文件中,让其自启动。
树莓派摄像头Camera的使用
python调用摄像头
from picamera import PiCamera
from time import sleep
camera = PiCamera()
camera.rotation = 180
camera.start_preview(alpha=200) # Make the camera preview see-through by setting an alpha level from 0 to 255
sleep(5)
camera.stop_preview()
1
2
3
4
5
6
7
8
9
10
上述代码实现打开摄像头预览5秒钟再关闭的功能。但是如果这个程序仅在Raspberry Pi接入了显示器才有效,SSH或是VNC访问是无效的。
Raspberry Pi 摄像头模块入门
树莓派相机设置 远程打开预览
opencv调用摄像头
使用opencv直接打开摄像头
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while(1):
# get a frame
ret, frame = cap.read()
# show a frame
cv2.imshow(“capture”, frame)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
cap.release()
cv2.destroyAllWindows()
1
2
3
4
5
6
7
8
9
10
11
12
13
如果打不开摄像头 去上面看是不是没有video0
树莓派获取到视频流给opencv
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 32
camera.hflip = True
camera.vflip = True
rawCapture = PiRGBArray(camera, size=(640, 480))
time.sleep(0.1)
for frame in camera.capture_continuous(rawCapture, format=“bgr”, use_video_port=True):
# grab the raw NumPy array representing the image, then initialize the timestamp
# and occupied/unoccupied text
image = frame.array
# show the frame
cv2.imshow(“Frame”, image)
key = cv2.waitKey(1) & 0xFF
# clear the stream in preparation for the next frame
rawCapture.truncate(0)
# if the q
key was pressed, break from the loop
if key == ord(“q”):
break
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
推荐使用第一种方式 简单
参考链接Raspberry调用picamera库控制自带的摄像头
python控制树莓派GPIO
要用到两个led灯 所以要在代码里面控制GPIO
安装库
sudo apt-get install python-rpi.gpio
示例代码
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)
while True:
GPIO.output(11, GPIO.HIGH)
time.sleep(1)
GPIO.output(11, GPIO.LOW)
time.sleep(1)
GPIO.output(13, GPIO.HIGH)
time.sleep(1)
GPIO.output(13, GPIO.LOW)
time.sleep(1)
GPIO.output(15, GPIO.HIGH)
time.sleep(1)
GPIO.output(15, GPIO.LOW)
time.sleep(1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
enter description here
两个led灯一个 接两个普通输出引脚就行。另外记得接地。
我用的是一个13 一个是15
在这里插入图片描述
更改代码、完善代码
现在环境配置好了
可以调用摄像头 可以控制GPIO了
只需要:
根据上面的口罩检测的项目放到树莓派上
改动代码增加GPIO的部分
改动输入参数部分
根据运行情况更改检测帧率
我改好的代码(pi_cam.py)会放到下面。
运行报错out of memory
树莓派性能不行 跑起来还是有点费劲
1.增加可用内存量(减少分配给GPU的内存)
sudo raspi-congfig 启动树莓派配置程序, advanced options->memory split
分给GPU的内存量设为32(如果设为16或0,系统会默认分配64M,就不能做到内存占用最少)。
需要注意的是如果启用摄像头,则GPU会自动被分配128M内存。
2.关掉图形化界面
sudo raspi-config
enter description here
不再报出out of memory
但是卡顿的情况依然存在
再改代码:
增加检测帧数
简化代码将opencv无用部分删除(这样看不到画面了只能通过灯珠变化和终端 判断情况)
项目演示: 链接
在这里插入图片描述
在这里插入图片描述
else
根据上面的教程大家可以自己写打开树莓派摄像头检测并控制灯,也可以看我写好的。
大家对物联网 计算机视觉的应用感兴趣的可以关注我,我博客内有相关文章,后续也会发一下类似的应用型文章(可以用来学习以及参加比赛或者做毕设)
pi_cam.py下载链接
使用方法: 将前面提到的AIZOO团队提供的项目下载下来。以及我写的pi_cam.py下载下来。放入同一目录下,上传到树莓派中(按照上面步骤 配置好环境 )。
命令行进入目录直接调用就可以,
python pi_cam.py
(如果python默认是python2.7 则要使用python3 pi_cam.py)
命令行中关掉 运行程序
ps -ef |grep pi_cam.py
enter description here
有什么问题可以评论交流。
感觉有用的或者帮助到你的可以收藏 点赞 关注。
(有问题需要交流可以加QQ1639206518 )
点赞
116
评论
44
分享
收藏
614
打赏
举报
关注
一键三连
点赞Mark关注该博主, 随时了解TA的最新博文
树莓派基础学习&树莓派项目实战演示&Python语言
04-22
课程主要学习树莓派的一些基础知识和一些常规的操作和安装软件出现的常见问题以及学习基于树莓派的一些项目,避免新手入坑。例如:从安装系统——远程桌面控制——中文界面的设置——密码的设置—— 安装输入法 ——Linux基础命令——文件操作——树莓派摄像头的使用 ——基于树莓派人脸识别——语音识别——图像识别——语音播报——OpenCV2的安装——无论是新手还是树莓派爱好者希望能在里边共同学习到一些树莓派知识和使用方法。
优质评论可以帮助作者获得更高权重
表情包
zhoumoon
码哥码哥周健文:在生产环境下还是不建议使用Python8月前回复
点赞
10
siriuswilliam
码哥码哥叫我学弟回复:原来opencv很不成熟17天前回复
点赞
zhoumoon
码哥码哥周健文回复brandy2008:依附式开发,意味着在你不完全了解它的情况下使用开源库,在生产环境中会比较容易出现各种意想不到的bug,除非团队有足够耐心维护,否则建议使用付费或成熟可用的开源库。3月前回复
点赞
zhoumoon
码哥码哥周健文回复brandy2008:得益于开源库,用python做实验很方便,如果对性能和稳定性有要求,建议还是使用C/C++部署到生成环境当中。7月前回复
点赞
brandy2008
brandy2008回复:生产环境为什么不建议用Python?7月前回复
点赞
qq_37924905
爱码士爱码士水巷石子:博主写的非常清晰,对我很有帮助,谢谢,方便可以加个关注。共同学习!1月前回复
点赞
4
hihell
爱码士爱码士梦想橡皮擦:写的不错,顶个贴,点个赞,嘿嘿!1月前回复
点赞
2
jxyk2007
码哥码哥三块钱0794:学习了8月前回复
点赞
2
m0_46298587
拉马努金1729:人脸识别好像有个哈士奇人脸识别模块,连接arduino就可以用mind+编程,对于新手来说这个实现更简单。9天前回复
点赞
1
qq_44925043
Moement:树莓几8月前回复
点赞
1
Nirvana_6174
码哥码哥Nie_Hen回复:3B+8月前回复
点赞
daguangdian
爱码士爱码士DA光电:学习了16天前回复
点赞
sinat_51785486
码神码神龙卷风焦96:设计:告诉我问题,回车,问题出现17天前回复
点赞
qq_45937199
爱码士爱码士ctotalk:thanks,欢迎关注一起交流27天前回复
点赞
weixin_43913566
沈世安:大佬Tensorflow安装源码点不进去啊 有没有教程1月前回复
点赞
<123>
vant当中van-list的使用
柚子的
3万+
van-list里面的元素不能又float样式,否则会连续触发 load 事件 原代码