Raspberry Piカメラは、遊んでいてとても楽しいです。面白い写真、ストップモーションアニメーション、コンピュータービジョンプロジェクトなどに使えます。
Bashスクリプトでカメラを使用する方法をご紹介するために、カメラにボタンを追加し、画像にランダムなフィルターを適用します。これらのフィルターには、画像を強調するもの、漫画風に加工するもの、芸術的な効果を加えるものがあります。
最近のThe Pi Castのエピソードでは、このプロジェクトのPythonバージョンを作成しました。公式Raspberry Piカメラで実現可能なすべての画像エフェクトをご覧いただけます。
Bash ターミナルは私たちのプログラミング環境であり、他の言語に取って代わられがちな強力なスクリプト言語を導入するのに最適な方法です。
このプロジェクトでは Raspberry Pi 4 を使用しましたが、最新の Raspberry Pi OS を実行している他の Raspberry Pi モデルを使用してプロジェクトを作成することもできます。
このプロジェクトに必要なものは以下です:
- ラズベリーパイ
- 任意の Raspberry Pi カメラモジュール(ただし、USB ウェブカメラは不可)
- 最新のRaspberry Pi OS
- ブレッドボード
- オス-メスジャンパーワイヤー2本
- 押しボタン
このプロジェクトのすべてのコードと高解像度画像は、GitHub リポジトリhttps://github.com/lesp/LXF269-PiCamera-Bash/archive/master.zipから入手できます。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
Raspberry Piカメラのセットアップ
Piカメラモジュールのセットアップ方法を既にご存知の方は、先に進んでください。これらの手順は、サードパーティ製を含むすべてのRaspberry Piカメラモジュールで使用できます。
Raspberry Piの電源をオフにした状態。
1.プラスチックロックをゆっくりと上に持ち上げて、カメラポートを開きます。
2.青いタブを USB/イーサネット ポートに向けて リボン コネクタを挿入します。
3.コネクタのロックを閉めて軽く引いて、確実に固定されていることを確認します。
4. Raspberry Pi の電源を入れ、「Preferences」>>「Raspberry Pi Configuration」に移動します。
5. 「インターフェース」タブにある カメラの「有効化」ボタンをクリックします。
6. 「OK」をクリックして、Piを再起動します。
7.ターミナルを開き、次のコマンドを入力して、カメラをテストするための簡単な写真を撮ります。
$ raspistill -o test.jpg
5秒経過すると画像が撮影され、test.jpg として保存されます。ファイルマネージャーを使用して、画像が正しいことを確認してから次に進んでください。
ボタンの配線
プロジェクトの実行を開始するには、「モーメンタリースイッチ」と呼ばれるプッシュボタンを使用します。そのためには、ブレッドボードを介してボタンをRaspberry PiのGPIOに接続する必要があります。
1.ボタンの脚がブレッドボードの中央の溝を横切るように、ボタンをブレッドボードに挿入します。
2.オス-メスのジャンパーワイヤーのオス側を、ブレッドボード上のボタンの左上の脚と同じ列に差し込みます。もう一方の端をRaspberry Piの 3.3Vピンに接続します。これはmicro SDカードスロットに最も近いピンです。
3.前と同じ方法で、ボタンの右上の脚をRaspberry Pi の GPIO 17 (左列の 6 番目のピン) に接続します。
Raspberry Piのランダム画像用コードを書く
Bashコードを書くことは、コンピューター上でタスクをスクリプト化する優れた方法です。Bashは多くのタスクを自動化できる強力なスクリプト言語です。Raspberry Piでは、GPIOの操作にもBashを使うことができます。
1. Geany を起動し(メニューから)、random-art.sh という新しいファイルを作成し、頻繁に保存することを忘れないでください。
2.コードの最初の行を入力します。この行は、Bash インタープリターが見つかる場所をコードに指示します。
#!/bin/bash
3. echo コマンドを使用して、2つのファイルに値を書き込みます。1つ目はGPIO 17を有効にし、2つ目は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 を作成します。この変数には、0 から配列の長さ (この場合は 20) までの乱数が格納されます。
index=$(($RANDOM % $size))
8. デバッグの目的でランダムに選択された画像効果を出力します。
echo ${array[$index]}
9. GPIO 17に接続されたボタンの現在の状態を確認し、変数dataに保存します。押されていない場合はデフォルトのオフ(0)状態になります。押されると、値がオン(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
ボタンを押してコードをトリガーし、ランダムな画像効果を選択して自撮り写真を撮りましょう。