飞道的博客

使用树莓派实现的口罩检测

796人阅读  评论(0)

基于树莓派3B+ 官方摄像头 两个指示灯 以及基于目标检测SSD算法实现的树莓派口罩检测

项目演示链接

口罩检测项目地址

使用的口罩检测 项目是AIZOO团队实现的 使用的是目标检测常用的SSD算法。
该团队也提供了数据集,大家也可以自己去训练一下。
(由于疫情在家 连不上实验室的服务器我还无法训练)
项目GitHub链接


(最后那几帧是做GIF图的问题…)

AIZOO团队给出的 代码在Windows上很容易以跑通。安装opencv和kears比较容易。也不需要很复杂的更改代码。

下面重点讲在树莓派上的配置以及使用

树莓派配置

参考链接有很多基础配置
对树莓派进行换源 进行网络配置等等

1.配置环境

使用python版本是 python3 (我使用的是python3.5)
opencv以及kears 这两个库在树莓派上比较难以安装

参考我博客里面 都有两个的安装教程
树莓派上安装opencv以及各种采坑
opencv要耐心仔细装,容易出错!!!
树莓派安装kears

2. 树莓派摄像头

硬件安装 :
  • 将摄像头排线露出金属的部分背对网孔和usb接口,即另一面的蓝色塑料封皮正对网孔和usb接口
  • 小心地将接线板上的黑色塑料往上拉(请务必保证电源关闭,手指干燥)
  • 将排线插入,黑色塑料往下压紧排线
摄像头启用以及测试

打开Raspberry Pi配置工具开启Camera

终端输入 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()
# Rotate by 180 degrees when the camera is upside-down
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()

上述代码实现打开摄像头预览5秒钟再关闭的功能。但是如果这个程序仅在Raspberry Pi接入了显示器才有效,SSH或是VNC访问是无效的。
Raspberry Pi 摄像头模块入门

树莓派相机设置 远程打开预览

opencv调用摄像头
  1. 使用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() 

如果打不开摄像头 去上面看是不是没有video0

  1. 树莓派获取到视频流给opencv
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2
# initialize the camera and grab a reference to the raw camera capture
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 32
camera.hflip = True
camera.vflip = True
rawCapture = PiRGBArray(camera, size=(640, 480))
# allow the camera to warmup
time.sleep(0.1)
# capture frames from the camera
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

推荐使用第一种方式 简单

参考链接Raspberry调用picamera库控制自带的摄像头

python控制树莓派GPIO

要用到两个led灯 所以要在代码里面控制GPIO

安装库

sudo apt-get install python-rpi.gpio

示例代码

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
# BOARD编号方式,基于插座引脚编号
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)


两个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

不再报出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

有什么问题可以评论交流。
感觉有用的或者帮助到你的可以收藏 点赞 关注。
(有问题需要交流可以加QQ1639206518 )


转载:https://blog.csdn.net/Nirvana_6174/article/details/106155140
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场