一年以上前ですが、ライトのON/OFFをPythonで検知したいという話が合った際の話をしたいと思います。
内容としては、工場の異常を表すライトが点灯しているかどうかを判定するというものです。
ソースコードは、以下のGitHub上にアップしてます。
どんなものか
動いているものを見たほうが早いと思うので、動作デモの様子を載せます。
デモの様子
家のシーリングのON/OFFを切り替えて動作確認してます。
判定ロジックはいたって簡単で、固定の領域(赤い四角形の領域)の中の明るさを平均した値が、ソースコードで指定した閾値以上になっていたらON、閾値未満ならOFFという判断です。
単純に瞬間的な閾値で判断してしまうと、ちょっとした変化でON/OFFが変化してしまうので、一定回数、閾値以上、または閾値未満の場合にステータスが変化するというロジックになってます。
処理はOpenCVで行っており、HSVにすることで明度(Value)の値を取得しています。
判定領域の位置は固定なので、ずれたら終わりです(笑)
そのあたりは、実際の要件に応じて、ライトを機械学習で検出するとか、考えればいいところだと思います。
その他のデモ
100円均一で買ってきた3つのライトを紙で隠してON/OFFが切り替わるか確認してます。
一応複数の領域を作れるようにしてます。
見にくいですが、ブレッドボード上にLEDを3つ配置して、それぞれON/OFFを切り替えてます。
位置合わせが地味に面倒でした。
ソフトウェアの概要
ソフトウェアの概要は以下になります。
拡張案としては以下のような形を考えました。
仕事では、一部違いますが、ほぼ以下の拡張案の形で実装をしました。HSVの情報をREST APIでNoSQLのDB(elasticsearch)にINSERTし、その内容をBI(kibana)を使って、エンドユーザはブラウザ上で状況を監視できるという形にしました。
この時はPoCのようなものだったのでいいですが、実際に使われるものを作るのであれば、非機能面に特に注意が必要だと感じました。
最大デバイス数及び最大データ保存期間における非機能要件が満たせるかどうか(DBへの登録時間、映像解析時間、ブラウザでの表示時間など)
また、機能面でも、特にBIツールは慎重に選ぶ必要があると思います。
そもそもやりたい機能が実現できるかもそうですが、今後の機能追加で柔軟に対応できるか、拡張性があるか、とても大切です。できないとなると、他のBIに乗り換える or 他のBIと併用や、一部スクラッチで作るなど、エンドユーザにも不便ですし、保守・運用も大変になるので。
また、OSSならまだいいですが(ライセンスによりますが)、ベンダーが提供しているソフトウェアを使う場合だと、やれないことがあった場合に、機能追加をお願いすることができないまたはリードタイムがかかり、デリバリーが遅れ、ユーザへの利益が薄れてしまうので、注意が必要です。
コメント
その他のデモの一つ目のコードを見せてもらうことはできますでしょうか?
ご連絡ありがとうございます。
その他の1つ目のデモと同じような形で動くように、GitHubへプッシュしました。
簡易的な動作は確認しています。ご参考いただければ幸いです。
https://github.com/remix-yh/device-watching