twitter icon   twitter icon   rss icon

Linux.com Japan

Home Linux Jp チュートリアル Raspberry PiとPiNoirカメラを組み合わせて夜間用カメラを作成する

Raspberry PiとPiNoirカメラを組み合わせて夜間用カメラを作成する

原文は、2015 年 7 月 15 日に掲載されました。

raspaccess

Raspberry Pi と Pi2 は、経済的な ARM マシンで、Linux を走らせることができます。広く普及した Raspberry Pi と互換性のある Pi 2 は、さまざまなアクセサリを利用することができます。たとえば、PiNoir カメラや 4D Systems のタッチ機構のついた 3.5 インチ ディスプレイなどです。

PiNoir カメラは、赤外線フィルターを持たない (no-Infrared Filter) ため、赤外線光源があれば夜間でも使用可能です。夜間撮影ができれば、Raspberry Pi を 24 時間監視システム、赤ちゃんの監視、そしてロボットの目として利用することができます。PiNoir カメラにはケースが付属していないので、カメラを保護するものが必要です。

4D Systems スクリーンをセットアップして、PiNoir カメラ以外でも撮影しました。赤外線光源と組み合わせると非常にうまく撮影できますし、撮影範囲も広がり、10 m 先まで照らすことができます。カメラは、Raspberry Pi のカメラ シリアル インタフェース (CSI) に接続します。スクリーンは、Raspberry Pi の 40 ピン ヘッダに接続します。

4D Systems 3.5 インチ スクリーン

4D Systems スクリーンは、65,000 色、480X320 QVGA の解像度を持っています。スクリーンは Raspberry Pi 2 と同じ大きさです。スクリーンの設置用ネジは、Raspberry Pi の USB 側に若干はみ出ます。

スクリーンのデータシートによると、電気的ショックを防ぐために、スクリーンの裏と Raspberry Pi の間にシールドが必要です。スクリーンと USB ポートを接続するソケットで、きちっとスクリーンを接続できます。raspberry Pi のイーサネット コネクタと接触の恐れがあるチップがあります。接触しないようにするため、絶縁体で分離すべきです。また、スクリーンの裏側にメスピンがあります。Raspberry Pi とは接触しないようにできていますが、やはり、念のためシールドがあったほうが良いでしょう。一番良いのは、Raspberry Pi とスクリーンの両方を格納し、適切な距離が保てるケースを作成することです。

Raspberry Pi と Pi2 両方の Raspbian 用のドライバーがあります。ドライバーは、スクリーンとタッチ機能をサポートしています。Raspberry Pi 2 は、背面に 40 ピンの拡張ヘッダがあります。スクリーンの背面には 26 ピンのメスヘッダがあり、Raspberry Pi と接続できます。Raspberry Pi2 の拡張ヘッダーの最初の 26 ピンは、Pi の最初のモデルと同じ構成 (原文のリンクは誤り) になっています。共通の 26 ピンは、Raspberry Pi2 の USB ソケットから離れた方にあります。

スクリーンを接続する前に、ドライバーをインストールします。4D Systems の製品ページのダウンロード セクションからリンクされています。Raspbian 7 (Wheezy) と kernel4dpi_1.3-3_pi2.deb でテストしました。下記に書かれているようにカーネル パッケージをインストールすることで、スクリーン ドライバーの設定も行われます。apt-get upgrade を実行するたびに kernel4dpi の再インストールが必要です。

root@pi:~# wget https://.../kernel4dpi_1.3-3_pi2.deb
root@pi:~# dpkg -i kernel4dpi_1.3-3_pi2.deb
...
Enable boot to GUI [Yn]y  

Raspberry Pi の電源を落として、スクリーンを接続します。Raspberry Pi の電源を入れると、ブート メッセージが表示されました。しかし、ブート終了後、スクリーンのバックライトは光っていますが、何も表示されませんでした。Linux pi 3.8.9-v7+ を使いました。少し調べて、/etc/rc.local に次の行を入れました。これは、スクリーンがサポートしているフレーム バッファを使って、X を実行するものです。

sudo -u pi FRAMEBUFFER=/dev/fb1 startx &

SSH セッションから FRAMEBUFFER を使った startx を実行することにしました。そうすれば、スクリーンにデスクトップが表示されます。Raspbian をインストールすると、標準で、runlevel(2) には S05kdm が含まれます。それを無効にしてリブートすれば、考えたとおりに、グラフィカル セッションが開始されます。

スクリーンは、フレームバッファ デバイスを提供します。使いやすく、テキスト、イメージ、およびビデオをデスクトップなしでも表示させることができます。以下のコマンドで、スクリーンにイメージやビデオを表示することができます。Qt のようなツールキットも、フレームバッファ上で実行することができます。

root@pi:/usr/share/pixmaps# fbi -T 2 -d /dev/fb1 MagicLinuxPenguins.png 
root@pi:~# mplayer -vo fbdev:/dev/fb1  -vf scale=480:320  test.mkv

