Slide 1

Slide 1 text

RaspiとSlackでミーティング スペースのモニタリング 2019-7-20 家入雄樹

Slide 2

Slide 2 text

自己紹介 名前: 家入雄樹 所属: ブレインパッド 職種: データサイエンティスト 専門: データいじり そのほか: TFUG 福岡にも登壇しました http://blog.brainpad.co.jp/entry/2018/11/28/112907 http://blog.brainpad.co.jp/entry/2019/07/09/110739 GCPとAWSの資格とったりしました

Slide 3

Slide 3 text

合宿をしました 6月に社内の有志で合宿を行いました。 目的: ● 部署・役職を超えた交流 ○ 入社1ヶ月 ~ 10年目 ● 目標観の共有 ○ 今後こうしたい ● これやりたい!をやる ○ 社内便利ツール 3チームに分かれて取り組み

Slide 4

Slide 4 text

もくもく組Aが取り組んだもの ラズパイとスラックでミーティングスペース確認するクン 設計1人、開発3人

Slide 5

Slide 5 text

ラズパイでミーティングスペースの確認 社内のミーティングスペース(通称ファミレス席、会議室とは別) 行ってみるまで空いてるか分からない お手軽に調べる装置が欲しい と言い続けて幾星霜 作ったらええねん! 空いてるかな...? 空いてた!

Slide 6

Slide 6 text

アーキテクチャ Raspberry Pi 3 B+ - Linux -ランニングコストも電気代のみ - wifiでネット接続 ①Chatの特定のチャンネル にコマンド投稿 ②空間の撮影 ファミレス席全体をカメラで撮影する APIでラズパイへ命令 自席にいながら席の混雑状態がわかる WEBカメラor RasPi専用カメラ ③画像の確認 撮影した画像をチャットに返す 撮影指示 API経由で画像表示

Slide 7

Slide 7 text

チャットから指示を送る GitHub 製の hubot を使います。 ラズパイ上でサーバーが動きます。 ボットに対してメンションをすると写真を撮ってくれます。 エンジニアの方が担当してくれました。 (coffee script 何も分からない。Node.js 何も分からない...) https://hubot.github.com/

Slide 8

Slide 8 text

コード: coffee script capture というコマンドを受け取ります execute.sh を実行します ‘Capturing done.’ と返信 (エラーなどがあれば表示 )

Slide 9

Slide 9 text

画像を撮る fswebcamを使えば簡単に撮れます。 ただし、撮影環境ごとにカメラの調整が必要です。 (やっぱりここが難しい) 参考: https://qiita.com/stkdev/items/992921572eefc7de4ad8 https://www.raspberrypi.org/documentation/usage/webcams/

Slide 10

Slide 10 text

コード: capture 日時でファイル名を指定 subprocess でカメラ撮影 画像へのパスを返します

Slide 11

Slide 11 text

Vision API で物体検知 物体検知は object_localization を使います。 name == ‘Person’ のみ数える。 返り値が 0 ~ 1 スケールなのに注意。 画像の編集はPILLOWを使います。 公式ドキュメントは分かりやすいです。 https://cloud.google.com/vision/docs/object-localizer?hl=ja

Slide 12

Slide 12 text

コード: Vision API 顔検出のチュートリアルを参考 検出した顔情報を受け取ります 顔情報に基づいて、 PILLOWで加工 https://cloud.google.com/vision/docs/face-tutorial?hl=ja

Slide 13

Slide 13 text

コード: Vision API 公式ドキュメントのレスポンス例は、実 際と異なっているが、このような形に なっている コードの方は正しい https://cloud.google.com/vision/docs/object-localizer?hl=ja

Slide 14

Slide 14 text

コード: Vision API object_localization() を使います 返ってきた JSON の localized_object_annotations が検出された物体 そのうち、name == ‘Person’ であるものを抽出 物体情報のリストを返します

Slide 15

Slide 15 text

PILLOW で描画 画像の編集は PILLOW を使います。 公式ドキュメントを参考にしました。 https://cloud.google.com/vision/docs/face-tutorial?hl=ja 発表者編集

Slide 16

Slide 16 text

コード: PILLOW object_localization() を使います 返ってきた JSON の localized_object_annotations が検出された物体 そのうち、name == ‘Person’ であるものを抽出 (OpenCV なんていらないんだ ...!)

Slide 17

Slide 17 text

スラックに送る files.upload API を使います。 python の slack-client ライブラリなどもあるそうです。 現状 ID などがベタ書きなのは要修正。 https://api.slack.com/methods/files.upload

Slide 18

Slide 18 text

PILLOW で編集された画像を送ります チャンネルやアクセストークンなども指定します コード: スラックへの送信

Slide 19

Slide 19 text

デモ

Slide 20

Slide 20 text

終わりです ご静聴ありがとうございました !