使用樹莓派實現的口罩檢測

基於樹莓派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)

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
有什麼問題可以評論交流。
感覺有用的或者幫助到你的可以收藏 點贊 關注。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章