Raspberry Piと動画モニタアプリMotionで、晩ご飯作成風景を家庭内ストリーミング配信する

# 使用機器・使用アプリ
- ラズパイ: Raspberry Pi3 Model B
- カメラモジュール: Raspberry Pi Camera V2 Daylight
- Motion: バージョン4.0

# はじめに
ラズパイのカメラモジュールを買いました。簡単に接続できて簡単に写真・動画も撮れてすごい。
いったん満足したのちググって、**Motion** という動画モニタアプリがあることを知りました。Motionを使うと、設定ファイルを触るだけで、ラズパイカメラがいま見てる風景をストリーミング配信でき、その様子をスマホやPCのブラウザから見ることができるらしい。すごい。
（さらに、Motionの名前通り、動体検知も簡単にできるらしい[^1]。むしろそれがメインな感じはある）

しかしこのMotion、実用例を探ると、監視カメラ運用の例ばかりヒットします。もうちょっとこう、ハッピーな使い道がないか考えて、**晩ご飯作成風景を家庭内配信する** のはどうだろうかと思いつきました[^2]。

**想定シチュエーション:**

- 私は主夫。毎晩 晩ご飯を作る。
- 中高生の息子と娘がいる。帰宅すると即自室に入る。
- おのおの、腹が減ってくると、今日の晩飯は何かと聞きに来る。
- おのおの、さらに腹が減ってくると、いつ出来上がるのかと頻繁に聞きに来る。
- スマホから調理風景を見れるようにしてやれば、今日の晩御飯が何なのか・いつごろ出来上がりそうなのか、聞きに来なくてもわかるだろう。

「わざわざラズパイを使わなくても、スマホアプリで出来るのでは?」とも思ったのですが、意外と、家庭内（=同LAN内）で動画をストリーミングできるアプリが見つからない。あったとしても、料理中にスマホを使いたいこともあるから、動画配信のためにスマホが塞がるのは嫌。

# カメラモジュールの準備と、Motionの試用

