SORACOM IoT レシピ:IoT で画像の認識と通知
ソラカメで取得した画像から AWS で人物検知、LINE Notify で通知
公開日: 2023年6月
レシピ難易度: ★★☆☆☆
カメラで撮影した画像に映っている内容を通知したい、というのは IoT でよくあるシナリオです。たとえば、オフィスにどれだけ人が出社しているのかをあらかじめ確認して混雑を緩和するようなことも考えられます。
本レシピでは、Soracom Cloud Camera Services(以下、ソラカメ) 対応のIoTカメラ「ATOM Cam」のモーション検知機能、およびソラカメのイベント API を用いて動きがあったタイミングの画像を取得し、Amazon Rekognition を用いて人物をラベリングした後に、LINE Notify で通知します。アプリケーションは AWS Lambda 上で実行します。
使用する SORACOM サービス
- Soracom Cloud Camera Services「ソラカメ」
全体構成
- Amazon EventBridge で定期的に AWS Lambda を呼び出す
- ソラカメ API で過去 1 分のイベント一覧を取得・イベント発生時の静止画像をダウンロード
- 静止画像を Amazon Rekognition でラベリング
- ラベリングした結果を LINE Notify で通知
※イベントが複数あった場合、2 ~ 4 は全てのイベントに対して実施します
本レシピを行うのに必要な時間、概算費用
本レシピは以下の通りです。
- 必要な時間: 約 60 分
- 概算費用:
- Soracom Cloud Camera Service クラウド録画ライセンス: 月額 990 円
- AWS サービス費用: 月額約 7,800 円※
※ 概算費用: ハードウェアや SORACOM を始めとした各種サービスの概ねの費用 (送料などの付帯費用や無料枠適用は考慮しないものとしています)
※主に Amazon Rekognition の DetectLabels API の費用です。2023 年 1 月において、一回の呼び出しにつき 0.0013 USD かかります。日額で約 260 円です。Amazon Rekognition には無料枠もあります。
このコンテンツの進め方
上から内容を読み進みながら作業を行なっていきます。また左サイドに追従する目次からページ内の移動が可能です。
本コンテンツは現状のままで提供され、株式会社ソラコムは、誤りがないことの保証を含め、明示であると黙示であるとを問わず、本コンテンツの記載内容につき、いかなる種類の表明も保証も行いません。
掲載情報の閲覧及び利用により、利用者自身、もしくは第三者が被った損害に対して、直接的、間接的を問わず、株式会社ソラコムは責任を負いかねます。
本コンテンツを実践する中で用意された機器、利用されたサービスについてのご質問は、それぞれの機器やサービスの提供元にお問い合わせをお願いします。機器やサービスの仕様は、本コンテンツ作成当時のものです。
株式会社ソラコムが提供する機器・サービスについてのご質問はフォームで受け付けております。機器・サービスご利用前の導入相談は https://soracom.jp/contact/ に、機器・サービスご利用開始後のサポートは、SORACOMユーザーコンソール内のサポートサイトから「リクエストを送信」(要ログイン)にてお問い合わせください。
Copyright (c) 2023 SORACOM, INC.
準備
本レシピを行うためには以下のものをご用意ください。
ハードウェア
品名 | 数量 | 価格 | 備考 |
[ソラカメ対応製品] ATOM Cam 2 | 1 | 約3,480円 | ATOM Cam Swing でも構いません。別途クラウド録画ライセンスの契約が必要です |
パソコン | 1 | – | インターネット接続が可能でサイトへの接続が自由であること。 Google Chrome 等の最新ブラウザーが利用可能な事。 |
iOS または Android スマートフォン | 1 | – | ソラカメの登録作業に用いる ATOM アプリを App Store または Google Play からインストールします。OS 要件はアプリのインストールページに記載されています。 |
※ 金額はレシピ作成時となります。金額は税込み・送料別です。
ご購入について
ハードウェアは以下よりご購入いただけます。
その他必要なもの
必要なもの | 費用 | 作成方法など |
SORACOM アカウント | 無料※ | SORACOM アカウントの作成 |
AWS アカウント | 無料※ | AWS アカウントの作成 (JP) |
LINE アカウント | 無料※ | App Store、Google Play でインストールします |
※ アカウント作成・維持の費用の料金です。
すでに AWS アカウント持っている場合の確認事項
- ルートアカウントを利用する場合:特に確認すべき事項はありません。先に進んでください。
- IAM アカウントを利用する場合:東京リージョン (ap-northeast-1) 内のサービスへの権限の有無を確認してください。
- 本資料では ap-northeast-1 を使用します。また、必要権限の解説およびサポートは致しかねますが、主に AWS Lambda、Amazon Rekognition、Amazon CloudWatch といったサービスへの権限、ならびに AWS IAM におけるロールの作成といった権限になります。
- AdministratorAccess ポリシーが割り当てられていれば完遂可能です (同ポリシーを割り当てたことによる影響については IAM アカウント管理者にご相談ください)
ソラカメが届いたら
Soracom Cloud Camera Services のカメラ (以降、ソラカメ) は ATOM アプリへ登録し、クラウド録画ライセンスを適用することでクラウド上に保管した動画を SORACOM API で取得できるようになります。まず ATOM アプリの利用開始、ソラカメの登録をしましょう。
※既に登録しているソラカメについてレシピを実施する場合は次へお進みください。
ATOM アプリの利用を開始する
以下の SORACOM ユーザードキュメントを参照して利用を開始してください。
ソラカメを登録する
以下の SORACOM ユーザードキュメントを参照して登録してください。
ソラカメのモーション検知を有効にする
以下の SORACOM ユーザードキュメントを参照してモーション検知を有効化してください。
ソラカメのデバイス ID を控える
ここからは SORACOM ユーザーコンソールで操作します。
SORACOM ユーザーコンソールにログインした後 [メニュー]>[ソラコムクラウドカメラサービス]>[デバイス管理]とクリックします。
今回イベントを通知したいソラカメの「デバイス ID」(12 桁の英数字) をコピーします。PC 上のメモ帳アプリなどへペーストしてください。控えたデバイス ID は後で使用します。
ユーザーコンソールからソラカメのイベントを確認する
今回イベントを通知したいソラカメの名前をクリックして、デバイス詳細画面へ遷移します。
デバイス詳細画面の「イベント」タブをクリックして、対象のソラカメのイベント一覧を確認します。更新アイコンで、最新のイベント一覧を取得できます。
ATOM アプリにてモーション検知の設定がされていれば、イベント画像が表示されています。画像の表示がない場合は、以下を確認してください。
- カメラの前でモーションが発生しているか (ゆっくりと手を振るなどしてみてください)
- ATOM アプリにてモーション検知の設定をしているか
SAM ユーザーを作成する
本レシピでは AWS Lambda から SORACOM API を呼び出してイベントを取得します。SORACOM API を外部から呼び出すには、SAM ユーザーの作成が必要です。
SORACOM ユーザーコンソールで [ユーザー名]>[セキュリティ]とクリックします。
[SAM ユーザー作成]をクリックします。
名前・概要を入力して[作成]をクリックします。
パラメータ | 値 |
名前 | SAM ユーザーを識別する任意の名前 (例: sccs-event-api) |
概要 | SAM ユーザーについての説明 (例: ソラカメのイベント API を実行する) |
SAM ユーザーの権限を設定する
作成した SAM ユーザー名をクリックします。
[権限設定]のタブより、[直接指定]の欄に以下をコピー & ペーストして、[保存]をクリックします。
{ "statements": [ { "api": [ "SoraCam:listSoraCamDeviceEventsForDevice", "OAuth2:authorize" ], "effect": "allow" } ] }
SAM ユーザーの認証キー ID、認証キーを控える
[認証設定]のタブより、[認証キーを生成]をクリックします。
[クリップボードにコピー]をクリックして、PC 上のメモ帳アプリなどへペーストしてください。認証キー ID、認証キーシークレットは後で使用します。
LINE Notify をセットアップする
LINE Notify の詳細については、LINE Notify のヘルプページを参照してください。
PC からLINE Notify の URL を開き、LINE Notify のセットアップを開始します。
[ログイン]をクリックします。
[QR コードログイン]をクリックし、スマートフォンの QR コードリーダーで読み取ります。案内に従ってログインしてください。
右上のメニューから[マイページ]をクリックします。
トークン発行の準備ができました。
LINE Notify のトークンを控える
[トークンを発行する]をクリックします。
トークン名を記入し、[1:1でLINE Notifyから通知を受け取る]を選択して[発行する]をクリックします。
[コピー]をクリックして、PC 上のメモ帳アプリなどへペーストしてください。LINE Notify のトークンは後で使用します。
AWS CloudShell を開く
AWS マネジメントコンソールより、右上の AWS CloudShell のアイコンをクリックします。
アプリケーションをデプロイする
(参考) デプロイするアプリケーションについての解説
このパートを読み飛ばして「デプロイするアプリケーションのコードをダウンロードする」へ進んでもレシピを達成できます。アプリケーションの内容やデプロイの仕組みを理解したい場合に参照してください。
デプロイのためのツールやアプリケーションのソースコードは GitHub のリポジトリに保管されています。
デプロイの仕組みについて
このアプリケーションは AWS Serverless Application Model (SAM) を利用して構築できます。先ほどユーザーを作成した SORACOM Access Management (SAM) とは異なりますので注意してください。
AWS Serverless Application Model (SAM) は AWS Lambda などの AWS のサービスについて設定の管理やデプロイをするためのフレームワークです。設定内容は YAML 形式のファイルなどに定義できます。また SAM CLI を用いて定義した設定どおりに AWS のサービスをデプロイできます。今回は設定内容をリポジトリ配下の template.yaml ファイルに定義しており、SAM CLI が既にインストールされている AWS CloudShell からデプロイします。デプロイの具体的な方法はこの後のパートで説明されます。
template.yaml の内容について
template.yaml の記法については AWS Serverless Application Model (SAM) のドキュメントを参照してください。今回のアプリケーションにおいては主に以下のような特徴があります。
- Resources セクションで AWS Lambda を使用するよう定義しています。
- Evnvironments – Variables プロパティでは AWS Lambda の環境変数を定義しています。Parameters セクションを参照させることで、アプリケーションのデプロイ時に環境変数の内容を指定できるようにしています。
- Events プロパティでは Amazon EventBridge から定期的に Lambda を実行するよう定義しています。
アプリケーションの内容について
sora_cam_label_detection_with_rekognition ディレクトリ配下のファイルの意味を解説します。
- __init__.py: Python アプリケーションを作成するときに必要なファイルです。このアプリケーションにおいては中身はありません。詳細は Python の公式ドキュメントを参照してください。
- app.py: AWS Lambda へデプロイされるプログラムの 1 つです。Lambda が実行された時最初に実行されるプログラムです。ソラカメ API を利用して画像をダウンロードした後、以下 2 つを実行しています。
- amazon_rekognition.py を実行して人物検知
- 人物を検知した時、line_notify.py を実行してエクスポートした画像を LINE Notify へ通知
- requirements.txt: アプリケーションに必要なモジュールを記載。アプリケーションのビルド時に参照されます。今回は以下のモジュールを利用します。
- pillow: 画像中に人物を検知した際、バウンディングボックスの描画に利用します
- requests: 画像をダウンロードしたり、LINE Notify の API 呼び出しに利用します
- soracam-python-client: ソラカメ API 呼び出しに利用します
デプロイするアプリケーションのコードをダウンロードする
以下のコマンドを AWS CloudShell へコピー & ペーストして、Enter キーを押して実行します。
git clone https://github.com/soracom-labs/sora-cam-label-detection-with-rekognition.git
以下のような表示が確認できます。
[cloudshell-user@ip-xx-xx-xx-xx ~]$ git clone https://github.com/soracom-labs/sora-cam-label-detection-with-rekognition.git Cloning into 'sora-cam-label-detection-with-rekognition'... remote: Enumerating objects: 85, done. remote: Counting objects: 100% (85/85), done. remote: Compressing objects: 100% (51/51), done. remote: Total 85 (delta 43), reused 55 (delta 25), pack-reused 0 Receiving objects: 100% (85/85), 27.29 KiB | 2.73 MiB/s, done. Resolving deltas: 100% (43/43), done.
デプロイするアプリケーションのディレクトリへ移動する
以下のコマンドを AWS CloudShell へコピー & ペーストして、Enter キーを押して実行します。
cd sora-cam-label-detection-with-rekognition/
以下のように、”$” の前に “sora-cam-label-detection-with-rekognition” が表示されるようになります。
[cloudshell-user@ip-xx-xx-xx-xx sora-cam-label-detection-with-rekognition]$
アプリケーションのビルドを準備する
2023-06-20 現在、AWS CloudShell は Python 3.7 を利用しています。soracam-python-client は Python 3.9 以上に対応しているため、Python 3.9 をインストールして利用するよう設定します。
以下のコマンドを AWS CloudShell へコピー & ペーストして、Enter キーを押して実行します。実行には数分~10分程度かかります。
script/cloudshell_install_python39.sh python3.9 -m venv .venv source .venv/bin/activate pip install wheel
アプリケーションをビルドする
ビルドとは、コードをもとにアプリケーションをデプロイできる状態にすることです。
以下のコマンドを AWS CloudShell へコピー & ペーストして、Enter キーを押して実行します。
sam build
緑色の文字で、以下のような表示があればビルドに成功しています。
... ... ... ... Build Succeeded
アプリケーションをデプロイする
注意
以下の手順でアプリケーションでデプロイすると、削除するまで毎分アプリケーションが実行されます。本レシピの達成後、不要であれば「あとかたづけと注意事項」を参照して削除してください。またいつでも同じ手順でデプロイできます。
以下のコマンドを AWS CloudShell へコピー & ペーストして、Enter キーを押して実行します。
sam deploy --guided --capabilities CAPABILITY_NAMED_IAM
デプロイでは、ここまでに控えた認証情報などの入力を求められます。以下のように入力してください。
パラメータ | 意味 | 値 |
---|---|---|
Stack Name [sam-app] | アプリケーションの名前 | SAM アプリケーションを識別する任意の名前 (例: label-detection-sora-cam-rekognition) |
AWS Region [ap-northeast-1] | アプリケーションをデプロイする AWS リージョン | 東日本リージョンを指定します (例: ap-northeast-1) |
Parameter soracomAuthKeyId | SAM ユーザーの認証キー ID | 「SAM ユーザーの認証キー ID、認証キーを控える」で控えた認証キー ID (“keyId-” で始まります) |
Parameter soracomAuthKey [secret-xxxxxx] | SAM ユーザーの認証キー | 「SAM ユーザーの認証キー ID、認証キーを控える」で控えた認証キー (“secret-” で始まります) |
Parameter deviceId [XXXXXXXXXXXX] | ソラカメのデバイス ID | 「ソラカメのデバイス ID を控える」で控えたデバイス ID (12 桁の英数字) |
Parameter rekognitionRegion [ap-northeast-1] | Amazon Rekognition の AWS リージョン | 東日本リージョンを指定します (例: ap-northeast-1) |
Parameter targetLabelName [Person] | 検知したいラベル。ここでは人物 (Person) を指定します。 | 何も入力せずエンターキーを押します |
Parameter targetConfidence [90] | 通知するか判断するための検知の信頼度。ここでは 90% 以上「人物」と判断できれば通知することにします | 何も入力せずエンターキーを押します |
Parameter lineNotifyToken [replace it to your own token] | LINE Notify のトークン | 「LINE Notify のトークンを控える」で控えたトークン (長い英数字) |
Confirm changes before deploy [y/N] | デプロイ前の確認有無 | 何も入力せずエンターキーを押します |
Allow SAM CLI IAM role creation [Y/n] | SAM CLI に AWS IAM を作成させるかの確認 | 何も入力せずエンターキーを押します |
Disable rollback [y/N] | ロールバックを有効にするかの確認 | 何も入力せずエンターキーを押します |
Save arguments to configuration file [Y/n] | 設定をファイルに保存するかの確認 | 何も入力せずエンターキーを押します |
SAM configuration file [samconfig.toml] | 設定ファイル名の確認 | 何も入力せずエンターキーを押します |
SAM configuration environment [default] | SAM の環境 | 何も入力せずエンターキーを押します |
Creating the required resources…
という表示の後、デプロイを開始します。デプロイには数分ほどかかります。
Successfully created/updated stack - label-detection-sora-cam-rekognition in ap-northeast-1
という表示が確認できれば、デプロイは完了です。
画像の通知を確認する
ソラカメの前に人物を映すことで、LINE Notify へ通知されることを確認します。
あとかたづけと注意事項
本レシピでは継続的に費用がかかるサービスとして、ソラカメのクラウド録画ライセンスおよび、AWS サービスを利用しています。
AWS サービスの削除
本レシピでは Amazon EventBridge で定期的に AWS Lambda を呼び出しています。不要であれば、以下の手順で削除してください。
- 東日本リージョンの AWS マネジメントコンソール へログインする
- 検索窓より “CloudFormation” を検索して開く
- 手順「アプリケーションをデプロイする」にて「Stack Name [sam-app]」で指定したアプリケーション名を選択する
- [削除] をクリックする
- [スタックの削除] をクリックする (削除完了には数分かかります)
ソラカメのクラウド録画ライセンスの解約
クラウド録画ライセンスが不要であれば、以下のドキュメントを参照して割り当て解除・解約してください。
SORACOM の SAM ユーザーの削除
SAM ユーザーの維持に課金は発生しませんが、不要であれば以下のドキュメントを参照して削除してください。
LINE Notify の連係解除
LINE Notify の連携維持に課金は発生しませんが、不要であれば以下の手順で削除してください。
- https://notify-bot.line.me/ja/ へアクセスする
- [ログイン]をクリックする
- [QR コードログイン]をクリックし、スマートフォンの QR コードリーダーで読み取る。案内に従ってログインする。
- 右上のメニューより、[マイページ]をクリックする
- 「連携中サービス」より作成した連携を探し、[解除]をクリックする
次のステップ
本レシピでは、カメラに人物が映っているかを検知して通知する仕組みを作りました。次のステップとして以下のような応用が考えられます。
- 人物以外を検知する
- カスタムモデルを作成して検知する
このように、クラウドへ接続したカメラを「眼」として活用することで、必要な時に必要な画像・動画を取得できます。是非いろいろなユースケースでご活用ください。