banner

ブログ

May 17, 2023

Python コードで Raspberry Pi カメラ モジュール 3 を使用する方法

Picamera2 ライブラリを使用して制御します。

Raspberry Pi には最高のアクセサリが数多くあり、そのリストに必ず登場するのが新しい Camera Module 3 です。Raspberry Pi Camera Module 3 のレビューでは、高速オートフォーカスと HDR 画像が気に入っており、今後も使い続けたいと述べました。この方法では、これらの機能を共有します。

これまでに Raspberry Pi カメラを使用したことがない場合、Picamera2 の初心者ガイドは、Pi で素晴らしい写真を撮るための優れた入門書となります。 このハウツーでは、Picamera2 で Camera Module 3 のフォーカス システムを使用できるさまざまな方法を検討し、プロセスを自動化する迅速でシンプルなスクリプトを使用して HDR 画像を撮影する方法を学びます。 Python が苦手な場合は、ターミナル経由で libcamera を使用してカメラ モジュール 3 を制御することもできます。

オートフォーカスには 3 つの動作モードがあります。

連続フォーカスでは、アルゴリズムを使用して画像ストリーム内でターゲットを検索します。 ターゲットが近く(約 10cm)にあるか、遠くにあるかは関係なく、アルゴリズムがターゲットを見つけてロックオンします。 しかし、それをどのように使用するのでしょうか? 簡単なテストを実行してみましょう。 連続フォーカス モードを使用して、ターゲットに可能な限り最適な焦点を合わせます。 カメラにかざせる物があると便利です。ここでは 1 ドル紙幣を使用しました。

1.メインメニューから「プログラミング」>>「Thonny」を開きます。

2.Picamera2をインポートします。

3.libcamera のコントロール クラスをインポートします。これにより、要件に合わせてカメラを設定できます。

4.オブジェクト picam2 を作成するこれをコードとカメラの間のリンクとして使用します。

5.プレビュー ウィンドウを開始します。プレビューでは、カメラの出力が表示されます。

6.AfMode(オートフォーカスモード)を連続的に設定します。

7。コードを AFtest.py として保存します。

8.「実行」をクリックしてコードを開始します。プレビューウィンドウが表示されます。 オブジェクトを移動し、フレームの周りで 1 ドル紙幣を選択し、焦点が移動するのを観察します。 オブジェクトをレンズに近づけてみてください。最も近い焦点は 10 センチメートルであることを覚えておいてください。

素晴らしいショットを撮るためには、固定焦点が必要な場合があります。 結局のところ、ぼやけた混乱を撮影したくないのです。 フォーカスを修正するのは比較的簡単です。 実際、これは非常に簡単なので、前の例のコードのほとんどを再利用できます。

1.名前を付けて保存を使用する前の例では、to ManualFocusTest.py という名前の新しいファイルを作成します。

2.LensPosition を使用するように最後の行を変更します。, この場合、無限フォーカスの値を 0.0 に設定します。

3.コードを実行します。遠くの物体では焦点が鮮明ですが、近くではぼやけていることに注目してください。

4.LensPosition の値を 0.5 に変更します。これにより、焦点距離は約 50 cm になります。

5.コードを保存して実行します。オブジェクトをカメラに向かって、またはカメラから遠ざけるように移動します。 50 cm 付近で焦点が鮮明になることに注目してください。

鳥カメラであれ、学校の運動会であれ、ホームセキュリティであれ、時には一連の鮮明な画像を取得する必要があります。 幸いなことに、カメラ モジュール 3 を設定して一連の高速画像を撮影し、オートフォーカスを高速に設定することができます。

1.AfFastFocus.py という名前の新しいファイルを作成します。

2.Picamera2をインポートします。

3.libcamera のコントロール クラスをインポートします。これにより、要件に合わせてカメラを設定できます。

4.オブジェクト picam2 を作成するこれをコードとカメラの間のリンクとして使用します。

5.プレビュー ウィンドウを開始します。プレビューでは、カメラの出力が表示されます。

6.オートフォーカス モードを連続に設定し、AfSpeed を高速に設定します。

7。3 つのファイルをキャプチャするようにカメラを設定し、各ショットの間に 0.5 秒の遅延を設けます。ファイル名「fastfocus.jpg」では、各ファイルに 0、次に 1、2 が追加されます。 番号順に 3 つのファイルを提供します。

8.プレビュー ウィンドウを閉じます。

9.カメラ接続を閉じます。

10.コードを保存して実行します。カメラに対して 3 つの異なる距離にオブジェクトを保持し、焦点が変化するのを観察します。カメラがショットを撮るとプレビュー ウィンドウがフリーズし、次のショットのためにリリースされます。 3 枚のショットが撮影されると、プレビュー ウィンドウが閉じます。

libcamera を使用すると、HDR (ハイ ダイナミック レンジ) 画像を簡単にキャプチャできます。 コマンドを実行するときに –hdr 引数を渡すだけです。 ただし、Picamera2 の場合は、Python コードを実行する前にターミナル コマンドを実行する必要があります。

HDR は、画像の動的明度範囲を拡大します。 HDR を使用すると、より深い暗闇とより明るい画像が得られます。 これは、同じシーンの複数の画像をそれぞれ異なる露出でキャプチャすることで機能します。 これらの画像は、範囲全体を網羅する 1 つの画像に結合されます。 カメラ モジュール 3 は HDR 画像をキャプチャできますが、フル 12MP 解像度ではキャプチャできません。 代わりに、解像度 2304 x 1296 ピクセルの 3MP 画像を取得します。

