第16章 Raspberry Pi Camera 完整教學:拍照、錄影與 Picamera2 Python 控制

發布日期: |更新日期:
文章主圖:第16章 Raspberry Pi Camera 完整教學:拍照、錄影與 Picamera2 Python 控制

Raspberry Pi 不只能控制 LED、感測器、馬達與繼電器,只要接上一顆 Raspberry Pi Camera,就可以立刻進入影像處理、監視系統、智慧家庭、縮時攝影、OpenCV 甚至 AI 視覺應用。

在本章中,我們將從 Raspberry Pi Camera 的硬體連接開始,認識 CSI Camera 介面,接著使用 Raspberry Pi OS 內建的 rpicam-apps 執行拍照與錄影,最後再使用 Picamera2 Python 撰寫自己的相機控制程式。

完成本章後,我們還會實作一個:

Raspberry Pi 自動定時拍照相機

讓 Raspberry Pi 每隔固定時間自動拍攝照片,並使用日期與時間建立檔名。

本章學習目標

完成本章後,你將能夠:

  • 認識 Raspberry Pi Camera Module
  • 了解 CSI Camera 介面
  • 正確連接 Camera 排線
  • 測試 Raspberry Pi Camera
  • 使用 rpicam-hello 顯示 Camera 預覽
  • 使用 rpicam-jpeg 拍攝照片
  • 使用 rpicam-still 控制照片拍攝
  • 使用 rpicam-vid 錄製影片
  • 安裝與使用 Picamera2
  • 使用 Python 控制 Raspberry Pi Camera
  • 使用 Python 自動建立照片檔名
  • 製作 Raspberry Pi 定時攝影系統

一、什麼是 Raspberry Pi Camera?

Raspberry Pi Camera 是專門為 Raspberry Pi 設計的數位相機模組。

它不像一般 USB Webcam 透過 USB 連接,而是主要透過 Raspberry Pi 主機板上的 CSI / MIPI Camera Interface 傳送影像資料。

目前 Raspberry Pi 官方 Camera 系列包含 Camera Module 2、Camera Module 3、High Quality Camera、Global Shutter Camera 與 AI Camera 等不同產品。其中 Camera Module 3 使用 12MP 感光元件,而 Camera Module 2 為 8MP。

對初學 Raspberry Pi Camera 的使用者而言,Camera Module 2 或 Camera Module 3 都很適合作為入門裝置。

二、Raspberry Pi Camera 可以做什麼?

加入 Camera 之後,Raspberry Pi 就不再只是一般 GPIO 控制器,而能成為真正的智慧影像系統。

常見應用包括:

Raspberry Pi Camera 常見應用
應用 說明
自動拍照 定時拍攝照片
縮時攝影 長時間記錄植物、生長或工程進度
監視 Camera 建立區域監視系統
門口攝影機 偵測訪客後拍照
智慧家庭 遠端查看室內狀況
OpenCV 進行影像處理
QR Code 辨識 QR Code
人臉偵測 找出影像中的人臉
AI Camera YOLO 物件辨識
IoT Camera 透過網路遠端取得照片

因此 Raspberry Pi Camera 也是後續學習 OpenCV、YOLO 與 Edge AI 的重要基礎。

三、Raspberry Pi Camera Module 與 CSI

3.1 CSI 是什麼?

CSI 是:

Camera Serial Interface

Raspberry Pi Camera 使用的實際影像介面建立在 MIPI CSI-2 架構之上。

它專門用於 Camera Sensor 與處理器之間高速傳輸影像資料。

概念可以理解成:

Camera Sensor
      │
      │ MIPI CSI-2
      ▼
Raspberry Pi Camera Connector
      │
      ▼
Raspberry Pi
      │
      ▼
libcamera
      │
      ├── rpicam-apps
      │
      └── Picamera2

這就是 Raspberry Pi Camera 從硬體到 Python 程式的大致架構。

