介紹
學習如何將相機模組連接到樹莓派,擴充拍照、錄製影片的功能及應用圖像的效果。

所需項目目前所有的樹莓派都附有連接相機模組的端口
注意:如果想使用樹莓派 Zero,會需要一片適合連接其小型端口的帶狀電纜。
樹莓派相機模組
相機模組有兩種版本:
- 標準版:適合正常光線下拍照使用
- 夜視版:無紅外線濾鏡,可搭配紅外線在黑暗中拍照
連接相機模組
- 確認樹莓派已關機
- 找到相機模組端口
- 輕輕拉起端口塑膠夾的邊緣
- 插入相機模組的排線;確認帶狀電纜底部的連接器朝向端口中的接觸點
- 將塑膠夾推回定位
- 啟動樹莓派
- 回到主選單打開樹莓派配置工具(Raspberry Pi Configuration)
- 選擇 Interfaces 確認啟用(Enabled)鏡頭(Camera):
使用指令控制相機模組
現在相機模組以連接完成,軟體也已啟用,請試著執行指令工具:raspistill 及 raspivid
- 輸入 raspistill -o Desktop/image.jpg 指令拍攝靜態照片並儲存至桌面:
當指令運行時,可看到相機開啟預覽五秒後拍攝靜態照片。
- 在桌面上找到圖片檔,連續點按兩下圖片檔即可打開圖片
也可利用 raspistill 新增不同的選項,改變圖像的大小和外觀。
raspistill -o Desktop/image-small.jpg -w 640 -h 480
- 透過 raspivid 指令使用相機模組錄製影片:
raspivid -o Desktop/video.h264
- 播放影片則需要雙擊桌面上的 video.h264 檔案圖標,將影片檔使用 VLC 媒體播放器打開
使用 Python 控制相機模組
Python picamera 代碼庫有豐富的編碼用於操控相機模組,幫助您創建令人歎為觀止的專案。
- 打開 Python 3 編輯器,例如:Thonny Python IDE:
注意:切勿將文件另存為 picamera.py
- 儲存並運行程序。相機應該要開啟預覽五秒鐘後再關閉。
注意:相機預覽僅在顯示器連接到樹莓派時才會作用。如果遠端操控(例如:SSH 或 VNC),則看不到相機預覽畫面。
- 假如預覽畫面是顛倒的,可使用以下代碼將其旋轉 180 度:
圖像可旋轉 90、180 或 270 度。若要重置,請設定 rotation 為 0 度。
最好將預覽畫面設定略為透明,以便查看時可檢查程序是否有錯誤。
- 透過設定 alpha 的數值改變相機預覽畫面的透明度:
camera.start_preview(alpha=200)
alpha 的數值可以是 0 至 255 間的任何數。
使用 Python 編碼拍攝靜態照片- 修改編碼,新增 camera.capture():
注意:拍攝前至少使用 sleep 等待兩秒,因為相機的感測器需要時間偵測光線值。
您應該可以看見相機開啟預覽五秒鐘,接著拍攝一張靜態照片。拍攝照片時可看到預覽畫面會短暫調整為不同的分辨率。
新照片會保存至桌面。
變量 i 用於計算循環運行的次數 0 到 4 。圖像以 image0.jpg, image1.jpg 儲存,以此推論。
相機模組應該要每五秒拍攝一張照片。拍完第五張照片後,將關閉預覽。
使用 Python 錄製影片 現在來錄製影片吧!
- 刪除編碼 capture(),新增 start_recording() 及 stop_recording()
完成後編碼會如下圖所示:
樹莓派應該會開啟預覽,並錄製 5 秒的影片後關閉預覽。
如何變更圖像設定及新增效果
Python picamera 軟體提供了許多可變更圖像的效果及設定。
注意:有一部分設定只能使用在預覽畫面,無法用在拍攝的圖像;少部分只限圖像使用;其餘大部分是兩者都可使用。
設定圖像分辨率
可更改相機模組使用 resolution 拍攝的圖像
預設狀態下,圖像分辨率的設定為顯示器的分辨率。靜態照片的最大圖像分辨率為 2592×1944 ;影片則為 1920×1080。
使用下列編碼設定 resolution 為最大值拍攝圖像。
注意:需要將幀速率設定在 15 ,以啟用分辨率最大值。
最小分辨率為 64×64。
在圖像中新增文字
您可使用指令 annotate_text 在圖像中新增文字
更改新增的文字
- 使用代碼 camera.annotate_text_size = 50 變更文字大小:
您可以將文字大小設定在 6 至 160 間的任何值,預設大小為 32 。
另外也可更改文字顏色。
- 首先,新增 Color 到程式碼上方的 import 指令句裡:
from picamera import PiCamera, Color
- 接著修改 import 指令句下方下方的編碼如下:
調整預覽畫面亮度
預覽畫面亮度預設為 50,您可以將其亮度設定在介於 0 至 100 的任何值
- 下圖的循環示範了如何調整亮度,並加入了顯示當前亮度值的文字:
更改預覽畫面的對比度
與變更畫面亮度相似,您也可以更改畫面的對比度。
新增酷炫的特效
您可使用 camera.image_effect 製作特效。
圖像效果的選項有:
- none
- negative
- solarize
- sketch
- denoise
- emboss
- oilpaint
- hatch
- gpen
- pastel
- watercolor
- film
- blur
- saturation
- colorswap
- washedout
- posterise
- colorpoint
- colorbalance
- cartoon
- deinterlace1
- deinterlace2
預設的效果為 none。
設定圖像曝光模式
可使用 camera.exposure_mode 設定特定的曝光模式
曝光模式的選項有:
- off
- auto
- night
- nightpreview
- backlight
- spotlight
- sports
- snow
- beach
- verylong
- fixedfps
- antishake
- fireworks
預設模式為 auto。
- 您可以使用 camera.EXPOSURE_MODES 加入循環,套用所有的曝光模式,就像圖片效果那樣
更改圖像白平衡
可使用 camera.awb_mode 將自動白平衡設定為預設模式。
可使用的自動白平衡模式有:
- off
- auto
- sunlight
- cloudy
- shade
- tungsten
- fluorescent
- incandescent
- flash
- horizon
預設為 auto。
- 可使用代碼 camera.AWB_MODES 加入循環裡,套用所有自動白平衡模式,如同製作圖像效果那樣操作。
創意無限延伸
現在您已瞭解了如何應用相機模組,例如:
- 運用 GPIO Zero Python 編碼新增可控制相機的按鈕
- 將相機與 Minecraft Pi 結合
- 自動將相機拍攝的照片發佈到 Twitter
嘗試下列相機模組專案,瞭解更多運用吧: