多様なアプリケーションをインストールできるIoTカメラで遊んでみる〜パナソニックのVieureka(ビューレカ)向けアプリの開発環境構築からサンプルアプリ実行まで〜

パナソニック様の提供するVieureka(ビューレカ)プラットフォーム向けアプリの開発環境構築手順をご紹介します
2019.02.25

はじめに

サーバーレス開発部@大阪の岩田です。 最近パナソニック様の提供するVieureka(ビューレカ)プラットフォームを利用したアプリケーションの開発に挑戦しています。このブログではVieurekaプラットフォームで動作するアプリケーション(AdamApp)を開発するために必要な環境構築手順についてご紹介します。

Vieurekaとは?

Vieurekaとはパナソニック様の提供するプラットフォームです。 多様なアプリケーションをインストールできるIoTカメラを用いて、さまざまな映像データを手軽に収集、分析、活用できるのが特徴です。

現時点で来客分析サービスや、従業員管理システムといったサービスが提供されており、ビジネスの課題分析・改善に役立てることが可能です。来客分析サービスを例にあげると、人物・属性カウントや滞留時間表示といった機能が利用でき、より詳細な分析・検討を行う店舗マーケティング活動に活かせます。株式会社トライアルカンパニー様の事例では売場の常時可視化により、商品陳列精度や販促効果が向上できたそうです。

来客分析サービスのダッシュボードはこんなイメージです(※画像はパナソニック様より提供頂きました)

昨年のre:Invent2018においてAWS IoT/Greengrassへの対応について発表されるなど、要注目の技術です。また、直近ですが今週の木曜日(2019/2/28)にVieurekaプラットフォームの紹介セミナーが開催されるので、興味のある方は参加してみてはいかがでしょうか?クラメソからも何名か参加させて頂きます。

Vieurekaプラットフォームの紹介セミナー開催のご案内

今回パナソニック様のご好意によりVieureka対応カメラを貸し出して頂きました。感謝!!

このカメラでVieureka向けアプリを開発していく前準備として、まずは開発環境を構築していきます。

環境

今回利用した開発環境です。

  • OS: Mac OS X 10.14.2
  • Docker: 18.09.1
  • docker-compose: 1.23.2
  • AdamAppSDK: 0.95

開発環境の構築

それでは実際に開発環境を構築していきます。

Vieurekaプラットフォーム向けのアプリ開発にはAdamAppSDKが必要になります。

AdamAppSDKの動作要件として、サポートされているOSは

  • Ubuntu 12.04LTS(32bit版、64bit版)
  • Ubuntu 14.04LTS(32bit版、64bit版)
  • Ubuntu 16.04LTS(64bit版のみ)

となります。今回はDockerを利用して環境を構築してみます。

AdamAppSDKとツールチェインの準備

これがないと始まりません。まずは問合せフォームからパナソニック様に問い合わせてSDKとクロスコンパイラを入手しましょう。 私が入手したバージョンはAdamAppSDK_V0_95_20170317vrk-c201-x86_64-toolchain-r7184-20170330.shでした。

Docker Imageのビルド

Ubuntu16.04のイメージをベースにDocker Imageを作成します。

まずはDockerfileです。 ARGでクロスコンパイラ導入用のシェルスクリプトを指定しています。 別バージョンを利用する場合は適宜引数を変更してください。

FROM ubuntu:16.04

ARG TOOL_CHAIN_SH=vrk-c201-x86_64-toolchain-r7184-20170330.sh

COPY ./${TOOL_CHAIN_SH} ./
RUN apt-get update &&  \
    apt-get upgrade -y && \
    apt-get install -y libcurl4-nss-dev lsb gdb cron lsb-release busybox zip cmake python bzip2 g++ g++-multilib libjpeg-turbo8-dev && \
    chmod +x ${TOOL_CHAIN_SH}  && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* && \
    ./${TOOL_CHAIN_SH} -y && \
    rm -f ./${TOOL_CHAIN_SH}

docker-composeが使えるようにdocker-compose.ymlも用意しました。 ホスト側のshareというディレクトリをコンテナの/home/ubuntuにマウントしています。 また、後述する管理コンソールへのアクセス用にコンテナ内の80番ポートをexposeしています。

version: '3'

services:
  devenv:
    image: vieureka_devenv
    stdin_open: true
    tty: true
    build: .
    volumes:
      - ./share:/home/ubuntu
    ports:
      - "80:80"

DockerImageをビルドします。

$ docker-compose build
Building devenv
Step 1/4 : FROM ubuntu:16.04
...略

Removing intermediate container 48c32a969841
 ---> 66cd06f3811c
Successfully built 66cd06f3811c
Successfully tagged vieureka_devenv:latest

サンプルアプリをビルドして動かしてみる

作成したDocker Imageを使ってAdamAppSDKに内包されているサンプルアプリを動かしてみます。今回はサンプルアプリの中のJpeg Sample Applicationを試してみます。 まずはDocker Imageを起動しておきます。

$ docker-compose run  --service-ports devenv

サンプルアプリをビルドしてみる

コンテナ内にSDKを解凍・展開し、解凍後のディレクトリに入ります。

unzip AdamAppSDK_V0_95_20170317.zip
cd AdamAppSDK_V0_95_20170317

SDKに含まれるsetup_env.shを実行します。 setup_env.shに渡す引数でビルドターゲットのアーキテクチャが指定可能です。 今回は開発環境で動作させるためにvrk-pcを指定します。

