今回はRaspberry PIのカメラコマンドを使ってみます。Raspberry PIのカメラコマンドはRaspberry PI 3の頃と現在では大きく変更されています。ここでは新しいカメラコマンドを使ってみましょう。なお、今回はVNC経由ではなくsshでRaspberry PIにログインして、ターミナル上でカメラ撮影のコマンドを実行します。

撮影したデータはRaspberry PIのホームディレクトリにあるPicturesディレクトリに保存します。カレントディレクトリはこのPicturesディレクトリとします。コマンドならcd ~/Picturesです。これまでとは保存先/カレントディレクトリが違うので注意してください。

カメラの取り付け

 Raspberry PIに取り付けるカメラは対応しているものを選択した方がよいでしょう。慣れてきたら他のカメラ(USBカメラなど)を取り付けてみてください。なお、USBカメラについては別の機会に説明します。

Raspberry PI Documentaiton
https://www.raspberrypi.com/documentation/computers/camera_software.html

 ここではIMX219のカメラを取り付けています。Raspberry PIだとカメラ接続するコネクタが2つあります。どちらに接続しても問題ありません。

スイッチサイエンス
https://www.switch-science.com/products/9441
https://www.switch-science.com/products/9442

 カメラを取り付けたらRaspberry PIを起動します。カメラが接続されているかどうかは以下のコマンドで確認できます。

rpicam-hello --list-cameras

 もしカメラの一覧が出てこない場合は端子にまっすぐにケーブルが差し込まれているか確認してください。特にRaspberry PI 5では接続する端子が狭くなっています。もし、接続に問題がないのにカメラ一覧に出てこない場合は、もう1つあるカメラ端子の方に差し込んでみてください。それでも駄目な場合はカメラが壊れている可能性もあります。予算的に問題ないのであれば、新たに対応しているカメラを購入してください。

認識しない場合は以下のようにコマンドを入力して設定ファイルを変更します。

sudo vi /boot/firmware/config.txt

以下のように変更・追加します。imx219が接続するカメラ名になります。cam0で駄目な場合はcam1にしてみてください。

camera_auto_detect=0
dtoverlay=imx219,cam0

設定が終わったらRaspberry PIを再起動します。 また以下のコマンドを入力すると実際のカメラからの画像が表示されます。

rpicam-hello

静止画を撮影

 カメラが接続されているのを確認したら実際に撮影してみます。静止画を撮影するコマンドは以下のものがあります。

rpicam-still
rpicam-jpeg
rpicam-raw

rpicam-rawコマンドはカメラからの生データを取得します。詳細な画像解析/処理をしないのであれば使う必要はないでしょう。
rpicam-jpegは撮影した画像をJPEG形式で保存します。単純に撮影したデータをJPEG形式で保存するだけで十分なら、このコマンドで用に足りるでしょう。

rpicam-stillは包括的なコマンドとも言えます。細かな撮影設定が可能です。多くの場合、rpicam-stillコマンドを使えば問題ないでしょう。

それではrpicam-stillコマンドを使って静止画を撮影してみます。rpicam-stillコマンドは最低限書き出すファイル名を指定する必要があります。出力ファイル名は-oの後に指定します。以下の例では1.jpgという名前で画像が保存されます。

rpicam-still -o 1.jpg

コマンドを実行すると標準出力に大量の文字が出力されてしまいます。とりあえず以下のようにして消してしまいましょう。

rpicam-still -o image.jpg > /dev/null 2>&1

撮影された画像を見ると上下が180度回転してしまっています。画像処理ソフトなどで後から180度回転する方法もありますが、以下のようにrotationオプションを指定すれば180度回転した状態になります。

rpicam-still -o 1.jpg --rotation 180 > /dev/null 2>&1

ここまでコマンドを入力しましたが、撮影終了まで若干遅いのが気になる人がいるかもしれません。このような場合は以下のようにimmediateオプションを指定すれば即時撮影が行われます。

rpicam-still -o 1.jpg --rotation 180 --immediate > /dev/null 2>&1

撮影する横幅や縦幅を指定することもできます。横幅はwidth、縦幅はheightで指定します。なお、ここでの幅は最大解像度で撮影した画像を縮小した幅ではありません。全体の中から指定した幅で切り抜いた幅になります。つまり、幅が最大解像度よりも小さいと中心に向かって切り抜かれるような状態になります。

rpicam-still -o 1.jpg --width 320 --height 240 --rotation 180 > /dev/null 2>&1

ホワイトバランスの指定

 撮影時、屋外と室内で色味が変わってしまうことがあります。これはホワイトバランスが調整されていないことが原因です。ホワイトバランスを指定するにはawbオプションを使います。--awbの後に以下の単語を指定することができます。通常はautoを指定したのと同じことになります。

auto 自動調整
incandescent 白熱灯
tungsten タングステン
fluorescent 蛍光灯
indoor 室内
daylight 屋外(晴れ)
cloudy 屋外(曇り)
custom カスタム

それぞれのホワイトバランスを指定すると以下のようになります。

rpicam-still -o 1.jpg --rotation 180 --awb auto > /dev/null 2>&1
  • auto

rpicam-still -o 2.jpg --rotation 180 --awb indoor > /dev/null 2>&1
  • indoor(室内で撮影しているためautoと同じ)

rpicam-still -o 3.jpg --rotation 180 --awb daylight > /dev/null 2>&1
  • daylight

rpicam-still -o 4.jpg --rotation 180 --awb cloudy > /dev/null 2>&1
  • cloudy

HDR(ハイダイナミックレンジ)撮影

 撮影対象が暗い部分と明るい部分まで含まれるような場合、黒つぶれや白飛びが発生することがあります。このような場合はHDR(ハイダイナミックレンジ)撮影をする方法があります。以下のようにhdrオプションを指定することで広範囲な輝度で撮影することができます。

rpicam-still -o hdr.jpg --rotation 180 --hdr > /dev/null 2>&1
  • HDR撮影した画像

    HDR撮影した画像

  • 通常撮影した画像

    通常撮影した画像

HDR撮影した画像の方が暗い部分などがしっかり表現されているのが分かります。

コントラストの指定

 コントラストの指定はcontrastオプションになります。値が0になるほどコントラストが低くなります。

rpicam-still -o 1.jpg --rotation 180 --contrast 2 > /dev/null 2>&1
rpicam-still -o 2.jpg --rotation 180 --contrast 0.25 > /dev/null 2>&1

長くなったので続きは次回。

著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。