どっちも既存記事がたくさんあるので参考にしたリンクのみ貼ります。
真新しい情報は特にないので、どっちも知ってるという方は [次節](https://qiita.com/yamasaki1ma/items/20fcb55f06d20e5ebb44#%E6%99%A9%E3%81%94%E9%A3%AF%E4%BD%9C%E6%88%90%E9%A2%A8%E6%99%AF%E3%82%92%E5%AE%B6%E5%BA%AD%E5%86%85%E9%85%8D%E4%BF%A1%E3%81%97%E3%82%88%E3%81%86) へどうぞ。

## カメラモジュールの接続から試し撮影まで:

[Raspberry Pi 3 Model Bに専用カメラモジュールを接続する方法](http://www.neko.ne.jp/~freewing/raspberry_pi/raspberry_pi_3_camera_setup/)
カメラモジュールをラズパイに接続して、`$ raspi-config` でカメラを有効化して、`$ raspistill -o cam1.jpg` して無事に写真が撮れました。

## Motionのインストールから、スマホで見るまで:
[Raspberry Piでmotionを動かして、カメラの画像をストリーミング配信する方法](http://asukiaaa.blogspot.jp/2016/10/raspberry-pimotionusb.html)

1. 「カメラの設定」の節の、`$ sudo modprobe bcm2835-v4l2` を実行する（※ラズパイをリブートするごとにやる必要がある）。
2. 「motionの設定」の節を完全にまねて、`/etc/motion/motion.conf` を以下のように変更した:

```
output_pictures off
ffmpeg_output_movies off
stream_localhost off
```

`$ sudo motion` でMotionを起動し、ラズパイと同じLANに接続しているスマホChromeから `http://(ラズパイのIP):8081/` にアクセスします:
![motion_streaming_test.png](https://qiita-image-store.s3.amazonaws.com/0/150194/7523d9f3-b85f-dce0-42d3-3da727aaac98.png)

見れた。すごい。思ったより遅い（1秒につき1画像しか更新されないし、更新のタイミングも3秒くらい遅れる）けど、でもすごい。

# 晩ご飯作成風景を家庭内配信しよう
Motionを使えば、ラズパイカメラが見ている様子を、LAN内のデバイスにストリーミング配信できることがわかりました。
では、晩ご飯作成風景の配信を始めよう。

キッチンをいい感じに映せる位置にラズパイをセットしました。
![raspberry_enkei.png](https://qiita-image-store.s3.amazonaws.com/0/150194/c14a2cb1-cc4a-8a70-aeb9-5e333fca0b62.png)

![raspberry_kinkei.png](https://qiita-image-store.s3.amazonaws.com/0/150194/365fb77d-36f2-8cb0-ec10-fb1a24ed9931.png)
段ボールで高さ調節用の箱を作ってテープで止めました。ハンドメイド。

スマホから様子を確認する。よかろう:
![photo_kitchen.png](https://qiita-image-store.s3.amazonaws.com/0/150194/6480833b-8ab3-f330-d6a6-1a96967b0c9b.png)

準備できたので作ろう。今夜はカレーよ。
![photo_materials.jpg](https://qiita-image-store.s3.amazonaws.com/0/150194/3946cb42-f772-9d40-0fd8-ddc74c187c9e.jpeg)

## 配信してみた

（自室に居る子供のつもりで眺めてください）

肉煮始めた:
![boil_niku.png](https://qiita-image-store.s3.amazonaws.com/0/150194/4f089a2c-bcb9-b833-16b0-7134f9fb23c1.png)
人参切ってる:
![cut_ninjin.png](https://qiita-image-store.s3.amazonaws.com/0/150194/08c67a93-b23d-20cb-04ce-f4968aa8ff8f.png)
野菜炒めてる:
![fry_yasai.png](https://qiita-image-store.s3.amazonaws.com/0/150194/f65016d4-2038-a637-ea9a-e70ed2398400.png)
（ブロック肉を煮た汁をスープに使うと美味くなりますよ）:
![pour_soup.png](https://qiita-image-store.s3.amazonaws.com/0/150194/df7c25ad-220e-1366-584c-57482b965f3c.png)
金麦飲むな:
![drink_beer.png](https://qiita-image-store.s3.amazonaws.com/0/150194/181919dd-7a12-5dcf-2912-1af671134506.png)
肉入れた:
![entry_niku.png](https://qiita-image-store.s3.amazonaws.com/0/150194/25d80ae0-6b8a-c53e-46aa-abdd29d4a590.png)
ルー入れた。そろそろリビングに行こう:
![entry_paste.png](https://qiita-image-store.s3.amazonaws.com/0/150194/96824e65-f687-83d9-a77b-19e2ee500f63.png)

一連のgif:
![make_curry.gif](https://qiita-image-store.s3.amazonaws.com/0/150194/026bc865-61b9-1ca9-6ef7-acd90ad7ec48.gif)

こんな感じで調理の様子を遠隔から確認できました。晩飯に向けて空腹感の調整ができて子供たちもイライラしないで済むでしょう。

# さらなるアイデア
- ラズパイのIPは固定しておく方がよさそう。今回は `192.168.179.101` に固定しました。
- 調理開始時にラズパイの電源を入れて、調理終了で電源を切りたい。
  - プラグ抜き差しでもいいけど、純正電源アダプタならスイッチ付いてるので便利です。
  - ラズパイ起動時にMotionを同時に起動する方法: [リンク](http://asukiaaa.blogspot.jp/2016/10/raspberry-pimotionusb.html) ...自動起動設定の節
  - こうしておけば、晩ご飯作成だけでなく、朝食でも昼食でもおやつでも、スイッチさえ入れれば配信できる。
- Motionだけでは無理そうだけど、特定の動作（カメラに向かってokサインを向けるとか）をしたら調理終了の合図で、家庭内各位のスマホに通知が飛ぶのとか便利そう。
  - 「特定の動作」の検知は、OpenCVとか使えばできるのかな…?
  - 家庭内各位のスマホに通知を飛ばすのは [Line Notify](https://notify-bot.line.me/ja/) とかよさそう。

# おわりに
Raspberry Piと動画モニタアプリMotionで、晩ご飯作成風景を家庭内配信しました。

なお、お気づきでしょうが僕は独り身ですので子供は1人もいませんしカレーは1人で食べました。
![mesitero.jpg](https://qiita-image-store.s3.amazonaws.com/0/150194/c83837a7-aa21-e426-cf77-f5182eba5411.jpeg)
惣菜のカツ乗せた。おいしかったです:

[^1]: [Motionマニュアル](https://github.com/Motion-Project/motion):  Motion is a program that monitors the video signal from one or more cameras and is able to detect if a significant part of the picture has changed. Or in other words, it can detect motion.
[^2]: いや、それも監視カメラじゃねえかと言われればまあ監視カメラですが。