ラズパイとスラックで社内のミーティングスペースをモニタリングする装置を作りました。 @TFUG沖縄 vol. 4
RaspiとSlackでミーティングスペースのモニタリング2019-7-20家入雄樹
View Slide
自己紹介名前: 家入雄樹所属: ブレインパッド職種: データサイエンティスト専門: データいじりそのほか: TFUG 福岡にも登壇しましたhttp://blog.brainpad.co.jp/entry/2018/11/28/112907http://blog.brainpad.co.jp/entry/2019/07/09/110739GCPとAWSの資格とったりしました
合宿をしました6月に社内の有志で合宿を行いました。目的:● 部署・役職を超えた交流○ 入社1ヶ月 ~ 10年目● 目標観の共有○ 今後こうしたい● これやりたい!をやる○ 社内便利ツール3チームに分かれて取り組み
もくもく組Aが取り組んだものラズパイとスラックでミーティングスペース確認するクン設計1人、開発3人
ラズパイでミーティングスペースの確認社内のミーティングスペース(通称ファミレス席、会議室とは別)行ってみるまで空いてるか分からないお手軽に調べる装置が欲しいと言い続けて幾星霜作ったらええねん!空いてるかな...?空いてた!
アーキテクチャRaspberry Pi 3 B+- Linux-ランニングコストも電気代のみ- wifiでネット接続①Chatの特定のチャンネルにコマンド投稿②空間の撮影ファミレス席全体をカメラで撮影するAPIでラズパイへ命令自席にいながら席の混雑状態がわかるWEBカメラorRasPi専用カメラ③画像の確認撮影した画像をチャットに返す撮影指示API経由で画像表示
チャットから指示を送るGitHub 製の hubot を使います。ラズパイ上でサーバーが動きます。ボットに対してメンションをすると写真を撮ってくれます。エンジニアの方が担当してくれました。(coffee script 何も分からない。Node.js 何も分からない...)https://hubot.github.com/
コード: coffee scriptcapture というコマンドを受け取りますexecute.sh を実行します‘Capturing done.’ と返信(エラーなどがあれば表示 )
画像を撮るfswebcamを使えば簡単に撮れます。ただし、撮影環境ごとにカメラの調整が必要です。(やっぱりここが難しい)参考: https://qiita.com/stkdev/items/992921572eefc7de4ad8https://www.raspberrypi.org/documentation/usage/webcams/
コード: capture日時でファイル名を指定subprocess でカメラ撮影画像へのパスを返します
Vision API で物体検知物体検知は object_localization を使います。name == ‘Person’ のみ数える。返り値が 0 ~ 1 スケールなのに注意。画像の編集はPILLOWを使います。公式ドキュメントは分かりやすいです。https://cloud.google.com/vision/docs/object-localizer?hl=ja
コード: Vision API顔検出のチュートリアルを参考検出した顔情報を受け取ります顔情報に基づいて、 PILLOWで加工https://cloud.google.com/vision/docs/face-tutorial?hl=ja
コード: Vision API公式ドキュメントのレスポンス例は、実際と異なっているが、このような形になっているコードの方は正しいhttps://cloud.google.com/vision/docs/object-localizer?hl=ja
コード: Vision APIobject_localization() を使います返ってきた JSON のlocalized_object_annotations が検出された物体そのうち、name == ‘Person’ であるものを抽出物体情報のリストを返します
PILLOW で描画画像の編集は PILLOW を使います。公式ドキュメントを参考にしました。https://cloud.google.com/vision/docs/face-tutorial?hl=ja発表者編集
コード: PILLOWobject_localization() を使います返ってきた JSON のlocalized_object_annotations が検出された物体そのうち、name == ‘Person’ であるものを抽出(OpenCV なんていらないんだ ...!)
スラックに送るfiles.upload API を使います。python の slack-client ライブラリなどもあるそうです。現状 ID などがベタ書きなのは要修正。https://api.slack.com/methods/files.upload
PILLOW で編集された画像を送りますチャンネルやアクセストークンなども指定しますコード: スラックへの送信
デモ
終わりですご静聴ありがとうございました !