タッチ機能は、2 段階で調整します。フレームバッファー上で ts_calibrate を使う方法と、X ウインドウで xinput_calibrator を使う方法です。どちらの調整も簡単です。スクリーン上で、質問に答える形で 4 つか 5 つ特定の場所をクリックするだけです。スクリーンの方向は、/boot/cmdline.txt ファイルの設定で、4 方向に変更することができます。これらのやり方は、スクリーンのデータシートにすべて書かれています。

GPIO 18 を使い、/sys/class/backlight/4dpi/brightness ファイルを制御することで、バックライトを暗くしたり、消灯したりできます。スクリーンの J1 コネクタをジャンパーして PWM にしているので、X 実行中は、brightness ファイルに書き込んでも変化しません。恐らく、X が直接スクリーンを暗くしているか、Raspberry Pi2 の設定を間違えているかだと思います。

PiNoir カメラ

pinoir

PiNoir カメラは、1080p、秒間 30 フレームのビデオ キャプチャと 500 万画素 (2592X1944) の静止画像を撮影できます。PiNoir カメラは、Raspberry Pi と接続するための短めのリボン ケーブルとボードから構成されています。Raspberry Pi は、イーサネット ポートの近くに CSI ポートがあります。CSI ポートにカメラのリボン ケーブルを接続します。CSI ポートの両脇にあるクリップを持ち上げて、少し戻す感じで、CSI ポートにリボンを差し込むことができます。クリップを元に戻し、押し込むと、ケーブルを固定できます。マニュアルによれば、カメラとリボンは静電気に弱いです。体を何かで接地してから、カメラをケースに格納し、リボンを CSI ポートに接続するとうまくできます。

 ハードウェアがうまくできたら、ソフトウェア的に CSI を有効にします。raspi-config を実行し、"Enable Camera" を選択します。Raspberry Pi をリブートします。

 raspistill プログラムを使うと、静止画像を撮影できます。下記のように、画像の格納場所を指定するだけです。実際の撮影前に 5 秒間のディレイがあり、結果が test.jpg に格納されます。--timeout 100 パラメータを指定して、100 ミリ秒だけのディレイにすると、露出不足になります。

pi@pi~$ raspistill  -o test.jpg
pi@pi~$ raspistill --timeout 100 -o badlight.jpg

カメラ起動後のディレイによる露出について調べるために、以下のコマンドを使って、1 秒毎に 10 個のイメージからなるタイムラプスを撮影しました。青っぽい画像から、ある程度きちっとした画像になるまで、約 3 秒かかりました。

pi@pi ~ $ raspistill --timeout 10000 --timelapse 1000 \
                     --nopreview -n -o test%04d.jpg

raspivid ツールは、カメラでビデオを撮影する良い道具です。最初のコマンドで作成された test.h264 には、ビデオ ファイル コンテナが含まれていませんでした。つまり、h264 形式の生ビデオ ストリームでした。これは、普通のビデオ再生プログラムでは、再生できません。MP4Box コマンドを使えば、生の test.h264 ストリームを含む mp4 ファイルを作成できます。test.mp4 ファイルは、mplayer や他のツールで再生できます。

  pi@pi ~ $ raspivid -t 5000 -o test.h264
  pi@pi ~ $
  pi@pi ~ $ sudo apt-get install -y gpac
  pi@pi ~ $ MP4Box -fps 30 -add test.h264 test.mp4

ビデオ ストリームをネットワークで公開する場合には、gstreamer が良いツールです。gst-rpicamsrc プロジェクトでは、Raspberry Pi カメラを gstreamer への入力として使えるようにしています。執筆時点では、まだ Raspbian のパッケージには含まれていません。libgstreamer1.0-dev パッケージをインストールして、gst-rpicamsrc のリポジトリから git で pull します。README に従って、ビルドし、モジュールのインストールをします。コマンドを引用します。

pi@pi ~/src $ sudo apt-get install libgstreamer1.0-dev  libgstreamer-plugins-base1.0-dev
pi@pi ~/src $ git clone https://github.com/thaytan/gst-rpicamsrc.git
pi@pi ~/src $ cd ./gst-rpicamsrc/
pi@pi ~/src $./autogen.sh --prefix=/usr --libdir=/usr/lib/arm-linux-gnueabihf/
pi@pi ~/src $ make
pi@pi ~/src $ sudo make install

gst-rpicamsrc モジュールをインストールして、以下のコマンドを使い、ネットワークで h264 ストリームを送ることができます。解像度が 1080p で、ハイ プロフィールで、カメラの映像をストリームする場合でも、Raspberry Pi2 の CPU 使用率は低く、top(1) で見ても、一桁台の値です。

Raspberry Piは、ハードウェアによるビデオ エンコーディングをサポートしています。rpicamsrc は、h264 エンコードのビデオをソースからサポートしているため、ビデオ ストリームの作成には、ハードウェア エンコーディングが利用されていたるようです。始めの 2 つのコマンドは、720 または 1080 ビデオをストリーム化するのに、少し違うエンコード プロフィールを使っています。最後のコマンドを使って、'mydesktop' マシン上でストリームを受け取り、ウインドウ内で見ます。

  pi@pi~$ gst-launch-1.0 -v rpicamsrc bitrate=1000000 \
  ! video/x-h264,width=1280,height=720,framerate=15/1 \
  ! rtph264pay config-interval=1 \
  ! udpsink host=mydesktop port=5000
  pi@pi~$ gst-launch-1.0 -v rpicamsrc bitrate=1000000 \
  ! video/x-h264,width=1920,height=1080,framerate=15/1,profile=high \
  ! rtph264pay config-interval=1 \
  ! udpsink host=mydesktop port=5000
  me@mydesktop ~$ gst-launch-1.0 udpsrc port=5000 \
  caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264" \
  ! rtph264depay ! decodebin ! autovideosink

