Raspberry Pi相機非常有趣。它可用于傻瓜照片,定格動畫和計算機視覺項目。
為了介紹如何將相機用作Bash腳本的一部分,我們將使用帶有按鈕的相機,該按鈕將為圖像選擇一個隨機濾鏡。這些濾鏡中的一些可以增強圖像,有些可以將其更改為卡通,其他則可以產生藝術效果。
在The Pi Cast的最新一集中,我們使用Python創建了該項目的版本。在這里,您可以看到官方Raspberry Pi相機可能產生的所有圖像效果。
Bash終端是我們的編程環境,它是引入功能強大的腳本語言的好方法,該腳本語言經常被其他語言所忽視。
我們在該項目中使用了Raspberry Pi 4,但也可以使用運行最新Raspberry Pi OS的任何其他Raspberry Pi模型來創建該項目。
對于此項目,您將需要:
? 任何樹莓派
? 任何Raspberry Pi攝像頭模塊(盡管沒有USB網絡攝像頭)
? 最新的Raspberry Pi操作系統
? 面包板
? 2x公對母跳線
? 一個按鈕
設置Raspberry Pi相機
如果您已經熟悉如何設置Pi相機模塊,則可以跳過。這些步驟將適用于所有Raspberry Pi相機模塊(包括第三方模塊)。
關閉Raspberry Pi的電源。
1.輕輕向上提起塑料鎖,打開攝像頭端口。
3.合上連接器上的鎖,并輕輕拉動它以確保其就位。
4.打開Raspberry Pi的電源,然后轉到“首選項” 》》“ Raspberry Pi配置”。
5.單擊“接口”選項卡中“攝像機”的“啟用”按鈕。
6.單擊確定,然后重新啟動Pi。
7.打開終端,然后鍵入以下命令以快速拍照以測試相機。
$ raspistill -o test.jpg
經過五秒鐘后,將拍攝圖像并將其另存為test.jpg。在繼續之前,使用文件管理器檢查圖像是否正確。
接線按鈕
一個有時被稱為“瞬時開關”的按鈕將用于觸發我們的項目。為此,我們需要通過面包板將按鈕連接到Raspberry Pi的GPIO。
1.將按鈕插入面包板,使支腿越過面包板的中央通道。
2.將公對母跳線的公端與面包板上按鈕的左上腿放在同一列中。將另一端連接 到Raspberry Pi的3.3V引腳。這是離Micro SD卡插槽最近的插針。
3.以與以前相同的方式,將按鈕的右上角連接到Raspberry Pi的GPIO 17(左列的六個引腳)。
為Raspberry Pi隨機圖像編寫代碼
編寫Bash代碼是在計算機上編寫任務腳本的好方法。Bash是一種功能強大的腳本語言,可以自動執行許多任務。通過Raspberry Pi,我們還可以使用它與GPIO交互。
1.啟動Geany(從菜單中)并創建一個名為random-art.sh的新文件,并記住經常保存。
2.輸入第一行代碼,這將告訴代碼在哪里可以找到Bash解釋器。
#!/bin/bash
3. 使用echo命令,我們將值寫入兩個文件。第一個使能GPIO 17,第二個將GPIO 17設置為輸入,默認情況下該輸入為關閉(0)。
echo “17” 》 /sys/class/gpio/export
echo “in” 》 /sys/class/gpio/gpio17/direction
4. 輸入一個用于存儲此項目中所有可能的圖像效果的數組。總共有20種效果,每種效果在數組中都有自己的位置,這使我們的代碼可以根據隨機數選擇特定的效果。
array[0]=“none”
array[1]=“negative”
array[2]=“solarise”
array[3]=“sketch”
array[4]=“denoise”
array[5]=“emboss”
array[6]=“oilpant”
array[7]=“hatch”
array[8]=“gpen”
array[9]=“pastel”
array[10]=“watercolour”
array[11]=“film”
array[12]=“blur”
array[13]=“saturation”
array[14]=“colourswap”
array[15]=“washedout”
array[16]=“posterise”
array[17]=“colourpoint”
array[18]=“colourbalance”
array[19]=“cartoon”
5.創建一個名為size的變量以存儲陣列中的效果數。此變量將存儲命令的輸出(通過{}),該命令檢查數組的長度。
size=${#array[@]}
6.使用while true循環不斷運行代碼的下一部分。
while true; do
7.創建另一個變量index,該變量將存儲一個介于零和數組長度(在本例中為20)之間的隨機數。
index=$(($RANDOM % $size))
8. 打印隨機選擇的圖像效果以進行調試。
echo ${array[$index]}
9.檢查連接到GPIO 17的按鈕的當前狀態,并將其保存到變量data中。如果未按下,它將具有默認狀態off,即0。按下時,該值將變為on,即1。這是我們相機項目的觸發器。
data=“$(cat /sys/class/gpio/gpio17/value)”
10.使用條件測試來檢查存儲在數據變量中的值。如果值為1,則已按下按鈕。
if [ ${data} = “1” ]; then
11.按下按鈕后,下一步將創建一個時間戳并將其保存到名為TIME的變量中。
TIME=$(date +“%Y-%m-%d_%H%M%S”)
12.使用圖像效果拍照,然后使用時間戳記作為文件名保存圖像。
raspistill -ifx ${array[$index]} -o $TIME.jpg
13.關閉條件循環,然后關閉while true循環。
fi
done
保存代碼。
完整的代碼:
#!/bin/bash
echo “17” 》 /sys/class/gpio/export
echo “in” 》 /sys/class/gpio/gpio17/direction
array[0]=“none”
array[1]=“negative”
array[2]=“solarise”
array[3]=“sketch”
array[4]=“denoise”
array[5]=“emboss”
array[6]=“oilpant”
array[7]=“hatch”
array[8]=“gpen”
array[9]=“pastel”
array[10]=“watercolour”
array[11]=“film”
array[12]=“blur”
array[13]=“saturation”
array[14]=“colourswap”
array[15]=“washedout”
array[16]=“posterise”
array[17]=“colourpoint”
array[18]=“colourbalance”
array[19]=“cartoon”
size=${#array[@]}
while true; do
index=$(($RANDOM % $size))
echo ${array[$index]}
data=“$(cat /sys/class/gpio/gpio17/value)”
if [ ${data} = “1” ]; then
TIME=$(date +“%Y-%m-%d_%H%M%S”)
raspistill -ifx ${array[$index]} -o $TIME.jpg
fi
done
運行代碼
要使代碼可執行,請打開終端并導航到包含代碼的文件夾。輸入此命令。
$ chmod +x random-art.sh
要運行命令,請在終端類型中
。/random-art.sh
按下按鈕觸發代碼以選擇隨機圖像效果并拍照!
責任編輯:pj
-
連接器
+關注
關注
98文章
13826瀏覽量
135042 -
usb
+關注
關注
60文章
7770瀏覽量
262334 -
計算機
+關注
關注
19文章
7165瀏覽量
87126 -
相機
+關注
關注
4文章
1303瀏覽量
53127
發布評論請先 登錄
相關推薦
評論