四、Raspberry Pi Camera 排線差異

這是實際購買 Camera 時很容易遇到的問題。

目前官方 Camera Module 本身使用標準 15-pin 連接端,但不同 Raspberry Pi 主機板使用的 Camera Connector 並不完全相同。

Raspberry Pi 官方文件指出:

Raspberry Pi 各型號 Camera Connector 比較
Raspberry Pi Camera 端連接
Raspberry Pi 3 15-pin
Raspberry Pi 4 15-pin
Raspberry Pi Zero 系列 22-pin mini
Raspberry Pi 5 22-pin mini
部分 Compute Module I/O Board 22-pin mini

所以 Raspberry Pi 5 若要連接一般 Camera Module,通常需要使用:

15-pin → 22-pin Camera Cable

而不是 Raspberry Pi 4 常見的 15-pin → 15-pin 排線。

五、Camera 安裝方式

安裝 Camera 前,第一個原則是:

先將 Raspberry Pi 關機並拔除電源。

不要在 Raspberry Pi 通電狀態下隨意拔插 Camera 排線。

Raspberry Pi 官方也建議在安裝 Camera PCB 前先注意靜電問題。

Raspberry Pi 4 Camera 安裝

Raspberry Pi 4 的 Camera Connector 位於主機板上的 CAMERA 接頭。

基本流程:

Raspberry Pi 4
     │
     │ 15-pin CSI Cable
     ▼
Camera Module

將 Camera Connector 的固定扣輕輕拉開。

插入排線。

確認排線完全平行。

最後將固定扣壓回去。

Raspberry Pi 5 Camera 安裝

Raspberry Pi 5 有:

CAM/DISP0
CAM/DISP1

兩個 MIPI Camera / Display Connector。

兩個接頭都可以連接 Camera。

基本架構:

Raspberry Pi 5
CAM/DISP0
    │
    │ 22-pin
    │
    │ Camera Cable
    ▼
15-pin
Camera Module

因此購買 Raspberry Pi 5 Camera 套件時,要特別確認是否包含正確排線。

六、更新 Raspberry Pi OS

Camera 連接完成後開機。

建議先更新 Raspberry Pi OS:

sudo apt update
sudo apt full-upgrade -y

更新完成後可以重新啟動:

sudo reboot

目前 Raspberry Pi Camera 軟體架構以 libcamera 為底層,而 Raspberry Pi 官方提供 rpicam-apps 讓使用者進行拍照及錄影。Raspberry Pi OS 預設即包含主要 rpicam-apps Camera 工具。

七、不要再使用舊版 raspistill 教學

網路上仍然可以找到很多舊 Raspberry Pi Camera 教學,例如:

raspistill

或:

raspivid

這些都是 Raspberry Pi 舊 Camera Stack 的工具。

在較新的 Raspberry Pi OS 中,應該使用新的 Camera 架構。

從 Raspberry Pi OS Bookworm 開始,Camera 應用程式主要名稱已改為:

rpicam-hello
rpicam-jpeg
rpicam-still
rpicam-vid
rpicam-raw

因此後續新專案建議直接學習 rpicam-* 指令,而不要再以 raspistill 作為主要教學。

八、第一次測試 Raspberry Pi Camera

Camera 接好之後,可以先使用:

rpicam-hello

正常情況下會出現 Camera 預覽畫面。

官方預設會短暫顯示 Camera Preview。

如果希望 Camera 一直顯示:

rpicam-hello --timeout 0

--timeout 0 表示不自動結束。

可以按:

Ctrl + C

停止程式。

九、Raspberry Pi 拍照

接下來真正拍攝第一張 Raspberry Pi Camera 照片。

輸入:

rpicam-jpeg --output test.jpg

Camera 會顯示短暫預覽後拍攝照片,並建立:

test.jpg

官方文件指出 rpicam-jpeg 會先顯示 Camera Preview,之後儲存高解析度 JPEG 影像。

