介紹 Raspberry Pi 使用 USB Webcam 或相機模組的基本方法,包含安裝、偵測、拍照、錄影、串流與 Python 控制。
適合搭配你目前課程中的 1080p Web CAM 做教學與專題延伸。
| 類型 | 說明 | 適用情境 |
|---|---|---|
| USB Webcam | 透過 USB 連接,安裝方便 | 目前你的 1080p Web CAM 就屬於這種 |
| Raspberry Pi Camera Module | 透過 CSI 介面連接,整合度較高 | 適合官方相機模組教學 |
lsusb
v4l2-ctl --list-devices
若尚未安裝工具:
sudo apt update
sudo apt install -y v4l-utils fswebcam ffmpeg
fswebcam -r 1280x720 --no-banner test.jpg
fswebcam -r 1920x1080 --no-banner webcam_1080p.jpg
拍完後可檢查:
ls -lh *.jpg
可使用 ffmpeg 錄下 Webcam 畫面:
ffmpeg -f video4linux2 -i /dev/video0 -t 10 output.mp4
這代表從 /dev/video0 擷取 10 秒影像並輸出成 mp4。
python3 -m pip install opencv-python
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
print("無法讀取畫面")
break
cv2.imshow("Webcam", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
import cv2
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
if ret:
cv2.imwrite("snapshot.jpg", frame)
print("已儲存 snapshot.jpg")
else:
print("拍照失敗")
cap.release()
可比對連續兩張影像的差異,判斷畫面是否有移動。這是很多監控系統的入門做法。
import cv2
cap = cv2.VideoCapture(0)
ret, frame1 = cap.read()
ret, frame2 = cap.read()
while ret:
diff = cv2.absdiff(frame1, frame2)
gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, 25, 255, cv2.THRESH_BINARY)
if thresh.sum() > 500000:
print("偵測到畫面變化")
frame1 = frame2
ret, frame2 = cap.read()
若要最容易上手的教學方向,通常會推薦:
| 問題 | 可能原因 | 建議 |
|---|---|---|
| 抓不到攝影機 | 設備未偵測或供電不足 | 先用 lsusb 和 v4l2-ctl --list-devices 檢查 |
| 畫面黑屏 | 裝置被其他程式占用 | 關閉其他影像程式後重試 |
| 解析度無法到 1080p | Webcam 或驅動限制 | 先查看支援格式與解析度 |
| OpenCV 安裝失敗 | 套件環境問題 | 建議使用虛擬環境安裝 |
Raspberry Pi 加上 1080p Web CAM,非常適合拿來做影像入門教學。只要學生先會偵測、拍照、錄影與 OpenCV 讀圖,後面要做監控、辨識、串流或智慧門鈴都能順利接上。