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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide