基於樹莓派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調用攝像頭
- 使用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
- 樹莓派獲取到視頻流給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
根據上面的教程大家可以自己寫打開樹莓派攝像頭檢測並控制燈,也可以看我寫好的。
大家對物聯網 計算機視覺的應用感興趣的可以關注我,我博客內有相關文章,後續也會發一下類似的應用型文章(可以用來學習以及參加比賽或者做畢設)
使用方法: 將前面提到的AIZOO團隊提供的項目下載下來。以及我寫的pi_cam.py下載下來。放入同一目錄下,上傳到樹莓派中(按照上面步驟 配置好環境 )。
命令行進入目錄直接調用就可以,
python pi_cam.py
(如果python默認是python2.7 則要使用python3 pi_cam.py)
命令行中關掉 運行程序
ps -ef |grep pi_cam.py
有什麼問題可以評論交流。
感覺有用的或者幫助到你的可以收藏 點贊 關注。