テストでは、次のコードを再利用します。AfFastFocus.pyプロジェクトを使用して、一連の HDR 画像をキャプチャします。 また、Python の OS ライブラリを使用して、ユーザーの介入なしで HDR 設定をオンまたはオフにするターミナル コマンドを実行します。 これは、HDR 設定のオンとオフを忘れることがないことを意味します。

1.HDRAfFastFocus.py という名前の新しいファイルを作成します。

2.Picamera2をインポートします。

3.libcamera のコントロール クラスをインポートします。これにより、要件に合わせてカメラを設定できます。

4.OSモジュールをインポートする 。 これにより、コードが基礎となるオペレーティング システム、この場合は Raspberry Pi OS (Linux) と対話できるようになります。

5.オブジェクト picam2 を作成するこれをコードとカメラの間のリンクとして使用します。

6.OS モジュールのシステム関数を使用して、HDR を使用するようにカメラを設定します。 Picamera2 は HDR をサポートしていますが、モジュール内では直接サポートしていません。 問題は、カメラと Linux ビデオ システム間のカーネル インターフェイスである V4L2 にあります。 現時点では、このカメラでは HDR のサポートが提供されていないため、Picamera2 で HDR を利用できるようにするには、この簡単な回避策を実行する必要があります。

7。Python シェルにメッセージを出力します。HDR がオンであることを通知します。

8.プレビュー ウィンドウを開始します。プレビューでは、カメラの出力が表示されます。

9.オートフォーカスモードを連続に設定しますそしてAfSpeedをFastに設定します

10.3 つのファイルをキャプチャするようにカメラを設定し、各ショットの間に 1 秒の遅延を設けます。ファイル名「HDRfastfocus.jpg」では、各ファイルに 0、次に 1、2 が追加されます。番号順に 3 つのファイルが与えられます。各ショット間の遅延を 2 倍にして、カメラに前の画像を保存してからフォーカスを設定する時間を与えます。次の画像 0.5 遅延でテストしましたが、ショットが少しぼやけすぎることがありました。

11.プレビュー ウィンドウを閉じます。

12.カメラ接続を閉じます。

13.ユーザーへのメッセージを出力するHDR がオフになっているので、os.system を使用してコマンドを実行します。

14.コードを保存して実行します。カメラに対して 3 つの異なる距離にオブジェクトを保持し、焦点が変化するのを観察します。カメラがショットを撮るとプレビュー ウィンドウがフリーズし、次のショットのためにリリースされます。 3 枚のショットが撮影されると、プレビュー ウィンドウが閉じます。

25 年以上にわたり、熱心な PC 技術ニュースの内部情報として Tom's Hardware を読んでいる専門家に加わりましょう。 CPU、GPU、AI、メーカーのハードウェアなどに関する最新ニュースと詳細なレビューをあなたの受信箱に直接お届けします。

Les Pounder は、Tom's Hardware の副編集者です。 彼はクリエイティブ テクノロジストであり、7 年間にわたり、老若男女の心を教育し、インスピレーションを与えるプロジェクトを立ち上げてきました。 彼は Raspberry Pi Foundation と協力して、教師向けトレーニング プログラム「Picademy」を作成し、提供してきました。

Raspberry Pi がデジタル アナログ ポラロイド カメラに動力を供給

Raspberry Pi が ChatGPT でビッグマウスのビリーベースに命を吹き込む

2023 年の GPU 価格: 6 月の更新

Les Pounder著 2023年4月23日

アヴラム・ピルチ著 2023年4月22日

Brandon Hill 2023 年 4 月 21 日

アヴラム・ピルチ著 2023年4月20日

Brandon Hill 2023 年 4 月 16 日

Les Pounder著 2023年4月15日

Les Pounder著 2023年4月9日

Les Pounder著 2023年3月25日

ジャレッド・ウォルトン著 2023年3月19日

Les Pounder著 2023年3月18日

アブラム・ピルチ著 2023年3月15日

手動: 自動: 連続: メイン メニューから [プログラミング] >> [Thonny] を開きます。 Picamera2をインポートします。 libcamera のコントロール クラスをインポートします。 オブジェクト picam2 を作成します。 プレビュー ウィンドウを開始します。 AfMode(オートフォーカスモード)を連続的に設定します。 コードを AFtest.py として保存します。 「実行」をクリックしてコードを開始します。 [名前を付けて保存] を使用して、ManualFocusTest.py という名前の新しいファイルを作成します。 最後の行を、LensPosition を使用するように変更します。 コードを実行します。 LensPosition の値を 0.5 に変更します。 コードを保存して実行します。 AfFastFocus.py という名前の新しいファイルを作成し、Picamera2 をインポートします。 libcamera のコントロール クラスをインポートします。 オブジェクト picam2 を作成します。 プレビュー ウィンドウを開始します。 オートフォーカス モードを連続に設定し、AfSpeed を高速に設定します。 3 つのファイルをキャプチャするようにカメラを設定し、各ショットの間に 0.5 秒の遅延を設けます。 プレビュー ウィンドウを閉じます。 カメラ接続を閉じます。 コードを保存して実行します。 AfFastFocus.py HDRAfFastFocus.py という名前の新しいファイルを作成します。 Picamera2 をインポートします。 libcamera のコントロール クラスをインポートします。 OS モジュールをインポートします。オブジェクト picam2 を作成します。os モジュールのシステム関数を使用して、HDR を使用するようにカメラを設定します。 Python シェルにメッセージを出力します。 プレビュー ウィンドウを開始します。 オートフォーカス モードを連続に設定します。AfSpeed を高速に設定します。各ショット間に 1 秒の遅延を設けて 3 つのファイルをキャプチャするようにカメラを設定します。 プレビュー ウィンドウを閉じます。 カメラ接続を閉じます。 ユーザーへのメッセージを出力します。 コードを保存して実行します。
共有