可以查看:

ls -lh test.jpg

十、指定 Raspberry Pi Camera 照片解析度

例如:

rpicam-jpeg \
--output test.jpg \
--width 1920 \
--height 1080

即可建立:

1920 × 1080

照片。

如果希望縮短拍照前等待時間:

rpicam-jpeg \
--output test.jpg \
--timeout 2000 \
--width 1920 \
--height 1080

timeout 的單位為毫秒,因此:

2000 ms = 2 秒

Raspberry Pi 官方也提供相同的 width、height 與 timeout 控制方式。

十一、使用 rpicam-still 拍照

另外一個非常重要的 Camera 指令是:

rpicam-still

基本拍照:

rpicam-still -o photo.jpg

也可以寫成:

rpicam-still --output photo.jpg

與 rpicam-jpeg 相比,rpicam-still 提供更多靜態影像控制選項,也可以輸出 PNG、BMP、Raw 等不同格式。

例如輸出 PNG:

rpicam-still \
--encoding png \
--output photo.png

十二、Raspberry Pi Camera 錄影

Raspberry Pi Camera 不只能拍照,也可以錄影。

例如錄製 10 秒 H.264:

rpicam-vid -t 10s -o video.h264

錄影完成後產生:

video.h264

這也是 Raspberry Pi 官方文件提供的基本 rpicam-vid 用法。

十三、錄製 MP4

Raspberry Pi 5 可以直接使用:

rpicam-vid -t 10s -o video.mp4

而 Raspberry Pi 4 或更早的裝置,如果希望直接輸出 MP4,官方建議使用 libav,例如:

rpicam-vid \
-t 10s \
--codec libav \
-o video.mp4

不同 Raspberry Pi 型號的 MP4 輸出方式有差異,因此跨型號撰寫專案時要特別注意。

十四、什麼是 Picamera2?

前面都是利用 Linux Command 控制 Camera。

但是如果我們希望做到:

感測器觸發
      ↓
Python 判斷
      ↓
Camera 拍照
      ↓
儲存照片
      ↓
傳送 MQTT

就需要從 Python 直接控制 Camera。

目前 Raspberry Pi 官方提供的 Python Camera Library 是:

Picamera2

Picamera2 是建立在現代 Raspberry Pi Camera / libcamera 架構上的 Python API,用來取代舊版 Picamera。

十五、檢查 Picamera2

先執行:

python3

進入 Python:

from picamera2 import Picamera2

如果沒有出現 Error,代表 Picamera2 已經存在。

離開:

exit()

十六、安裝 Picamera2

目前較新的 Raspberry Pi OS 通常已包含 Picamera2。

如果系統沒有安裝,可以執行:

sudo apt update
sudo apt install -y python3-picamera2

這也是 Raspberry Pi 官方目前提供的安裝方式。

對於不需要 GUI 相依套件的 Raspberry Pi OS Lite,也可以使用:

sudo apt install -y python3-picamera2 --no-install-recommends

十七、第一個 Picamera2 Python 拍照程式

建立程式:

nano camera_test.py

輸入:

from picamera2 import Picamera2

picam2 = Picamera2()

picam2.start_and_capture_file("photo.jpg")

print("拍照完成")

儲存後執行:

python3 camera_test.py

成功後:

ls -lh photo.jpg

應該會看到:

photo.jpg

Picamera2 官方範例同樣提供 start_and_capture_file() 作為最簡單的一次性照片拍攝方式。

十八、完整 Picamera2 控制方式

若希望增加 Camera 初始化與控制,可以使用:

import time
from picamera2 import Picamera2

picam2 = Picamera2()

config = picam2.create_still_configuration(
    main={"size": (1920, 1080)}
)

picam2.configure(config)

picam2.start()

time.sleep(2)

picam2.capture_file("photo.jpg")

picam2.stop()

print("照片已儲存")

