セサミmini、オートロックのその後

数ヶ月走らせていますが安定して動いています。時間を意識してドアを慌てて閉めなくても良くなり、出入りのときに余裕ができました。

● Jetson Nano (5W mode)

作成時は Windows PC を使っていましたが、コード修正無しにそのまま動くことがわかったので今は Jetson Nano を使っています。Web カメラも PC で使っていたものそのままで USB 接続です。

常時起動しているので Jetson Nano は少電力モード (5W モード) に切り替えました。ワットモニターで計測したら本当に上限 5W でした。

● Logicool HD C270

使用しているカメラは Logicool の C270 です。室内の撮影は全体的に暗いので、わかりやすいように明るさを調整しています。Windows の場合標準のカメラ アプリの設定から「プロモード(フォト&ビデオの詳細コントロールを表示)」を有効にすると明るさの調整ができるようになります。Jetso Nano では v4l-utils を使っています。

$ v4l2-ctl -d /dev/video0 -c brightness=160

●判定の改良など

ロック中に更にロックコマンドを送信するのは問題がありそうだったので、事前に状態を確認するように変更しました。これで誤認識の度に lock コマンドを発行してしまう問題がなくなります。状態を確認する分だけ若干反応は遅れます。

・状態の確認
・結果の ‘locked’ が false の場合のみ ‘lock’ command 送信

ただし稀に正しく動かないケースがあります。鍵があいているのに ‘locked’ に true が返っているようです。手で直接ドアの鍵をあけた場合に起こるので、おそらく「解錠→ドア閉め」の時間が短すぎて、同期される前に状態を確認しているためだと思われます。

◎解錠からドア閉めまでの時間が極めて短い場合

人間 Sesame Server 開け閉め判定プログラム
手で解錠 解錠 true
ドアを開ける 状態の同期 開いたことを認識してフラグを立てる
ドアを閉める 閉めたことを認識。locked → true が返る。何もしない
同期完了 false

↑同期が完了する前に Server の状態を調べてしまう

確実に対処するなら ‘sync’ コマンドが必要になるようです。

・’sync’ command 送信、状態をサーバーに同期する
・状態の確認
・結果の ‘locked’ が false の場合のみ ‘lock’ command 送信

ただ sync はあまり頻繁に呼ばない方が良いらしく、この手順だと誤認識の度に何度も sync してしまう可能性があります。気持ちゆっくりドアを開ければ今のところ問題ないので sync は一旦保留としました。

●解錠コマンド

判定を遅らせる代わりに解錠のタイミングを早める方法もあります。例えば直接手で鍵を開けないで、スマートスピーカーの音声コマンドで鍵を開けるようにすると十分な同期時間を稼げます。

せっかく認識用のカメラがあるので、オートロックと同じように何らかのハンドサインを認識して鍵を開けることもできそうです。

実際に解錠用の判定コードを追加してみたのですが、テストで走らせるにはかなりリスクが高いことがわかったので諦めました。施錠 (lock) だと誤動作してもさほど影響がないのですが、解錠 (unlock) の誤動作は問題になります。認識率の問題もありますし、プログラムのちょっとしたバグでも致命的になるかもしれません。時間をかけて検証する必要があります。

Amazon Echo (Alexa) のスマートスピーカーと連動した場合も、解錠は音声コマンドだけでなく合言葉(暗証番号)も必要な仕様となっていました。やはり解錠の自動化は慎重になった方が良さそうです。

●学習データ

判定対象となった画像を自動保存します。その中から定期的に判定が間違っているものだけ追加しておりデータは徐々に増えています。学習には時間がかかるので従来どおり PC を使っています。

関連エントリ
セサミmini、Web Camera でセンサー対応オートロックを作ってみる (PyTorch)
セサミmini、スマートロックを使って1年