ラズパイ公式カメラモジュール その2

前回の続きです。

部品を購入したところで取り付けないと始まりません。

a244.hateblo.jp

前提条件と準備

前提条件は以下の通り。

過去記事で使っている環境にカメラが追加されただけです。

注意点など

  • Raspbian をアップデートした状態に
  • GL Driver は無効化*1しておく

以下のコマンドを実行してOSをアップデート。

$ sudo apt update
$ sudo apt upgrade

念の為、ファームウェアもアップデートしておく。

$ sudo rpi-update

正常終了したら再起動。

以下、参考。

$ uname -a
Linux raspberrypi 4.4.38-v7+ #938 SMP Thu Dec 15 15:22:21 GMT 2016 armv7l GNU/Linux

接続と設定

カメラモジュールは静電気に弱いらしいので、周囲の金属に触れるなどして静電気を逃がしてから作業する*2

  1. ラズパイの電源を切り、しばらく待っってから*3電源ケーブルを取り外しておく
  2. カメラ接続用のコネクタHDMIポートの隣)の両端の黒いツメを垂直方向に引き上げる
  3. 向きに注意しつつ、コネクタにケーブルを差し込む。青い文字の印刷されている側がUSBポート側になるように
  4. しっかり押し込んだ状態で、コネクタの黒いツメを押し込んで固定する

f:id:atuyosi:20161228025305j:plain
接続後の状態

f:id:atuyosi:20161228025244j:plain
反対側から

通電状態で作業しても問題ないのかもしれませんが、気軽に電源の入った状態で抜き差しできるUSBが特別なのであって、本来周辺機器は電源オフで取り外すべきかと思います。

ソフトウェア側の設定

GUI環境の場合

f:id:atuyosi:20161228031709p:plain

  1. 画面左上端のメインメニューから「設定」「Raspberry Piの設定」をクリックして設定画面へ
  2. インターフェイス」タブの「カメラ:」の有効というラジオボタンをクリック
  3. 「OK」をクリックすると再起動を促してくるので素直に再起動

f:id:atuyosi:20161228031804p:plain

CLICUI)環境

sudo rasps-configから設定。"5. Interfacing Options"から"P1 Camera"と順に進んで行けばOK。

f:id:atuyosi:20161229000245p:plain
特に説明は不要なはず

補足:エラーの例など

ケーブルがしっかり刺さっていない(もしくはRaspbian側でカメラ用のインターフェイスが有効になっていない)状態でカメラにアクセスすると下記のようなエラーが表示される。

$ raspistill  -w 1920 -h 1080 -o try.jpg
mmal: Cannot read cameara info, keeping the defaults for OV5647
mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera' (1:ENOMEM)
mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (1)
mmal: Failed to create camera component
mmal: main: Failed to create camera component
mmal: Camera is not detected. Please check carefully the camera module is installed correctly

ピント調整時にケーブルを引っ張ってしまったせいで遭遇しました。

なお、カメラモジュール自体が故障している場合のエラーは不明です*4

フォーカス調整

マクロよりの条件で撮影したい場合のみ。監視カメラなどの用途であれば不用意に弄らない方がベターだと思います。もちろん自己責任で。

f:id:atuyosi:20161228025114j:plain
調整用の治具

付属の治具*5の裏側をよく見ると、微妙に凹みがあるのでその部分をカメラの先端部にはめ込む*6

f:id:atuyosi:20161228025136j:plain

初回のみ強めに押し付けた状態で軽く時計回りにひねってやると固定用の糊が外れるのか、すんなり回転するようになります*7

初期状態では無限遠方にピントが合うように設定されているため、時計方向にはほとんど回らないはずです。

近方にピントを合わせたいときは反時計回りに、遠方にピントを合わせたいときは時計回りに。反時計回りに回しすぎると完全なピンボケ状態になる。

時計回りに締め込んで行くとほぼ出荷時の状態に戻る。

ピント調整は接続したままの状態で問題ないです。用途に応じて撮影結果を確認しながら調整(静電気対策もお忘れなく)。

例えば以下のようにコマンドにraspistill(後述)の-tオプションに"0"ミリ秒を指定するとCtrl+Cを入力するまでプレビュー画像を撮影し続けるのでかなり楽(raspvidでも可)。

$ raspistill -t 0

raspistillraspvidでプレビュー表示の見え方が微妙に違うので目的にあった方のコマンドで確認しながら調整する。