程式流程為:

建立 Picamera2
      ↓
建立 Camera Configuration
      ↓
設定解析度
      ↓
啟動 Camera
      ↓
等待曝光穩定
      ↓
拍照
      ↓
停止 Camera

Picamera2 官方範例也示範了先建立 configuration、啟動 Camera,再使用 capture_file() 儲存影像的方式。

十九、為什麼拍照前要等待?

在 Camera 啟動後立即拍照,有時可能得到:

  • 亮度不正確
  • 白平衡尚未穩定
  • 第一張照片曝光不理想

因此簡單專案通常可以加入:

time.sleep(2)

讓 Camera 有一段初始化時間。

二十、照片檔名加入日期與時間

如果每次都使用:

photo.jpg

下一張照片就可能覆蓋前一張。

比較好的方式是利用:

datetime

建立時間戳記。

例如:

from datetime import datetime

now = datetime.now()

filename = now.strftime("%Y%m%d_%H%M%S.jpg")

print(filename)

可能得到:

20260818_083000.jpg

這樣每一張照片都有不同檔名。

二十一、建立照片儲存目錄

先建立資料夾:

mkdir -p ~/camera/photos

查看:

ls ~/camera

應該可以看到:

photos

我們接下來所有自動拍攝的照片都儲存在:

~/camera/photos/

二十二、實作:Raspberry Pi 自動定時拍照相機

現在正式進入本章專題。

我們要製作:

自動定時拍照 Camera

功能:

Raspberry Pi 開始執行
        ↓
初始化 Camera
        ↓
等待 Camera 穩定
        ↓
取得現在日期時間
        ↓
建立照片檔名
        ↓
拍攝照片
        ↓
等待指定秒數
        ↓
再次拍照
        ↓
持續循環

二十三、建立 Python 程式

建立:

nano timelapse_camera.py

輸入:

import time
from datetime import datetime
from pathlib import Path

from picamera2 import Picamera2


# -----------------------------
# 基本設定
# -----------------------------

PHOTO_INTERVAL = 60

PHOTO_WIDTH = 1920
PHOTO_HEIGHT = 1080

PHOTO_DIR = Path.home() / "camera" / "photos"


# -----------------------------
# 建立照片目錄
# -----------------------------

PHOTO_DIR.mkdir(
    parents=True,
    exist_ok=True
)


# -----------------------------
# 建立 Camera
# -----------------------------

picam2 = Picamera2()


# -----------------------------
# 建立照片設定
# -----------------------------

camera_config = picam2.create_still_configuration(
    main={
        "size": (
            PHOTO_WIDTH,
            PHOTO_HEIGHT
        )
    }
)

picam2.configure(camera_config)


# -----------------------------
# 啟動 Camera
# -----------------------------

picam2.start()

print("Raspberry Pi Camera 已啟動")


# 等待曝光與白平衡穩定

time.sleep(2)


# -----------------------------
# 自動定時拍照
# -----------------------------

try:

    while True:

        now = datetime.now()

        filename = now.strftime(
            "%Y%m%d_%H%M%S.jpg"
        )

        filepath = PHOTO_DIR / filename

        picam2.capture_file(
            str(filepath)
        )

        print(
            f"照片已儲存:{filepath}"
        )

        time.sleep(
            PHOTO_INTERVAL
        )


except KeyboardInterrupt:

    print(
        "\n使用者停止程式"
    )


finally:

    picam2.stop()

    print(
        "Camera 已停止"
    )

二十四、執行定時拍照程式

執行:

python3 timelapse_camera.py

畫面可能顯示:

Raspberry Pi Camera 已啟動
照片已儲存:/home/user/camera/photos/20260818_083000.jpg
照片已儲存:/home/user/camera/photos/20260818_083100.jpg
照片已儲存:/home/user/camera/photos/20260818_083200.jpg

每隔:

60 秒

自動拍攝一張照片。

