Raspberry Pi のカメラモジュールの使い方 (2013/07/26, 2013/12/01)

5月22日頃に発注したラズベリーパイ専用のカメラモジュールが届きました。 今回は RSオンライン から購入しました。 当初は発送は9月中旬になる予定でしたが、思いもよらず 2か月早く届きました。

http://elinux.org/Rpi_Camera_Moduleル によると、カメラのスペックは以下のようです。


raspi-config の設定変更

カメラモジュールは2013年5月末以降の状態にアップデートした Raspbian で使うことができます。今回は配布サイトからダウンロードした 2013-05-25-wheezy-raspbian.zip で新たにブート用のSDカードを作成 (2013-05-25-wheezy-raspbianのインストール) して、raspi-config コマンドでカメラを有効に設定しました。



カメラを有効にする設定

raspi-configの最初の画面の「5 Enable Camera」を選択して、接続したカメラモジュールを「Enable」にします。



カメラをケースに組み込む

今回は最近使っていなかった Raspberry Pi Type B の Rev.1(256MB)のボード使いました。 カメラ基板をRaspberry Pi に接続して撮影を試しましたが、カメラがリボンケーブルの先にあって「ぷらぷら」と安定しません。 何らかの固定をしないとうまく撮影できないため、Raspberry Pi が梱包されてくるピンク色のケースを加工して、Raspberry Pi とカメラモジュールを組み込んで固定するケースとして利用しました。 Raspberry Pi が梱包されていたケースは見かけによらず割れやすいため、熱したドライバーで、レンズ、固定用の穴、ケーブル類を通す穴を開けました。 カメラは糸で固定しています。 「一体型の無線撮影サーバ」という何か危険な香りのするものが出来上がりました。外に持ち出したりしないほうがいいでしょうね。

raspicam0724.jpg

Rasberry Pi とカメラモジュールを合わせた消費電力は 800mA で、電力供給が十分でないと問題が発生するようです。

私が Raspberry Pi に使用している電源は 2A の USB ACアダプタ ですが、これまで何も問題なく安定して動作しています。 カメラモジュールと無線 LAN アダプタ(GW-USValue-EZ) を接続した場合の消費電力は、約4-5W (ワットチェッカーによる実測値) で、実際に 800mA から 1A 程度の電流が使われています。 ポリヒューズが使われていて電圧的には不利な Rev.1(256MB) のボードですが、カメラを接続しても安定に動作しています。 あまり空気の流れない上記のケースではけっこう熱くなりますが、CPUの温度は数時間通電していても以下のように51 - 54℃程度で、仕様上は問題ない温度です。

$ /opt/vc/bin/vcgencmd measure_temp
temp=54.1'C

カメラ用コマンド

カメラモジュールを使うため、Raspberry Pi には3つのコマンドが用意されています。普通のデジタルカメラのように静止画を撮影する raspistill コマンド、デジタルビデオとなる raspivid コマンド、ファイルの圧縮エンコードをしない静止画撮影用の raspiyuv コマンドです。デジタルカメラとして多くの機能を持っていますが、コマンドのオプションとして指定する必要があるため、コマンドのヘルプだけでは多機能すぎて分かり難いため、整理してみました。

コマンドの実体は /opt/vc/bin/ 以下にあります。

/opt/vc/bin $ ls -lt
total 364
-rwxr-xr-x 1 root root 59825 Jun 19 19:08 edidparser
-rwxr-xr-x 1 root root 44483 Jun 19 19:08 raspistill
-rwxr-xr-x 1 root root 40243 Jun 19 19:08 raspivid
-rwxr-xr-x 1 root root 38070 Jun 19 19:08 raspiyuv
-rwxr-xr-x 1 root root 44950 Jun 19 19:08 tvservice
-rwxr-xr-x 1 root root 62584 Jun 19 19:08 vcdbg
-rwxr-xr-x 1 root root 15054 Jun 19 19:08 vcgencmd
-rwxr-xr-x 1 root root 55013 Jun 19 19:08 vchiq_test

これらのコマンドのソースは github で公開 されています。

raspistill

デジタルカメラとして静止画を撮影するコマンドです。コマンドラインで 「 raspistill -o photo.jpg 」のように使用します。

-?, --help       : ヘルプの表示
-w, --width      : 画像の幅の指定 (サイズ)
-h, --height     : 画像の高さの指定 (サイズ)
-q, --quality    : jpeg 品質を設定 (0 - 100)
-r, --raw        : jpeg メタデータに Bayer 配列データを追加する
-o, --output     : 出力ファイル名 (標準出力の場合は '-o -'). 指定しなければ何も保存されない
-v, --verbose    : 詳細情報の表示
-t, --timeout    : 撮影までの時間をミリ秒単位で指定。指定しない場合は5秒。
-th, --thumb     : サムネイルパラメータを設定 (x:y:quality)
-d, --demo       : デモモードを実行、撮影しない。
-e, --encoding   : 出力ファイルのエンコード方法の指定 (jpg, bmp, gif, png)
-x, --exif       : EXIFタグの指定 ('key=value'の形式)
-tl, --timelapse : こま撮りモード(ミリ秒で指定した間隔で連続撮影)
-fp, --fullpreview:撮影する写真とモニターに映るプレビュー画面を同じサイズ
                   (最大解像度 2592x1944)にする。
                   画面更新が最大15fpsまで遅くなる。(2013/12/01追加)

raspivid

ビデオ出力を表示するコマンド。指定したビットレイトで H264 形式で録画できます。

