四流女子大学生がRaspberry Piに手を出してみた[監視カメラ編]

前回の投稿
[四流女子大学生がRaspberry Piに手を出してみた[買い物編その２][カメラ設定編]](https://qiita.com/starrysky51/items/295d3c108c9a36a5251c)

# motionインストール！

監視カメラに動体検知を導入するために、ラズパイ上に「motion」をインストールしました！まず、ラズパイでターミナルを開き、以下を入力します！

```
$ sudo apt install motion
```

ターミナルにずらずらーと文字が表示され、最後にインストールを実行するかどうか[y/n]で聞かれるので`y`と打ち、実行します。これでmotionのインストールは完了です！`apt-get`でインストールするように書いているサイトありましたが、私はうまくいきませんでした汗）））

# motionの設定

motionの設定を変更するため、`/etc/motion/motion.conf`を編集していきます。

````
$ sudo vi /etc/motion/motion.conf
```
でファイルを開き、以下のように変更していきます。viの使い方については、以下の表を参考にしてください。

|キー|説明|
|:--|:--|
|Esc|コマンドモードへ移行(困ったら押しましょう！)|
|i|インサートモードへ移行(文字を打ちたいときに押しましょう！)|
|x(コマンドモード)|1文字削除|
|x(インサートモード)|文字'x'を打つ|
|/(コマンドモード)|検索スタート|
|:wq(コマンドモード)|上書き保存|
|:q!(コマンドモード)|編集を保存しないでviを終了|
|h(コマンドモード)|左へ移動|
|j(コマンドモード)|下へ移動|
|k(コマンドモード)|上へ移動|
|l(コマンドモード)|右へ移動|

矢印キーでもコマンドに移動はできますが、たまにターミナル上で変な文字が映し出されたりしてちょっとめんどくさかったので`h,j,k,l`の使用をおすすめします。私は以下のように変更しました。

```
# 10行目付近
# デーモンを使う
daemon on

# 25行目付近
# ログファイルの場所(確認しておきましょう)
logfile /var/log/motion/motion.log

#100行目付近
# 画像の幅、高さ
width 1024
height 768

# 200行目付近
# 動体検知をトリガーする画像内で変化したピクセル数(デフォルトは1500)
threshold 3000

# 250行目付近
# 何秒間を1イベントとみなすか
event_gap 10

# 275行目付近
# 動体検知したイベント内でどの写真を保存するか
# centerはイベント内の中央の写真のみ保存する
output_pictures center

# 300行目付近
# 動画は使用しない
ffmpeg_output_movies off

# 450行目付近
# 写真を保存するディレクトリ
target_dir /tmp/motion

# 650行目付近
# 画像保存時に起動するスクリプトの指定
# このあとLineへの通知を行うため、この時点では何もしないpythonファイルを指定しています
# %f は画像ファイル名です
on_picture_save python3 /home/pi/motion/line_notify.py %f
```

上記の他にも画像の回転、保存する際のファイル名の指定、データベースへの保存などたくさんのことができるそうですが私は試していません。

# いざ！撮影へ！

それでは早速、撮影してみましょう！まず、デーモン(サーバー上で動くプログラムだそうです)を起動します！ターミナルに以下を入力します。

```
$ sudo service motion start
```

これで完了です！次に、きちんとカメラが起動しているかどうか確かめます。起動していれば、ブラウザで`xxx.xxx.xxx.xxx(自身のラズパイのIPアドレス):8081`を入力したらカメラ画像がほぼリアルタイムで確認できます！`ps`コマンドや`service`コマンドでプロセスの稼働状況を確認することもできますが、これが一番オススメの方法です。もし、カメラ画像が映らずグレーの画面になっている場合は、以下のコマンドを打ってみてください。

```
$ sudo modprobe bcm2835-v4l2
$ echo "bcm2835-v4l2" | sudo tee -a /etc/modules
```

<!--
また、`ps`コマンド確認することもできます！
```
$ ps aux | grep motion
motion    1153 11.5  3.2 135888 29368 ?        Sl   18:07   0:01 /usr/bin/motion
pi        1158  0.0  0.0   3852   588 pts/0    S+   18:07   0:00 grep --color=auto motion
```
また、`service`コマンドでもOKです！

```
$ sudo service motion status
● motion.service - LSB: Start Motion detection
   Loaded: loaded (/etc/init.d/motion; generated; vendor preset: enabled)
   Active: active (running) since Mon 2018-04-30 18:21:11 JST; 7s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1187 ExecStop=/etc/init.d/motion stop (code=exited, status=0/SUCCESS)
  Process: 1334 ExecStart=/etc/init.d/motion start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/motion.service
           └─1344 /usr/bin/motion

 4月 30 18:21:11 raspberrypi systemd[1]: Starting LSB: Start Motion detection...
 4月 30 18:21:11 raspberrypi motion[1334]: Starting motion detection daemon: motion.
 4月 30 18:21:11 raspberrypi systemd[1]: Started LSB: Start Motion detection.
 4月 30 18:21:12 raspberrypi motion[1340]: [0:motion] [NTC] [ALL] conf_load: Processing thread 0 - config file /etc/motion/motion.conf
 4月 30 18:21:12 raspberrypi motion[1340]: [0:motion] [NTC] [ALL] motion_startup: Motion 4.0 Started
 4月 30 18:21:12 raspberrypi motion[1340]: [0:motion] [NTC] [ALL] motion_startup: Logging to file (/var/log/motion/motion.log)
```
-->

起動していれば、カメラが動体を検知し、画像を保存してくれるはずです。
カメラの前でうろうろしてみましょう！
保存した写真は上で書いた設定ファイルの`terget_dir`で指定したディレクトリ保存されているはずです！

# 感想

今までの作業で動いているものを自動で撮影して保存することができました。正直、今までの作業で一番難しかったです。何回もエラーが出ました。（笑）根気強くやればできるはずなので頑張ってください！このシリーズも次のLINE通知編最後です。長かった、、、（笑）