二十五、修改拍攝間隔

程式:

PHOTO_INTERVAL = 60

表示:

60 秒拍一次

如果希望:

每 10 秒

PHOTO_INTERVAL = 10

每 5 分鐘

PHOTO_INTERVAL = 300

每 10 分鐘

PHOTO_INTERVAL = 600

每小時

PHOTO_INTERVAL = 3600

二十六、查看已拍攝照片

輸入:

ls -lh ~/camera/photos

可能看到:

20260818_083000.jpg
20260818_083100.jpg
20260818_083200.jpg
20260818_083300.jpg

這就是最基本的:

Raspberry Pi Time Lapse Camera

二十七、不寫 Python 也可以做縮時攝影

rpicam-still 本身也支援 timelapse。

例如先建立:

mkdir -p ~/timelapse

然後執行:

rpicam-still \
--timeout 30000 \
--timelapse 2000 \
-o ~/timelapse/image%04d.jpg

代表在一段 30 秒期間內,以約 2 秒的間隔進行定時拍攝。

Raspberry Pi 官方文件同樣提供 --timelapse 與 --timeout 組合進行縮時攝影。

但是如果未來要整合:

DHT22
GPIO
Flask
MQTT
SQLite
Camera

使用 Picamera2 Python 會更加有彈性。

二十八、Camera 找不到怎麼辦?

如果:

rpicam-hello

沒有 Camera 畫面,可以依序檢查。

1. 排線方向

Camera 排線插反是最常見問題之一。

關機後重新確認:

Camera Cable
Connector
固定扣

是否完全插入。

2. Raspberry Pi 5 是否使用正確排線

Raspberry Pi 5 使用 mini 22-pin Camera Connector。

一般 Camera Module 端則使用 15-pin。

所以排線通常應為:

22-pin
   │
   ▼
15-pin

不要直接拿 Raspberry Pi 4 使用的 15-pin 雙頭排線硬接 Raspberry Pi 5。

3. 更新系統

執行:

sudo apt update
sudo apt full-upgrade -y

然後:

sudo reboot

重新測試:

rpicam-hello

4. 檢查 Camera

可以使用:

rpicam-hello --list-cameras

查看系統可偵測的 Camera。

如果完全沒有 Camera,優先檢查:

排線
Camera Module
Camera Connector
系統版本

二十九、不要把 CSI Camera 和 USB Camera 混為一談

這點很重要。

Raspberry Pi Camera Module:

Camera Module
     ↓
MIPI CSI
     ↓
Raspberry Pi

USB Webcam:

USB Webcam
     ↓
USB
     ↓
Raspberry Pi

兩者硬體架構不同。

Picamera2 主要是 Raspberry Pi Camera Stack 的 Python Camera API,因此本章討論的是 Raspberry Pi CSI Camera Module 為主。

三十、Raspberry Pi Camera 專案架構

完成本章後,我們其實已經建立未來智慧 Camera 的基礎:

Raspberry Pi
                  │
        ┌─────────┴─────────┐
        │                   │
      GPIO                Camera
        │                   │
   Sensor / LED        Picamera2
        │                   │
        └─────────┬─────────┘
                  │
                Python
                  │
        ┌─────────┼─────────┐
        │         │         │
      Flask      MQTT     SQLite
        │         │         │
      Web       IoT      Database

這也是接下來第 17~20 章的核心發展方向。

三十一、從 Camera 延伸到智慧監控

例如未來可以設計:

DHT22
  │
  ▼
Raspberry Pi
  │
  ├── 溫度正常
  │
  └── 溫度過高
          │
          ├── LED 警示
          ├── 蜂鳴器
          ├── Relay 啟動風扇
          └── Camera 拍照

也可以將 Camera 和 PIR 人體紅外線感測器搭配:

PIR 偵測到人體
      ↓
GPIO Input
      ↓
Python
      ↓