-?, --help        : ヘルプの表示
-w, --width       : 画像の幅の指定 (サイズ、デフォルトは 1920)
-h, --height      : 画像の高さの指定 (サイズ、デフォルトは 1080)
-b, --bitrate     : ビットレイトの設定 (例. 10MBits/s は -b 10000000)
-o, --output      : 出力ファイル名 (標準出力の場合は '-o -') 
-v, --verbose     : 詳細情報の表示。
-t, --timeout     : 撮影時間をミリ秒単位で指定。指定しない場合は5秒。0 は無効化。
-d, --demo        : デモモードを実行、撮影しない。
-fps, --framerate : フレーム/秒を指定
-e, --penc        : エンコード後にプレビュー画像を表示(圧縮の効果を表示)
-g, --intra       : 内部リフレッシュ期間を指定 (key frame rate/GoP size)

raspiyuv

ファイルを圧縮しない静止画撮影用のコマンドです。

-?, --help    : ヘルプの表示
-w, --width   : 画像の幅の指定 
-h, --height  : 画像の高さの指定 
-o, --output  : 出力ファイル名 (標準出力の場合は '-o -'). 指定しなければ保存されない
-v, --verbose : 詳細情報の表示
-t, --timeout : 撮影までの時間をミリ秒単位で指定。指定しない場合は5秒。

各コマンド共通のオプション

以下のオプションは raspistill、raspivid、raspiyuv のコマンドで共通に使えます。 あまりはっきり効果がわからないものもありますが、色々試してみましょう。

プレビューパラメータ

Raspberry Piをディスプレイに接続していると、画面にプレビューが表示されますが、位置や大きさの指定ができます。

-p, --preview     : プレビューウィンドウの設定 <'x,y,w,h'>
-f, --fullscreen  : フルスクリーン
-op, --opacity    : プレビューウィンドウの不透明度 (0-255)
-n, --nopreview   : プレビューウィンドウを表示しない
イメージパラメータ

撮影条件に関するオプションです。普通のカメラと似たような設定ができます。

-sh, --sharpness  : シャープネス (-100 to 100)
-co, --contrast   : コントラスト (-100 to 100)
-br, --brightness : ブライトネス (0 to 100)
-sa, --saturation : サチュレーション (-100 to 100)
-ISO, --ISO       : ISO の設定
-vs, --vstab      : Turn on video stablisation
-ev, --ev         : 露出補正
-ex, --exposure   : 露出モードの設定
-awb, --awb       : ホワイトバランスの設定
-ifx, --imxfx     : 画像効果の設定
-cfx, --colfx     : Set colour effect (U:V)
-mm, --metering   : 測光モードの設定
-rot, --rotation  : 画像の回転 (0-359)
-hf, --hflip      : 水平反転
-vf, --vflip      : 垂直反転
露出モード ( -ex )
モード 意味
off オフ
auto 自動
night ナイト
nightpreview ナイトプレビュー
backlight 逆光
spotlight スポットライト
sports スポーツ
snow スノー
beach ビーチ
verylong 長時間
fixedfps ?
antishake ぶれ防止
fireworks 花火
オートホワイトバランスモード ( -awb )
モード 意味
off オフ
auto 自動
sun 晴天
cloud くもり
shade 日陰
tungsten タングステンタイプ
fluorescent 蛍光灯
incandescent 白熱電球
flash フラッシュ
horizon 日没光
画像効果モード ( -ifx )
モード 意味
none 無し
negative 反転
solarise 日の出
sketch スケッチ
denoise ノイズ除去
emboss エンボス
oilpaint 油彩
hatch ハッチング
gpen Gペン
pastel パステル
watercolour 水彩
film フィルム
blur ぼやけ
saturation 飽和
colourswap 色変更
washedout ウォッシュアウト
posterise ポスタリゼーション(階調変更)
colourpoint カラーポイント
colourbalance カラーバランス
cartoon アニメ絵
測光モード ( -mm )
モード 意味
average 平均
spot スポット
backlit 逆光
matrix 多分割

撮影例

リビングの片隅に Raspberry Pi を置いて、バッチファイルで色々なモードで撮影してみました。 普通の部屋の照明 (LED) だけです。大きい画像 (2592 x 1944) のサイズを縮小すると、各モードの特徴がわからなくなってしまうので、最初から480x360のサイズで撮影して、未加工でこのページに貼っています。

 $ raspistill -w 480 -h 360 -n -o normal2.jpg

 $ raspistill -w 480 -h 360 -n -ifx pastel -o pastel2.jpg

 $ raspistill -w 480 -h 360 -n -ifx washedout -o washedout2.jpg 

 $ raspistill -w 480 -h 360 -n -ifx oilpaint -o oilpaint2.jpg

 $ raspistill -w 480 -h 360 -n -ifx sketch -o sketch2.jpg

 $ raspistill -w 480 -h 360 -n -ifx cartoon -o cartoon2.jpg

 $ raspistill -w 480 -h 360 -n -ifx emboss -o emboss2.jpg

 $ raspistill -w 480 -h 360 -n -ifx posterise -o posterise2.jpg 

 $ raspistill -w 480 -h 360 -n -ifx gpen -o gpen2.jpg

超小型 PC ボードの Raspberry Pi と専用カメラモジュールの両方で 6000円程度で購入できます。 動画の解像度も画質もかなり良く、これから世界中で色々な使い方が発明されていくんでしょうね。


続く...