専用コマンドで撮影

公式ドキュメントによると、カメラモジュール専用のコマンドとして、raspistillraspividraspistillyuvの3つが紹介されている。

しかしながら現在のところ、raspistillyuvではなくraspiyuv'に名称が変更されていたり、raspividyuv`が追加されているので結局全部で4つとなっている。

  • raspistill : 静止画用の画像データ取得コマンド
  • raspiyuv : YUV形式でデータ画像を取得するコマンド
  • raspivid : H264形式で動画を撮影するコマンド
  • raspividyuv : YUV420形式で動画を撮影するコマンド

それぞれオプションなし、もしくは-?オプション付きで実行するとオプション一覧が表示される。なおこれらのコマンドはlibraspberrypi-binというパッケージに含まれており、基本的に最初からインストールされている。

基本的なオプションは下記のページに一通り記載されてる。

Interface(インターフェース) 2016年09月号にカメラモジュール自体と、付属コマンドの解説が載っているのでそちらも参考に。

Interface(インターフェース) 2016年09月号

静止画の撮影

静止画を撮影するには-oオプションでファイル名を指定したうえで実行する。もうひとつ重要なのは画像を回転させるための-rotオプション。

また、-hで撮影する画像の高さ、-wで撮影する画像の幅を指定する。省略した場合は最大解像度(3280x2464)。

最大解像度未満の値を指定すると、不要な部分を切り捨てるケースと指定された解像度に縮小するケースがある。結果として指定する高さと幅の比率が画角に影響する。

$ raspistill  -w 1280 -h 800 -o test.jpg

コマンドを実行するとプレビューが表示された後、画像が保存される。プレビュー画像の表示位置と解像度は-pオプションで変更可能。

デフォルトではコマンドが実行されてから5000ミリ秒(つまり5秒)ほど待機してから撮影される。これは-tオプションで変更可能。 

以下は2秒後に撮影する例:

$ raspistill -t 2000 -o image.jpg

png形式で保存する(可逆圧縮):

$ raspistill  -o image.png -e png

-eで保存する形式を指定しない限りファイル名の拡張子によらずJPEG形式で保存される((jpg, bmp, gif, png)の4種が指定できる)。

他にもカメラの設定を変更するオプションと、夜景や花火などの特定の撮影シチュエーション向けのモード指定オプション、撮影した画像にエフェクトをかけるオプション*8がある。

撮影してみた画像

そのままでは固定できないので、Amazonで購入したクリップで挟んで固定。

f:id:atuyosi:20161229013948j:plain
なんとも微妙な絵面。

下記のように画像サイズを指定する。

$ raspistill  -w 1280 -h 800 -o testimage.jpg

撮影した画像は以下のとおり(フォーカス変更前)。

f:id:atuyosi:20161229013813j:plain
普通にいい感じに見える。


フォーカスをいじった後の画像。

f:id:atuyosi:20161229014426j:plain ちょっとマクロよりに調整しずぎでピントが甘い。


ちょうどいい被写体がないので微妙ですが、マクロの例(だいたい8cmぐらい)。

f:id:atuyosi:20161229021437j:plain
その1

f:id:atuyosi:20161229021502j:plain
その2

Interfaceの記事の通り、5cmぐらいまではいけるのは確認済み。マクロよりにすると焦点の合う範囲が狭くなるのも記事の通り。

動画は面倒なので省略。

おわりに

静電気に弱いらしいのと、オートフォーカスがない点を除けば非常にいい感じだという印象です。

気が向いたらPytonのPiCameraモジュールを使うサンプルにトライするつもりです。 トランジスタ技術なりInterfaceの記事を参考に遊んでみたいとは思っています。


ひとまずこんな感じです。

その他・関連リンク

*1:初期状態では無効なので自分で有効にしていないなら何もしなくてよい

*2:気にしすぎ?

*3:少なくとも20秒、ランプが点滅しなくなるまで

*4:率直に申し上げてそのような状況には陥りたくない

*5:購入時期によっては付属してないかもしれない。「Amazon.co.jpが販売・発送」しているものは問題なし。11月中旬にKSYに問い合わせたところ、付属しているとの回答だったのでKSYも大丈夫なはず。

*6:押し当てた状態で左右にひねるとはまり込む

*7:誤ってこれ以上回転しない方向に破損しないように意図的に緩めた状態で固定しているのだと思う

*8:あくまでもGPU側の機能