Raspberry Piで赤外線カメラモジュールを使ってみる

はじめに
-

前回webカメラを使って写真を送る監視カメラを作成しました。
前回記事：【[はじめてのRaspberry PIで監視カメラを作ってみた。](http://qiita.com/kinpira/items/bf1df2c1983ba79ba455)】

本当はその時にカメラモジュールを使用するつもりでしたが、エラーが起きたためwebカメラにしました。
そのため、今回再チャレンジしてみました。

機能概要
-
今回は前回とは別軸で、ペットを監視する為の動画配信機能を作成しようと思います。
年末年始に家を空けてる間いに、ペットの様子が見たい！と思ったので、ペットを監視する為の動画配信機能を最優先にしました。

スペック
-
あとで重要になるのでスペックを書いておきます。
・Raspberry Pi B+
・raspbian 8 Jessie

RaspberryPiのconfig設定
-
まずはカメラモジュールを繋げたら、
下記コマンドでRaspberryPiのconfig設定画面を表示します。

```bash
$ sudo raspi-config
```
するとこんな設定画面が出てくるので、まずはEnable Cameraを選択。
![スクリーンショット 2015-12-27 22.03.35.png](https://qiita-image-store.s3.amazonaws.com/0/93763/fb71bd9f-1a4d-33f4-a2d5-5182deaa9c00.png)

Enableを選択してFinishを選んでリブートします。
![スクリーンショット 2015-12-27 22.04.30.png](https://qiita-image-store.s3.amazonaws.com/0/93763/a102ca40-3559-f9b6-097a-b68e5e1ca3d1.png)

これで完了です。

カメラ動作テスト
-
次にカメラが正常に使えるかテストしてみます
raspistillコマンドは、静止画を撮影するコマンドです。

```bash
$ raspistill -o img.jpg
```

お！カメラも赤く光って、正常に動作している事がわかります！
![IMG_4048.jpg](https://qiita-image-store.s3.amazonaws.com/0/93763/b7a723aa-a4ea-e0e6-6fe0-614ae54540f8.jpeg)

写真ができている事を確認

```bash
$ ls
Desktop    Downloads  Pictures  Templates  img.jpg ←これ
```
ちゃんとできてますね。

ではscpでlocalのPCにコピーして実際に写真を見てみます。
おお！ピントが合ってないですが、一応撮れてますね！
![img.jpg](https://qiita-image-store.s3.amazonaws.com/0/93763/bad7fdb9-42ca-5368-6404-93ff16f4042b.jpeg)
これで、カメラ自体の動作は問題無い事が確認できました。

motionで使う
-
次に、前回も登場したmotionなのですが、実はカメラモジュールには使えないそうなのです。
代わりにカメラモジュール用のmotion-mmalcamを使用します。
motion-mmalcamはconfの内容等は通常のmotionと同じみたいです。

```bash
$ wget https://www.dropbox.com/s/xdfcxm5hu71s97d/motion-mmal.tar.gz
$ tar -zxvf motion-mmal.tar.gz
```

では早速起動させてみます。

```bash
$ sudo ./motion -n -c motion-mmalcam.conf
./motion: error while loading shared libraries: libavformat.so.53: cannot open shared object file: No such file or directory
```

エラーになりました、libavformatが無いみたいですね。
そもそも、libavformatとはなんぞや？
[wikipedia:FFmpeg](https://ja.wikipedia.org/wiki/FFmpeg)
>FFmpeg（エフエフエムペグ）は動画と音声を変換することのできるUNIX系OS生まれのフリーソフトウェアであり、libavcodec（動画/音声のコーデックライブラリ）、libavformat（動画/音声のコンテナライブラリ）、libswscale（色空間・サイズ変換ライブラリ）、libavfilter（動画のフィルタリングライブラリ）などを含む。

ふむふむ、ようは動画や写真を扱うライブラリなのね。

ではインストールしますかね。

```bash
$ sudo apt-get -y install libavcodec-dev libavcodec53 libavformat53 libavformat-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
E: パッケージ libavcodec53 が見つかりません
E: パッケージ libavformat53 が見つかりません
```
ええ？！インストールできない orz

[こちら](http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13151439038)でapt-file使うと良いよみたいなもの見つけたので、試してみる。

```bash
$ sudo apt-get install apt-file
~~snip~~
$ sudo apt-file update
~~snip~~
$ apt-file search libavformat.so.53 ←反応が無いから、対象がhitしなかったらしい。
$ apt-file search libavformat.so ←hitした様子。
libavformat-dev: /usr/lib/arm-linux-gnueabihf/libavformat.so
libavformat56: /usr/lib/arm-linux-gnueabihf/libavformat.so.56
libavformat56: /usr/lib/arm-linux-gnueabihf/libavformat.so.56.1.0
omxplayer: /usr/lib/omxplayer/libavformat.so
omxplayer: /usr/lib/omxplayer/libavformat.so.56
omxplayer: /usr/lib/omxplayer/libavformat.so.56.25.101
```
お！なんかhitした思ったので、とりあえず、「libavformat-dev」と「libavformat56」をインストールしてみたのですが、もちろん解決にならずorz
まぁ、上の知恵袋でも言ってた様にOSがダメなのかもしれない...

OSの確認
-
とりあえず、OSが原因かもしれないのでOSを確認します。

```bash
$ cat /etc/debian_version
>> 8.0
```
8系なのでやはり、Jessieでした。
やはり、7系のWheezyにするしか無いのか。。。

そもそも今回の原因は何だろう。
motion-mmalcamを起動しようとするとlibavformatが無いというエラーになる。
ffmpegはlibavformatを含む。
ffmpegが入ってないのがダメなのか？

```bash
~/work/ffmpeg/ffmpeg-2.7.2 $  ffmpeg -version
-bash: ffmpeg: コマンドが見つかりません
```
入ってない...
ん〜良くわからないけどffmpeg入れたら動くのでは？と思いました。

ffmegをインストール
-

[Rapberry Pi 2 のRapbian jessieでffmpegをセルフビルドしてみた](http://d.hatena.ne.jp/embedded/20151011/p2)
ではこちらの記事に忠実に従ってにffmpegを入れます。

・まずはビルドに必要なパッケージをインストールします。
・fdk-aacなるものをビルドします。
・そしてffmpegをビルドします。
ffmpegのビルドに6時間かかりました...

```bash
$ sh myconfig.sh ←ビルド開始
~~~snip~~~
collect2: error: ld terminated with signal 9 [強制終了]
Makefile:122: recipe for target 'ffmpeg_g' failed
make: *** [ffmpeg_g] Error 1
make: *** 未完了のジョブを待っています....

real    332m24.627s
user    319m54.230s
sys    6m27.370s
```
エラーにより強制終了されましたorz
6時間が水の泡です。

mjpg-streamerを使う。
-
途方にくれていると、motion以外にも簡単に動画配信できる、mjpg-streamerなる物が有る事をしりました。

今回は動画配信機能なので、mjpg-streamerで全く問題ありません。
と言う事で、まずはOSを入れ替えるより、mjpg-streamerで対応する事にしました。

今回は[こちらの記事](http://neuralassembly.blogspot.jp/2013/11/raspberry-pipi-noirandroid.html)を参考にしました
ではまず、libjpeg62-devをインストールします^^

```bash
$ sudo apt-get install libjpeg62-dev cmake

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
Package libjpeg62-dev is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
  libjpeg9-dev libjpeg8-dev libjpeg62-turbo-dev

E: Package 'libjpeg62-dev' has no installation candidate
```
エラー....
オワタ＼(^o^)／

と思ったのですが、[こちらの記事](http://raspibb.blogspot.jp/)に回避方法が書いてありました。
>p.292：mjpg-streamerインストール用コマンドの2番め
>mjpg-streamerをインストールするためのコマンドの2番めは下記のようなものでした。 
>$ sudo apt-get install libjpeg62-dev cmake
>このコマンドが 
>E: Package ′libjpeg62-dev′ has no installation candidate
というエラーにより終了する場合、このコマンドを下記のように変更してください。libjpeg62-devをlibjpeg8-devに変更しています。 
$ sudo apt-get install libjpeg8-dev cmake

どうやらlibjpeg8-devで代用できるようです。
これに従って、いったんlibpeg8でやってみます。

```bash
$ sudo apt-get install libjpeg8-dev cmake
~~snip
libjpeg8-dev:armhf (8d1-2) を設定しています ...
```

うまく行きました！！

では次にmjpg-streamerをクローンしてきます。

```bash
$ git clone https://github.com/jacksonliam/mjpg-streamer.git mjpg-streamer
```

そしてmake!

```bash
$ cd mjpg-streamer/mjpg-streamer-experimental
~/mjpg-streamer/mjpg-streamer-experimental $ make
$ sudo mv mjpg-streamer/mjpg-streamer-experimental /opt/mjpg-streamer
```

さぁ！準備は整いました！
いざ起動！！

```bash
$ cd /opt/mjpg-streamer 
$ ./mjpg_streamer -o "./output_http.so -w ./www -p 8080" -i "./input_raspicam.so -fps 30 -x 320 -y 240"
~~~snip~~~
i: fps.............: 30
 i: resolution........: 320 x 240
 i: camera parameters..............:

Sharpness 0, Contrast 0, Brightness 50
Saturation 0, ISO 400, Video Stabilisation No, Exposure compensation 0
Exposure Mode 'auto', AWB Mode 'auto', Image Effect 'none'
Metering Mode 'average', Colour Effect Enabled No with U = 128, V = 128
Rotation 0, hflip No, vflip No
 o: www-folder-path...: ./www/
 o: HTTP TCP port.....: 8080
 o: username:password.: disabled
 o: commands..........: enabled
~~~snip~~~
```
ｷﾀ━━━(ﾟ∀ﾟ).━━━!!!
動きました！
ではブラウザで確認してみます。

```
http://[Raspberry piのIPアドレス]:8080
```
![スクリーンショット 2015-12-30 2.20.33.png](https://qiita-image-store.s3.amazonaws.com/0/93763/ecd65415-bc16-3d6d-a2ae-d6bc46b43f02.png)
おお、きてるきてる！！
赤外線カメラだからか色が薄いです。
本当はこんな感じでもっと赤い色をしています。
![imgres.jpg](https://qiita-image-store.s3.amazonaws.com/0/93763/dafa0e8b-7682-ab5c-e39d-723bbb28a083.jpeg)

ではせっかくの赤外線なので、暗転してみます。
ドーーーン！
![スクリーンショット 2015-12-30 2.21.02.png](https://qiita-image-store.s3.amazonaws.com/0/93763/c04e3745-c6fe-ef42-4e51-e10f285a7852.png)
おお！かなりはっきり写りました！
しかも、動画の動きも滑らかです。
motionでwebカメラ使った時のカクカクと比べると、おなじ30fなのにこちらの方が、かなりスムーズですね。

これで留守中でもペットがはっきり見えます。
とりあえず、今回はこれで良しとします。

しかし、motionでもカメラモジュールを使用したいので、そのうちOSを下げる等して、libavcodec53エラーを解決したいなぁと思います。
他に良い解決方があれば教えてくださいw