新しいRaspberry Piカメラモジュール3は、優れた画質と、標準(75度)と広角(120度)のレンズから選択できます。そして何より嬉しいのは、オートフォーカス機能が搭載されたことです。Picamera2で写真を撮るのは簡単ですが、ボタンを押して写真を撮り、自分も一緒に写り込みたい時もありますよね。
このプロジェクトでは、PythonモジュールとAndroidアプリを組み合わせたBlue Dotを使用して、Bluetooth制御のカメラトリガーを作成します。Blue Dotの使いやすいライブラリとPicamera2の高度な構造のおかげで、わずかなコードで1080pの写真を撮影できます。
このプロジェクトに必要なもの
- Raspberry Pi 3または4
- ラズベリーパイカメラ
- Androidデバイス
Raspberry Piカメラモジュールのインストール
1.プラスチックロックをゆっくりと上に持ち上げて、カメラポートを開きます。
2.リボンコネクタの青いタブをUSB / Ethernetポート側に向けて挿入します。Raspberry Pi Zeroをお使いの場合は、アダプターを使用してカメラをボード右側のポートに接続する必要があります。
3.コネクタのロックを閉めて軽く引いて、確実に固定されていることを確認します。
4. Raspberry Piの電源を入れてデスクトップを起動します。ターミナルを開き、最新のPicameraアップデートをインストールします。
sudo apt update && sudo apt upgrade -y
5.ターミナルからカメラが正常に動作していることを確認します。libcameraコマンドは、カメラが接続され、期待通りに動作しているかどうかを素早く確認するのに便利です。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
libcamera-hello
ブルードットのインストール
Blue DotはMartin O'Hanlon氏の作品で、Raspberry Piをリモートコントロールするための非常にシンプルな手段を提供します。「Blue Dot」という名前は、Androidデバイスの画面に表示される大きな青い点を表しています。ここでは、Blue Dotを大きな青いボタンとして使い、カメラを起動して写真を撮影します。
1. AndroidデバイスでGoogle Playストアを開き、「Blue Dot」を検索してください。または、こちらのリンクをクリックしてください。
2. Android デバイスに Blue Dot をインストールします。
3. Raspberry Pi でターミナルを開き、Blue Dot の Python ライブラリをインストールします。
sudo pip3 install bluedot
4. Bluetoothメニューに移動し、右クリックして「検出可能にする」を選択します。
5. Android デバイスで、「設定」>>「接続済みのデバイス」に移動し、「新しいデバイスをペアリング」を選択します。
6. 「raspberrypi」を選択し、ペアリングの指示に従います。Raspberry Piのホスト名が異なる場合は「raspberrypi」は表示されないので、ホスト名を探してください。
Android デバイスと Raspberry Pi が接続されたので、Blue Dot が 2 つのデバイス間で通信できるかどうかを確認するための簡単な Python スクリプトを作成します。
1.メイン メニューの「プログラミング」にあるThonny を開きます。
2.新しいファイルを作成し、Blue Dot Python ライブラリをインポートします。
from bluedot import BlueDot
3.ライブラリを操作するために使用するオブジェクト bd を作成します。
sudo pip3 install bluedot
4.ユーザーが青いボタンを押すまで待機します。このPython行はブロッカーです。ユーザーが操作するまで待機します。操作が行われると、コードは次の行に進みます。
bd.wait_for_press()
5. Python シェルにメッセージを出力します。
print("You pressed the blue dot!")
6.コードをbd-test.pyとして保存し、「実行」をクリックします。コードはAndroidデバイスからの接続を待機します。
7. Android デバイスで Blue Dot を開きます。
8. Raspberry Piのホスト名を選択します。通常は「raspberrypi」です。
9.青いドットをクリックすると、Pythonコードが実行されます。Pythonシェルにメッセージが表示されます。
完全なテストコードリスト
from bluedot import BlueDot
bd = BlueDot()
bd.wait_for_press()
print("You pressed the blue dot!")
ブルードットを使ったカメラトリガーの作成
このプロジェクトの目標は、Blue Dotを使ってカメラトリガーを作成することです。ボタンを押すと、Raspberry Pi上で写真の撮影を処理する関数が起動します。
1.新しいファイルを作成し、Blue Dot Python ライブラリをインポートします。
from bluedot import BlueDot
2. Picamera2とlibcameraをインポートします。previewクラスは、ショットのフレーミングに便利なプレビューウィンドウを生成するために使用されます。libcameraのcontrolsクラスは、新しいCamera Module 3でオートフォーカスを使用するために使用します。
from picamera2 import Picamera2, Preview
from libcamera import controls
3. Signalから一時停止関数をインポートし、次にtimeライブラリをインポートします。pause関数はコードの終了を停止するために使用します。time関数はプレビューウィンドウの作成後にコードの実行を遅らせ、ショットをフレーミングする時間を確保します。
from signal import pause
import time
4.ライブラリを操作するために使用するオブジェクト bd を作成します。
bd = BlueDot()
5. Picamera2 ライブラリを簡単に使用できるようにするオブジェクト picam2 を作成します。
picam2 = Picamera2()
6.写真を撮るための関数 take_picture() を定義します。関数は関数名を呼び出すことで動作し、関数内のすべてのステップを実行します。
7.カメラで静止画を撮影するための設定を作成します。これにより、画像サイズは1080pに設定され、プレビューウィンドウは720pになります。
camera_config = picam2.create_still_configuration(main={"size": (1920, 1080)}, lores={"size": (1280, 720)}, display="lores")
8.新しい設定を使用するように Picamera2 を設定します。
picam2.configure(camera_config)
9. 720p解像度のプレビューウィンドウを開きます。位置はX座標とY座標で設定します。設定しない場合はデフォルトで0,0になります。必要に応じて調整してください。
picam2.start_preview(Preview.QTGL, x=100, y=200, width=1280, height=720)
10.プレビューウィンドウを表示します。
picam2.start(show_preview=True)
11.カメラを連続オートフォーカスに設定します。これはカメラモジュール3でのみ機能します。
picam2.set_controls({"AfMode": controls.AfModeEnum.Continuous})
12. picam1.jpg というファイルに画像をキャプチャする前に 2 秒間停止します。
time.sleep(2) picam2.capture_file("picam1.jpg")
13.プレビュー ウィンドウを閉じて、Picamera2 を停止します。
picam2.stop_preview() picam2.stop()
14. 関数の外で、Blue Dot の「when_pressed」関数を使用して、take_picture 関数を実行し、ユーザー入力に反応します。
bd.when_pressed = take_picture
15.コードが終了しないように、一時停止を使用します。
pause()
16.コードをbluedot_camera.pyとして保存し、「実行」をクリックしてコードを実行します。Androidデバイスの接続を待機するコードが表示されます。
17. Android デバイスでBlue Dot を開きます。
18. Raspberry Piのホスト名を選択します。通常は「raspberrypi」です。
19.青い点をクリックするとカメラが起動します。プレビューウィンドウが表示され、2秒後に画像がmicro SDカードに保存されます。繰り返し押すと新しい画像が作成されますが、ファイル名は同じなので、毎回上書きされます。
完全なコードリスト
from bluedot import BlueDot
from picamera2 import Picamera2, Preview
from libcamera import controls
from signal import pause
import time
bd = BlueDot()
picam2 = Picamera2()
def take_picture(): camera_config = picam2.create_still_configuration(main={"size": (1920, 1080)}, lores={"size": (1280, 720)}, display="lores") picam2.configure(camera_config) picam2.start_preview(Preview.QTGL, x=100, y=200, width=1280, height=720) picam2.start(show_preview=True) picam2.set_controls({"AfMode": controls.AfModeEnum.Continuous}) time.sleep(2) picam2.capture_file("picam1.jpg") picam2.stop_preview() picam2.stop()
bd.when_pressed = take_picture
pause()