4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

はじめに

オプトテクノロジーズの伊藤です。
もはや私の投稿はアドカレドリブンなっています。
今回は、毎年恒例となった開発合宿でIoTをテーマにハックをしたのでご紹介します。

前談

前回の投稿では、会議室の利用状況をモニタすべく、デバイスのボタンを押すという極めてアナロジーな方式に着地したわけですが、どうしても会議開始時にボタンを押し忘れる人がいるんですよね…
で、そういう人に限って「カレンダーから勝手に予定が消えた」とか言うんすよ…(メール見ろし)
そんなこともあり、パイロット運用を一時中断し、別の方式を模索してました。

開発合宿にあたり

上記の記事にもありますが、開発合宿は複数名がチームを作って同じテーマに取り組むのですが、我々IoTチームのリーダーである @mshibuya 氏がこれまた シュッとしてバーン な人でして、知的好奇心をくすぐるおもちゃをガンガン買うんですね。
そのおもちゃの中にRaspberry Pi Zero&カメラなどもあり、カメラで撮影した静止画を画像認識し、会議室の在室を確認することにチャレンジしました。

アーキテクチャー

  • ラズパイに繋いだカメラモジュールによって撮影したJPEGをローカルに保存
  • ローカルに保存したJPEGをAmazon S3にアップロード
  • Amazon S3にアップロードしたJPEGをAmazon Rekognitionで画像認識&判定

詳細

ラズパイに繋いだカメラモジュールで撮影したJPEGを保存

カメラを扱う為のライブラリをインストール

sudo apt-get update
sudo apt-get install python-picamera

以下のコードを実行(解像度は任意)

take_picture.py
import time
import picamera

with picamera.PiCamera() as camera:
    camera.resolution = (1280, 720)
    camera.start_preview()
    time.sleep(1)
    camera.capture('room.jpg')

保存したJPEGをAmazon S3にアップロード

ShellでAWSコマンドを叩く為にライブラリをインストール

sudo apt-get install awscli

AWS SDK for Pythonをインストール

sudo pip install boto3

AWSの認証情報を設定

aws configure
AWS Access Key ID [None]: <Key ID>
AWS Secret Access Key [None]: <Access Key>
Default region name [None]: ap-northeast-1
Default output format [None]: json

以下のコードを実行(S3のバケットは予め作っておきバケット名を指定、ファイル名は上述で保存したもの)

upload.py
import boto3

s3 = boto3.resource('s3')
s3.Bucket('S3のバケット名').upload_file('room.jpg', 'room.jpg')

Amazon S3にアップロードしたJPEGをAmazon Rekognitionで画像認識&判定

以下のコードを実行
今回は、Rekognition側で付与されたラベルの内、人間(Human)か人(Person)の信頼度が95%以上で「人がいる」と判定
ラベルと信頼度はいくつかのサンプル画像で試した上で肌感で決定

rekognition.py
import boto3

client = boto3.client('rekognition')
response = client.detect_labels(Image={'S3Object':{'Bucket':'s3のバケット名','Name':'room.jpg'}})

counter = 0
for label in response['Labels']:
    if (label['Name'] == 'Human' and label['Confidence'] >= 95) \
    or (label['Name'] == 'Person' and label['Confidence'] >= 95):
        counter = 1
        break

if counter > 0
    # 人がいる時の処理

まとめ

  • Arduino より Raspberry Pi の方が素早く色々できる(汎用Linuxが載っているので拡張性が高い)
  • Amazon Rekognition はそれなりに認識精度が高そう(パイロット運用していないからまだ言い切れはしない)
  • 開発合宿では別のメンバーが AWS IoT Core や フロントエンド を担当し、ラズパイ間の通信をMQTTで繋いで、送受信したりした(それはまた別の機会に書くか本投稿をアプデするかも)
  • パイロット運用の再開は年明け
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?