kuroの覚え書き

96の個人的覚え書き

ラズパイでタイムラプスカメラの続き

さて、fswebcamで定期的に写真を撮っていくということで動作も軽く、問題なくどんどん画像が溜まっていくということは確認できた。
しかしやはりカメラとしてはファインダーがないのはちょっとつらい。写真撮ってビューワーで見てカメラ動かして・・・というのは操作性が悪すぎる。

ということでフレーミングを決めるためにguvcviewというGUIな写真・ムービー撮影ツールを試してみた。
Raspberry Pi 3 とウェブカメラ(ロジクール C270) - 今日も微速転進

それ自体撮影や映像の調節などができるアプリなわけだけど、どうもラズパイには荷が重いのか安定しない。
3度に1回は起動に失敗する感じだ。

そこでやはりmotionに戻ってきた。
これは動くものを感知して自動で撮影する監視カメラ的なツールなのだけれど、単純に映像をストリーミングすることもできる汎用性の高いアプリである。使用例もかなりたくさん紹介されているので、困ったときにもいろいろ参考にできる。
Raspberry Piでmotionを動かして、カメラの画像をストリーミング配信する方法 : 試行錯誤な日々

Motion の導入手順 ~ 指定した内容、パラメータの意味について

Raspberry Piセットアップ(motion編)Stretch版 | MacFeeling Blog

キモとしては画像、動画を保存しないように/etc/motion/motion.confに設定するということだろう。

で、せっかくなのでpython+flaskのwebアプリを作ってVNCsshなしで使えるようにしてやろうととりかかったのだが・・・

motionを起動しているとfswebcamが写真を撮る事ができないので、フレーミングが終わったら終了してしまいたいのだが、どうもmotionの起動、終了に癖があるようで意図したとおりに動いてくれない。

かなり悩んでたどり着いた解は
/etc/motion/motion.conf
daemon on

/etc/default/motion
start_motion_daemon=yes

/etc/init.d/motion
デフォルトのまま

起動
sudo service motion start

終了
sudo service motion stop

これをflaskに仕込む。

ただし、この設定ではシステム起動時にmotionも起動してしまう。今回はwebから制御したいので
sudo service motion stopを/etc/rc.localに追加して、一旦起動はするが、すぐに終了しておく。


flaskのアプリをserviceとして起動する設定は
/etc/sysconfig/kcam

FLASK_APP="./cam/views/home.py"
LC_CTYPE="en_US.UTF-8"
_EOF_

を用意し、
/etc/systemd/system/kcam.service

[Unit]
Description=python instance to serve kcam
After=network.target

[Service]
User=pi
Group=pi
EnvironmentFile=/etc/sysconfig/kcam
WorkingDirectory=/home/pi/kcam
ExecStart=/usr/local/bin/flask run --host=192.168.0.10

[Install]
WantedBy=multi-user.target

という感じのファイルを作成。
ユーザpiのホームディレクトリにアプリ本体をおいたとして
ExecStart=/usr/local/bin/flask run --host=192.168.0.10
の部分は自分の環境に合わせるように。