Picamera2
      ↓
拍攝照片
      ↓
儲存紀錄

這樣 Raspberry Pi 就能成為簡易智慧監視設備。

三十二、Camera 與 Flask

下一章我們會開始加入 Web Server。

未來架構可以變成:

手機
 │
 │ Wi-Fi / LAN
 ▼
Flask Web Server
 │
 ▼
Raspberry Pi
 │
 ├── GPIO
 ├── LED
 ├── Relay
 └── Camera

因此可以在手機瀏覽器上按:

[ 開燈 ]

[ 關燈 ]

[ 拍照 ]

讓 Raspberry Pi 執行對應的硬體控制。

三十三、Camera 與 MQTT

再進一步,可以形成:

Camera
   ↓
Raspberry Pi
   ↓
MQTT
   ↓
Broker
   ↓
Internet / LAN
   ↓
Remote Client

因此 Camera 事件可以成為 IoT 訊息。

例如:

camera/photo
camera/status
camera/motion

這些都能成為 MQTT Topic。

三十四、Camera 與 SQLite

照片本身可以存在硬碟,而照片資訊寫入 SQLite:

ID
Timestamp
Filename
Temperature
Humidity
Event

例如:

1
2026-08-18 08:30:00
20260818_083000.jpg
28.5
72
temperature_alert

如此就能建立:

Raspberry Pi Camera Event Database

這也是第 19 章資料記錄系統可以延伸的方向。

三十五、本章常用指令整理

Camera 測試:

rpicam-hello

持續預覽:

rpicam-hello --timeout 0

拍攝 JPEG:

rpicam-jpeg -o photo.jpg

使用 rpicam-still:

rpicam-still -o photo.jpg

錄製影片:

rpicam-vid -t 10s -o video.h264

安裝 Picamera2:

sudo apt install -y python3-picamera2

執行 Python Camera:

python3 camera_test.py

執行自動拍照:

python3 timelapse_camera.py

三十六、本章重點整理

本章完成了 Raspberry Pi Camera 最重要的基礎。

整個 Camera 軟硬體架構可以整理成:

Raspberry Pi Camera Module
          │
          ▼
      MIPI CSI-2
          │
          ▼
     Raspberry Pi
          │
          ▼
       libcamera
          │
    ┌─────┴─────┐
    │           │
rpicam-apps   Picamera2
    │           │
CLI Command    Python

如果只是快速拍照:

rpicam-jpeg -o photo.jpg

如果要寫自己的 Camera 系統:

from picamera2 import Picamera2

再搭配:

picam2.capture_file(...)

即可從 Python 控制 Camera。

而本章最後完成的:

Raspberry Pi 自動定時拍照相機

已經具備真正實際應用價值。

三十七、下一章預告

下一章將從 Camera 與本機 GPIO 控制跨入:

網路控制

我們將建立:

第 17 章 Raspberry Pi Flask Web Server:用瀏覽器遠端控制 GPIO

接下來會學習:

Client
Server
HTTP
IP Address
Port
Flask
HTML
Web Route
GPIO
LAN

並完成:

手機瀏覽器控制 Raspberry Pi LED

整個 Raspberry Pi 架構也會正式從:

Python → GPIO

進化成:

手機
 ↓
Wi-Fi
 ↓
Flask
 ↓
Python
 ↓
GPIO
 ↓
LED

這是 Raspberry Pi 從單機控制進入 Web、網路與 IoT 的重要一步。

下一步學習

不要停在這一篇,接著把內容做成自己的實作

目前主題:Raspberry Pi。從完整學習路線、免費資源、會員下載,再接到實作所需材料。

同系列:Raspberry-Pi |  已是會員?直接前往 Getfile
相關資源與會員文章下載
文章可免費閱讀;下載完整 DOCX 或 PDF 需登入免費基本會員。
會員免費下載 DOCX 會員免費 PDF/列印

← 回文章列表