RiNoir カメラと赤外線光源を使って暗視装置を作る

PiNoir カメラのデータシートによると、波長 880 nm の赤外線光源が必要です。TV6700 IR illuminator は、波長 850 nm であり、PiNoir の要求とは若干異なります。IR illuminator の仕様では、10 m の範囲で、放射角 70 度です。LED の寿命は 6000 時間、日中光源を消灯するために、自動オンオフ機能を持っています。

Infrared light

TV6700 IR illuminator は、一方の端に透明なカバーがあり、そこから LED が見える小型の金属製シリンダーから構成されています。12V 電源で動作し、1 つのオス コネクタと 2 つのメス コネクタが付いた分岐ケーブルが付属しています。すでに 12V で動作するカメラをお持ちで、電源に余裕があれば、分岐ケーブルを使うことで、そのカメラから電力を分けて IR illuminator を近くに置くことができます。また、U 型のブラケットと設置用のネジが付属しています。

illuminator の最初のテストを 5 X 5 ヤード(訳注: 1 ヤードは約 0.9 m) の室内で行いました。夜間で、明かりは 3W の LED デスク ライトと LCD スクリーンの状態で、床の近 く(カメラから 2 フィート。:訳注: 1 フィートは約 0.3 m) に設置したファンを撮影できましたが、カメラから 2 ヤードの本棚は、ほとんど見ることができませんでした。ただ、白い本の背の大きい文字が読めただけでした。3W LED を消灯すると、PiNoir カメラの画面は、完全に真っ暗になりました。モニターが発する明かりは、PiNoir カメラで暗いものを見るときには、不充分のようです。

3W LED の明かりを消したままで IR illuminator の電源を入れると、すべての画像をはっきりと見ることができました。部屋が暗いにもかかわらず、カメラの前で手を振ると、同時にカメラで見ることができました。IR 照明と IR フィルターを外したカメラを使うことで、より早く正確にストリーミングができるのです。静止画像の撮影時に露出時間を長く取ると、画像が不鮮明になります。

夜間に、背高の芝生に出て、Raspberry Pi から 7 m 離れた人をビデオ イメージに撮影可能な範囲で撮影できました。7 m という値は、光源の波長が、PiNoir の要求に合った波長ではないためだと思います。

RPi をビデオ モニターに使う

Raspberry Pi は、ディスプレイなしでも問題なく動作するため、必要に応じて情報を表示できるようにすることは、特定の用途にとって嬉しいことです。4D Systems の 3.5 インチ スクリーンは、Raspberry Pi ボードと同じ大きさですので、余分な場所や電源を必要としません。

PiNoir を使って、暗い場所でも 1080 h264 にエンコードされたビデオを作成できるため、Raspberry Pi をビデオ モニター用途に利用できるようになりました。たとえば、ディスプレイなしの Raspberry Pi と PiNoir をベビー モニターに使うことができます。Raspberry Pi をモニターに利用するときの問題は、CSI ケーブルが短いことでしょう。特に、USB ケーブルと比較すると良くわかります。Raspberry Pi をロボットの視覚として利用する時は、ロボットの見ている画像をネットワークを介して見ることができ、CPU の負荷に対しても影響を与えません。

PiNoir をセキュリティ用途に使用する場合は、IR 光源が必須です。カメラや IR 光源の存在に気付かせないようにして、誰が何をしているかを見つけることで、そのような状況に適切に対応することができます。

RS コンポーネントが、本文献で使ったハードウェアを提供してくれたことに感謝します。PiNoir カメラ、4D Systems のタッチ センサー付き 3.5 インチ ディスプレイ赤外線光源カメラ ケースは、RS コンポーネント オーストラリアのウェブサイトで、入手できます。または、RS コンポーネント本店のウェブサイト (訳注: 日本の RS コンポーネントのページはこちら) でも入手可能です。

Linux Foundationメンバーシップ

30人のカーネル開発者

人気コンテンツ

  1. Today's Linux 2018/12/03 2018年 12月 02日
  2. Today's Linux 2018/12/04 2018年 12月 03日
  3. Today's Linux 2018/12/06 2018年 12月 05日
  4. Today's Linux 2018/12/07 2018年 12月 06日
  5. Today's Linux 2018/12/10 2018年 12月 09日

Linux Foundationについて

Linux Foundation はLinux の普及,保護,標準化を進めるためにオープンソース コミュニティに資源とサービスを提供しています

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

サイトに関するお問い合わせはこちらまで

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

Linux.com JAPANでは広く皆様の提案、要望、投稿を受け付ける予定です。

乞うご期待!