Upgrade to Pro — share decks privately, control downloads, hide ads and more …

nekoIoTLT_SearchBlackObject

NearMugi
October 21, 2020

 nekoIoTLT_SearchBlackObject

NearMugi

October 21, 2020
Tweet

More Decks by NearMugi

Other Decks in Technology

Transcript

  1. トイレにある黒い物体を検知する
    2020.10.21
    夜開催! ねこIoTLT vol.4

    View full-size slide

  2. 自己紹介
    NearMugi(ニアムギ)
    ねこ2匹飼っています。

    View full-size slide

  3. ねこ紹介
    ニア
    ・3月8日生まれ 11歳
    ・もふもふでかわいい
    ・寒くなってきたのでさらにもふもふに

    View full-size slide

  4. ねこ紹介
    ムギ
    ・5月8日生まれ 8歳
    ・黒猫でかわいい
    ・メーメー鳴く
    ・この子も少し毛が伸びた

    View full-size slide

  5. イントロ
    みなさんのおうちでこんなこと
    ありませんか?

    View full-size slide

  6. イントロ
    ねこがトイレの前でじっとしている…

    View full-size slide

  7. イントロ
    トイレを見てみると中に
    黒い物体が。

    View full-size slide

  8. イントロ
    「これを取ってくれ」と言わんばかりに
    立っている。

    View full-size slide

  9. イントロ
    すぐに取ってあげたい。
    気づいてあげたい。

    View full-size slide

  10. イントロ
    IoTで解決してみます。

    View full-size slide

  11. 1.トイレの様子を定期的に撮影
    2.撮影した画像から黒い物体を検知
    3.LINEで通知
    大まかな手順

    View full-size slide

  12. ・30分ごとに撮影する
    ・部屋の明るさの変化を考慮する
    ・前回撮影した画像と似ている場合は通知しない
    ・機械学習は使わずに黒い物体を検知する
    細かい仕様

    View full-size slide

  13. 1. ESP32+カメラで撮影、GoogleCloudStorage(GCS)へ画像をアップロードする
    2. GCSに画像がアップロードされたイベントをトリガーに Cloud Pub/Subからメッセージが
    送信される
    3. Node-REDフロー内でCloud Pub/Subのメッセージを受信する
    4. 画像をGCSから取得して解析する
    5. 黒い物体を検知したとき、 LINEに通知する
    手順の詳細
    GoogleCloudStorage
    Cloud Pub/Sub
    GoogleComputeEngine
    メッセージ受信
    画像取得
    解析
    通知

    View full-size slide

  14. Cloud Pub/Subのメッセージを受信したら、
    画像を取得する
    手順の詳細(Node-REDフロー)
    前回の画像をGCSから取得する
    処理で使うパラメータを GCSから取得する
    解析する
    ログと解析後の画像を GCSへ保存する
    黒い物体を検知できたら LINEへ通知する

    View full-size slide

  15. 黒い物体の検知方法
    黒い物体を検知するため
    OpenCVを使いました

    View full-size slide

  16. 黒い物体の検知方法
    カメラで撮った画像 →
    2値化(白黒)→白黒反転→輪郭を検出→面積を取得 →
    面積の大きさから黒い物体があるか判断
    画像から黒い物体を検知するまでの処理

    View full-size slide

  17. 黒い物体の検知方法
    adaptiveThreshold : 画像をいい感じに2値化(白黒)する
    findContours : 黒い背景から白い物体の輪郭を検出する
    contourArea : 輪郭内の面積を取得する
    OpenCVの関数

    View full-size slide

  18. 黒い物体の検知方法 -関数の説明(adaptiveThreshold)
    元画像
    void adaptiveThreshold(const Mat& src, Mat& dst, double maxValue, int adaptiveMethod, int thresholdType, int
    blockSize, double C)
    定数Cを変化させることで、白黒の範囲を調整できる
    C:10 白黒割合:0.29 C:20 白黒割合:0.23 C:30 白黒割合:0.18 C:40 白黒割合:0.13
    C:60 白黒割合:0.06 C:70 白黒割合:0.04 C:80 白黒割合:0.03 C:90 白黒割合:0.02
    C:50 白黒割合:0.09
    ここらへんがちょうど良い

    View full-size slide

  19. 黒い物体の検知方法 -関数の説明(findContours, contourArea)
    void findContours(const Mat& image, vector >& contours, int mode, int method, Point offset=Point())
    double contourArea(const Mat& contour)
    輪郭を検出すると細かい部分も含まれてしまうので、面積の大きさから判断する
    元画像に輪郭を検出したデータを合成したもの 面積の大きさにしきい値を設けたもの

    View full-size slide

  20. 通知
    黒い物体を検知するとLINEに通知がきます

    View full-size slide

  21. 結果
    検出結果をお見せしたいのですが、
    黒い物体があれなので
    今回は控えさせていただきます。
    そこそこの検出具合でした。
    明るさの調整が一番難しいです。

    View full-size slide

  22. 黒い物体の検知のポイント
    白黒がはっきりしていると検知しやすいので、
    大玉の猫砂がおすすめです

    View full-size slide

  23. まとめ
    ・機械学習を使わなくてもある程度の検知が出来ると知りました。
     照度センサーなどの補助があればもう少し精度が上がりそうです。
    ・検知しやすくさせるため砂を平らにならしたり、砂の汚れ具合を
     気にするようになりました。
    以上となります。
    ご清聴ありがとうございました。

    View full-size slide