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

2022-09-05 15:47:26 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

基于树莓派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调用摄像头
代码语言:javascript复制
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直接打开摄像头
代码语言:javascript复制
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
代码语言:javascript复制
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

示例代码

代码语言:javascript复制
# -*- 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

有什么问题可以评论交流。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135525.html原文链接:https://javaforall.cn

0 人点赞