組裝及測試的部分完成,與過往習作相同,今期是撰寫程式的部分。今次的程式碼較多,同學也可嘗試理解程式碼結構,首段是載入程式,接著是定義,然後是程式運行。現在就用上述概念,來撰寫今次的習作。
最後的步驟便是要編寫 Python 程式,使習作可以整合起來。在樹莓派中建立一個新的 Python 程式,檔案命名為 selfie.py 。
編寫 Python 程式進行拍攝
selfie.py 程式碼,並將下列編碼寫在檔案中:
[row][double_paragraph]
[/double_paragraph][double_paragraph]
行數 1-4 : | 載入所需要用的 Library ,當中包括 gpiozero、 picamera 、 PIL( Python Imaging Library 圖像處 理)、gmtime (提取時間資料)、及 strftime (將 時間資料轉化為字符串)。 |
行數 5-7 : | 建立一個新的 camera 物件, 尺寸設定為 800×400 像素,並開始進行預覽。 |
行數 8-9 : | 設定兩個按鈕,分別接駁到 GPIO20 及 GPIO21 , pull up 狀態設為「否」,因為在 gpiozero Library 中,GPIO 的狀態是預設為 pull up ,即處於高位。 我們需要先將這個狀態設定為「否」,這樣才配 合我們在較早前為 Micro:bit 編寫的控制方法。 |
行數 10 : | 建立道具相片 props 並且將 beard.png 載入。 |
行數 11-14 : | 建立一個新的圖層 pad ,其尺寸是按剛才載入的 相片 beard.png 而設定。在 PIL 的 Library 中,尺寸 的基本單位是 32×16 像素,然後進行 12 及 13 行的 操作。 |
行數 15 : | 將圖層 pad 放在圖像 props 之下,並以座標 ( 0,0 )為基點。 |
行數 16-18 : | 將拍攝到的圖像和道具相片結合一起作預覽,透 明度設定為 58 圖層編號設定為 3 ,即是在拍攝圖 像之上層。 |
行數 19-26 : | 定義一個t akePhoto 的函數(讀者請注意,行數 20 至 22 是一整行編碼,不要將它換行輸入),當中 使用 gmtime 功能,取得時間資料,並將資料轉化 為字串,再加上路徑的資料,並儲存到 output 變量 中。最後將拍攝到的圖像和道具相片結合一起, 並儲存在 output 的路徑及其檔案名稱中。 |
行數 26-27 : | 定義一個 stop 的函數,可以令拍攝站停止運作。 |
行數 28-29 : | 當按鈕 btn_takePhoto 和 btn_stop 按下的時候,就 會分別呼叫 takePhoto 和 stop 的函數進行運作。 |
[/double_paragraph] [/row]
製作拍攝站支架
最後的階段是製作習作製作支架,為自拍站包裝一下。支架主要是用 2 吋 × 1 吋的木方建造出來,配合電鑽和螺絲,就能夠輕易地將整個支架裝嵌起來。
[row][double_paragraph]
[/double_paragraph][double_paragraph]
[/double_paragraph] [/row]
總結
雖然在上述介紹的自拍站中,只有一張道具相片,但其實讀者可以建立一個道具相片庫,讓用家選擇不同的道具相片,為自己拍攝相片加上特色,讀者不妨自行到 raspberrypi.org ,就可以找到更加詳細的習作描述。另外,在操控方面,讀者亦可以自製不同款式的按鈕,再接駁至樹莓派的 GPIO ,製作簡單之餘亦可以發揮創客的精神。