masato-ka's diary

日々思ったこととか、やったことの備忘録。

SORACOM Lagoonと AndroidThingsでIoT X AIをやってみた。

この記事について

この記事はSORACOM Adventcalendar 2018 18日目の記事です。SORACOM Adventcalendar 2018もいよいよ終盤に差し掛かってきました。今回は2018 年11月24日に開催されたIoTつくるよで展示した SORACOM LagoonとAndroidThingsを使った物体温度計測システムについて紹介します。当日のLTの資料は以下の通りです。

speakerdeck.com

物体温度計測とは?

温度センサなどで部屋の温度や外気温を計測し可視化・モニタリングすることはIoTのユースケースとして一般的に紹介される例です。こう言った場合、部屋の住環境のモニタリングや商品が保管してある倉庫などの環境モニタリングとして実施されることが大半でしょう。 しかし、温度計測が必要であるが、前述の例のような部屋や空間といった面としてのセンシングではなく、ピンポイントで温度を計測したい場合が出てきます。例えば機械設備の保守では設備のある特定の部分の温度上昇を検知したい場合です。また、ショウケースに入った食品などの品質監視を行う場合、ショウケース内の温度を1箇所測っただけでは実際の食品の温度を知ることはできません。 こういった場合、測りたい物に直接センサを貼り付けて温度を監視したくなりますが、以下の理由から難しいと考えます。

  1. 計測対象にセンサの設置が困難
  2. 計測する個数があらかじめ特定できない
  3. 計測箇所があらかじめ特定できない。

この課題を非接触温度センサとDeep Learningによる物体検知を行うことで解決します。また取得したデータをSORACOM Lagoonでダッシュボードとして提供します。

作成したシステムの仕組みについて

全体概要

全体構成は以下のようになっています。

f:id:masato-ka:20181217221236j:plain

詳細については以下で順に説明します。

Android ThingsとSORACOMの接続について

今回デバイス構築に利用したのはGoogleが提供しているIoTデバイス向けのOSであるAndroidThingsを利用します。Android Thingsについての紹介記事は以下の過去記事を参照ください。

masato-ka.hatenablog.com

Android ThingsはSIMを利用する環境が整っていないため、SORACOMに接続する際はSORACOM Inventoryからデバイス登録を行い、デバイスのシークレットを取得します。取得したシークレットを元にSORACOM HarvestのAPIへインターネット経由でデータを送信します。具体的な手順は以下ソラコムさんのサイトを参照してください。

dev.soracom.io

AndroidThingsからAPIを叩く際はokhttpを使い。以下のコードスニペットを使い、データの送信を行なっています。実験用のため、デバイスIDやシークレットをハードコートしていますが、実際にはAndroidのKey storeなどに保存しておくと良いと思います。

private static final String HARVEST_ENDPOINT = "https://api.soracom.io/v1/devices/";
private static final String DEVICE_ID = "<デバイスID>";
private static final String DEVICE_SECRET_KEY = "<デバイスシークレット>";

private OkHttpClient mOkHttpClient;
private ObjectMapper mObjectMapper;


String payload = mObjectMapper.writeValueAsString(harvestSummaryPayload);

MediaType MINE_TYPE = MediaType.parse("application/json; charset=utf-8");
//"x-device-secret: <シークレットキー>"
Request request = new Request.Builder()
          .url(HARVEST_ENDPOINT+DEVICE_ID+"/publish")
           .addHeader("x-device-secret", DEVICE_SECRET_KEY)
          .addHeader("Content-Type", "application/json")
          .post(RequestBody.create(MediaType.parse("application/json;charset=utf-8"), payload))
           .build();
Response response = mOkHttpClient.newCall(request).execute();
response.body().string();

物体検出について

今回の物体検出は学習済みのTensorflowモデルをTensorflow liteモデルへ変換し、AndroidThings場で動作させました。動作させたモデルはSSD Mobilenet v1 cocoと呼ばれるモデルです。AndroidThingsでの動作については以下の過去記事を参照ください。

masato-ka.hatenablog.com

接触温度センサについて

接触温度センサはPanasonic社のAMG8833赤外線アレイセンサを利用します。このセンサは8X8の格子状に非接触で温度データを取得することができます。データの取得インタフェースはI2C です。エアコンに内蔵され、人発見などの利用されるセンサーです。

masato-ka.hatenablog.com

実行結果

 デバイス側でおの物体検知と温度計測について

AndroidThings側での実行結果は以下の動画のようになっています。物体検出でマグカップを認識しています。その後、マグカップにお湯を注ぐことで発生する温度上昇をセンサーで捉えています。このようにAIだけ、センサーだけではできない事象を多次元的に捉えることがAI X IoTの醍醐味でしょう。

youtu.be

SORACOM Lagoonでの可視化について

SORACOm Lagoonでの可視化は以下のようになっています。このダッシュボードでは缶コーヒーの温度と個数を計測しています。これらを1つのデバイスで実現出来つところがみそです。

f:id:masato-ka:20181217220642p:plain

まとめ

今回はIoT X AIということでAndroidThingsで取得したセンサ情報と画像認識の結果をSORACOM Lagoonで可視化させてみました。ソラコムのサービス自体は昨年まではセルラー前提といった印象が強かったですが今年のDiscoveryイベントを境にセルラーだけでなくより幅の広いIoT プラットフォームとしての進化を遂げています。そんなソラコムサービスだからこそ、IoT X AIなサービスでも活躍できるのではないのでしょうか。来年もソラコムさんからますます目が離せません!