[RaspberryPi]カメラ周りのまとめ

# はじめに
飼っているお猫さまの安否確認をしたく、RaspberryPiでカメラ接続、撮影について試行錯誤したので、備忘としてまとめます

# カメラ
使ったカメラは以下の3台です

Raspberry Pi PiNoir Camera Module V2

- RSコンポーネンツで購入
- webカメラに比べて価格が高い
- RaspberryPiのコマンドアプリケーション（raspistill、raspivid）が使える 
- カメラのコードに対応していないRaspberryPiのケースだと、カメラの固定、コードの収納などに困る

[LOGICOOL ウェブカム HD画質 120万画素 C270](https://www.amazon.co.jp/dp/B003YUB660/ref=pe_1807052_198774502_tnp_email_dp_1)

- amazonで購入
- お手軽な価格
- 画角が少し狭く感じる

[iBUFFALO マイク内蔵200万画素WEBカメラ 120°広角ガラスレンズ搭載モデル BSW20KM11BK](https://www.amazon.co.jp/dp/B008AO4KXQ/ref=pe_492632_237129712_TE_item)

- amazonで購入
- カメラモジュールよりも価格が安い
- 画角はさすが
- lsusbでの認識がわかりずらい(メーカ、型番が出てこない KYE Systems Corp. (Mouse Systems) と表示される）

# アプリケーション
以下のアプリケーションを試しました

**カメラモジュール用のRaspberryPiのコマンドアプリケーション（raspistill、raspivid）**
　導入は簡単だけど、ストリーミング配信などできるか調べきれていない
　また、前述のようにカメラモジュールの固定が煩わしく、物理的に使い勝手が悪く感じてしまった

- 参考URL
    - [Raspberry Piカメラのセットアップ方法](http://www.rs-online.com/designspark/electronics/jpn/knowledge-item/raspberry-pi-camera-setup)
- 導入
    - Raspberry Pi用のコンフィグレーション設定(以下のコマンド)でカメラモジュールを有効にする
 
```lang:cmd
sudo raspi-config
```
- 撮影（静止画）
    - oオプションで出力ファイル名を指定

```lang:cmd
raspistill -o image.jpg
```
- 撮影（動画）
    - oオプションで出力ファイル名を指定
    - tオプションで撮影秒数を指定

```lang:cmd
raspivid -o video.h264 -t 10000
```

**motion**
　情報が多く、導入もしやすかった
　ただ、chromeや、Safariからも試したが、ストリーミングは表示することができなかった

- 参考URL
    - [RaspberryPiと安めのウェブカメラで監視カメラを作る。何か動きがあったら画像保存もする](https://divide-et-impera.org/archives/1098)
    - [はじめてのRaspberry PIで監視カメラを作ってみた。](http://qiita.com/kinpira/items/bf1df2c1983ba79ba455)
- 導入
    - apt-getでインストール
 
```lang:cmd
sudo apt-get install -y motion
```
- 設定ファイル
    - インストール後、/etc/motion/motion.confに設定ファイルができる
    - 画像の大きさ、保存先などを設定できる
- 撮影
    - カメラが何か動作を捉えると静止画を撮影することができる
    
```lang:cmd
sudo motion -c /etc/motion/motion.conf
```

**MJPG-streamer**
　導入にいくつかアプリケーションが必要だが、こちらも情報が多い
　ストリーミングも表示することができたが、自宅のネット環境でグローバルIPが使えないため、外出時の安否確認に使えない、、、

- 参考URL
    - [USBカメラで監視カメラ](http://make.bcde.jp/raspberry-pi/usb%E3%82%AB%E3%83%A1%E3%83%A9%E3%81%A7%E7%9B%A3%E8%A6%96%E3%82%AB%E3%83%A1%E3%83%A9/)

- 導入
    - apt-getで必要なアプリをインストール後、svnでモジュールをダウンロードして、makeする
    - makeすると/usr/local/bin/mjpg-streamerにコマンドアプリケーションができる
 
```lang:cmd
sudo apt-get install subversion libjpeg-dev imagemagick
mv /usr/local/bin/
svn co https://svn.code.sf.net/p/mjpg-streamer/code mjpg-streamer
cd mjpg-streamer/mjpg-streamer
make
```

- 撮影
    - /usr/local/bin/mjpg-streamerで以下のコマンドを実行
    - input_uvc.so
        - rオプションで画像サイズを指定
        - fオプションでフレームレートを指定
        - dオプションで使用するカメラを指定
        - yオプションはYUVGフォーマットに指定する
    - output_http.so
        - wオプションでストリーミングで使うページの出力先を指定
        - pオプションでポートを指定
        - cオプションでユーザ：パスワードでストリーミングページのベーシック認証を設定


```lang:cmd
mjpg_streamer -i "./input_uvc.so -f 2 -r 320x240 -d /dev/video0 -y" -o "./output_http.so -w ./www -p 8080 -c user:pass"
```
    
**fswebcam**
　静止画の撮影のみだが、使いやすい

- 参考URL
    - - [RaspberryPiでWebカメラ](http://qiita.com/KTaskn/items/2429b4d7d4f0456adf35)
    - [fswebcamでピントを合わせる&ぶれない画像を撮影する方法](http://qiita.com/Go-zen-chu/items/63f65156c748b34e1678)

- 導入
    - apt-getでインストール
 
```lang:cmd
sudo apt-get install fswebcam
```

- 撮影
    - rオプションで画像サイズを指定
    - Sオプションでスキップするフレース数を指定する
    - Fオプションでフレーム数を指定する
        - S、Fオプションともに露光に影響すると思う
    - 最後に出力先を指定する
    
```lang:cmd
sudo fswebcam -r 640x480 -S 2 -F 10 /home/pi/Pictures/image.jpg
```

# まとめ
自宅のネット環境でグローバルIPが使えないため、外出先から見れることを考慮すると、
安否確認システムを作るには、fswebcamで静止画を撮影して、dropboxなどと連携するのがよいのではと考えています