いつもうまく行かない。
(本記事はIoTLTアドベントカレンダー20日目のネタでもあります)
余ったWebカメラを活用(したかった)
以前予備で買っておいたWebカメラですが、いざWFHで実戦投入しようと思ったけど画質が悪くて、結局使っておらず。いわゆる積みハード的な存在になってしまっていたので、今回はそれを使って監視カメラを作ってみようと思いました。
環境・材料
LifeCam HD-3000
よくあるフツーのWebカメラです。
Raspberry Pi Zero W
よくあるフツーのPi Zero Wです。(Amazon、なんか高すぎ?)
Node-RED (v1.0.3)
よくあるフツーのNode-REDです。Raspberry Pi OSプリインのものをそのまま使っています。
成果物
はじめにお伝えしておくと、Node-REDフローはこんな感じ。
Webカメラは非常用の飲料水にくくりつけて、外を監視させます。
Node-REDのDashboard機能をつかって、Webページを作成。
こんな感じです。
わかったこと
1:Webカメラノードは存在するが凝った使い方ができない(かもしれないけどよくわからない)
あんまり調べたわけではないですが、ライブラリにWebカメラ用のノードはいくつかあります。
機能としては非常にシンプルですが、
- 指定できる解像度が限られている
- fswebcamのオプション設定ができない
などのCons.があり、結局fswebcamコマンドを直接叩いています。
fswebcam -S 15 -r 1280x800 image.jpg
ここで、2つポイントが。
- -Sオプションで数フレームスキップさせてからキャプチャさせる(使ってるWebカメラの挙動的に、最初に露光調整が走り、画が白飛びすることがあるため)
- -rオプションで解像度を指定(使ってるWebカメラの最大値をひとまず設定)
こんな感じで生のコマンドだと(当たり前ですが)カスタムできます。
2:Webカメラの暗所性能が悪い(やつを使ってるだけかもしれない)
見ての通り、夜間は使い物になりません。
fswebcamの露光時間(フレーム数)を伸ばしても、あまり画が変わらなかったので、まぁこんなものなのでしょう。もちろんWebカメラを責めている気は毛頭なく、もともと明るい室内で近くの顔を撮すのが最大のユースケースなので、仕方がないのかなと思っています。
3:Webカメラがたまに認識されなくなる(やつを使っているだけかもしれない)
これが一番困っているんですが、たまにWebカメラが認識されなくなります。具体的にはlsusbを打っても検出できず、Raspberry Piの電源を抜いて刺さないと検出されない現象がたまに起こりました。
sudo sh -c "echo -n \"1-1\" > /sys/bus/usb/drivers/usb/unbind" sudo sh -c "echo -n \"1-1\" > /sys/bus/usb/drivers/usb/bind"
こんな感じでUSBのunbind/bindを繰り返しても検出できず…。電力が足りてなくて不安定になっているのか、長時間等間隔で撮影をしてだめになっているのか、はたまた個体が良くないのか、謎は深まるばかりですが、調査するくらいだったらビールを飲んでたほうが幸せなので、特に深追いはしていません(笑)
というわけで
監視カメラがほしいならちゃんとしたものを買ったほうが良いということです。餅は餅屋。