$ source setup_env.sh vrk-pc
****** x86_64-linux-gnu-gcc is Found! ******
PF_BASEDIR =  /home/ubuntu/AdamAppSDK_V0_95_20170317
BUILD_TARGET = vrk-pc
TARGET_FOR_ADAM = dcs-pc
TARGET_ARCH = x86_64-linux-gnu
VERBOSE = 0
PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@fd3b30bcb88c:/home/ubuntu/AdamAppSDK_V0_95_20170317#
$ cd src/adamapp/
$ make

ENTER skeleton_sample_app (ALL dcs-pc)
 C++ skeletonSampleApp.cpp
 LINK SkeletonSampleApp
 MAKE Package [==> Copy]
 MAKE Package [==> Configuration]
    APPLICATION --> SkeletonSampleApp
     APPVERSION --> V0.1
       APPNAME0 --> Sample Application
       APPNAME1 --> サンプルアプリ
        ROMSIZE --> 2000
        RAMSIZE --> 1000
      INSTALLER --> install.sh
        UPDATER --> update.sh
    UNINSTALLER --> uninstall.sh
         FUNCID --> 0000FF01
          APPID --> 00003100
          APPID --> 00003101
          APPID --> 00003102
      TRIALTIME --> 44640
        MODELID --> VRK_PC64_LINUX (Automatic setting)
 MAKE ZIP Package [==> Packing]
  adding: bin/SkeletonSampleApp (deflated 61%)
  adding: conf/profile.bin (deflated 22%)
  adding: conf/applicense.bin (deflated 56%)
  adding: data/ (stored 0%)
  adding: setup/ (stored 0%)
  adding: setup/uninstall.sh (deflated 31%)
  adding: setup/install.sh (deflated 40%)
  adding: setup/update.sh (deflated 22%)
  adding: conf/appConf.json (deflated 21%)
 MAKE EXT Package [==> Making SkeletonSampleApp_V0_1_x86_64.ext]
------ Finish! -----
LEAVE skeleton_sample_app
...略
------ Finish! -----
LEAVE apppref_sample_app

ビルド完了です。

サンプルアプリを動かしてみる

ビルドできたのでサンプルアプリを動かしてみます。 アプリはAdamCoreと呼ばれるプロセスが管理する構成になっており、アプリの直接実行はサポートされていません。そのためアプリを実行するには管理コンソールからアプリをインストール→起動、という手順が必要になります。

まずは管理コンソールにアクセスするためbusyboxのHTTPDを起動します。 シェルスクリプトは一般ユーザーがsudoして利用する想定の作りになっており、環境変数USERrootが設定されているかをチェックしています。今回の環境はDockerコンテナを利用しており、コンテナ内ではrootユーザーを利用しているため、チェック処理を通すために環境変数を設定してきます。 またtool内のシェルスクリプトはパスに依存する部分があるようなので、必ずシェルスクリプトを実行する際はAdamAppSDKのルートディレクトリから実行してください。

$ cd <AdamAppSdkのルートディレクトリ>
$ export USER=root
$ ./tool/httpdctl.sh start
busybox httpd Start OK (PORT=80)

次にAdamCoreを起動します。

$ ./tool/startAdam.sh -s jpeg:<テスト用のJPEGファイルを保存したディレクトリ>
*** adamCore [For x86_64-linux-gnu: ubuntu 16.04] is Starting ***
sdkCam Start
 sdkCAM: Start to search JPEG Files! => *
 sdkCAM: Search finished!!
adamCore Start
ADAM Core 1-1-1-007110 Start : (pid=12021)
***** Start OK *****

起動時のオプション-sで動作モードを指定できるのですが、今回は事前にテスト用のJPEGファイルを用意しておき、対象ディレクトリをjpeg:オプションで指定しています。 このオプションを利用することでカメラデバイスが無くても画像周りの処理をテストできます。 注意点として、事前に用意するJPEGファイルのサイズは640x480にしてください。サイズが合わないと正常に動作しません。

Chrome用のExtension導入

VieurekaのカメラデバイスはADAM OPERATION UIという専用の管理UIから管理操作を行います。 ADAM OPERATION UIを利用するためのAdam Control ExtensionというChrome用ExtensionがAdamAppSdkに含まれているので、Chromeの拡張機能画面にドラッグ&ドロップしてExtensionを導入します。

ADAM OPERATION UIからサンプルアプリを実行

準備ができたのでChromeに追加されたAdam Control Extensionのアイコンをクリックし、ADAM OPERATION UIへ遷移します。

表示されたADAM OPERATION UIからTargetに開発環境のIPアドレスを入力しConnectをクリックするとカメラに接続され、カメラの管理情報が表示されます。

こちらの画面からInstallボタンをクリックし、ビルド後に生成されたZIPファイルを選択します。 しばらくするとインストールが完了し、Application ListにJpeg Sample Applicationが表示されます。

Startをクリックし、サンプルアプリを起動します。起動に成功するとStatusRunningに変ります。

SendDataをクリックするとオペレーション用の画面に遷移するので、そのままsendDataをクリックし、しばらく待つと・・・

アプリからJPEGファイルが返却されてきました!! バイナリデータが返却されているため管理コンソールからは確認し辛いですが、開発者ツールでXhrのレスポンスを確認すると画像が返却されていることがわかります。

まとめ

まずは開発環境の構築手順についてご紹介しました。 今後は実際のカメラへのアプリのインストール手順や、独自アプリの開発手順についてもご紹介していきます。 お楽しみに!!

参考