ABEJA Tech Blog

中の人の興味のある情報を発信していきます

数千人規模の自社イベントで顔認証活用サービスを作ってデリバリーした話 (ABECOIN)

はじめに

f:id:hiroyuki_abeja:20190826191836j:plain

こんにちは、ABEJAの大田黒(おおたぐろ)です。最近は、一ヶ月100kmを目標にランニングしたり、POとユカイな仲間たちと一緒に小売店舗向けのIoTxAI活用サービスの開発を進めているエンジニアです。前回の記事からだいぶ間が空いてしまいましたが、久しぶりにTech Blogを執筆しようと思います!

ちなみに前回は、IoTを活用したインフルエンザ注意報を作って社内展開をしていた様子等を書いてました。 tech-blog.abeja.asia

今私は、小売店舗向けのIoTxAI活用サービス であるABEJA Insight for retailの開発チームリーダーをさせていただいております。先日、我々のチームで研究&開発している技術を活用し、顔認証でマイニング&簡易決済が可能な仮想コイン(仮想通貨ではない)を個人の冬休みの自由研究として作りました。(詳しいコンセプトや仕組みは後述します!!) その自由研究でできたお遊びプロダクトを今年の3月に開催した自社イベントABEJA SIX2019において、来場された全員の方が体験可能なデモコンテンツとして実装しました。

speakerdeck.com (Doc: 基調公演資料 ※P78からABECOINの紹介あり)

本イベントでは、8000名を超えるレジストレーションがあり、実際に5000名を超える来場者がいらっしゃいました。おそらくAI系で国内最大規模のイベントになったと思います。今回の記事では、IoT x AI xWebが絡む複雑なシステムを2〜3ヶ月で構築し、ABEJA SIX2019のような大規模イベントに投入するまでの軌跡をお話できればと思っております。(少し生々しいかもしれませんが、時系列での出来事や考えたこと等をご紹介できればと思います)

ABECOINとは?

f:id:hiroyuki_abeja:20190822163909p:plain

ABECOINは、一言でいうと現実世界の行動によってポイントを貯める事ができるバーチャルマネーの一種です。なんだか、すごくふわっとしていますね...(笑) イメージとしては、IoTxAIの力を借りて人の行動を取得し、システムがその行動に応じたポイントを人に与えるといったモノです。ABEJA SIX2019では、会場内に設置されたカメラの前を通り回遊すると自然とABECOINが貯まり、お帰りいただく際に景品と交換できる体験を実装しました。具体的な体験の流れは下記の通りです。

  1. 最初にABECOINシステムに、顔の登録とユーザー登録をし、ABECOINのWeb画面へのアクセスURLをゲットする
  2. 会場内回遊時に主催者(ABEJA) or パートナー関係のブースに訪れると、顔認証によりABECOINのポイントが付与される。
  3. 溜まったポイントはいつでもWeb画面から確認ができ、景品と交換が可能。

ABEJA及びパートナーを含む様々なブースに対して自然と来訪者が増え、溜まったポイントを使って楽しんでもらうという流れを、ABECOINを基軸に実現したいと考えました。

※SIX2019におけるABECOIN運用は、IoT推進コンソーシアム・経済産業省・総務省より平成30年3月30日に公表された「カメラ画像利活用ガイドブックver2.0」に則った運用をしました。顔画像は即時破棄され、顔特徴量を含むデータはイベント終了後に全て破棄しています。

メイキング話

ここからは、構想〜ABECOIN実現〜後日談まで含めて、時系列でメイキングに触れていきます。少し長くなるかもしれませんが、お付き合いください。

2019年12月 (SIXまで3ヶ月ちょっと)

SIXデモ 何を作るかを決める会

f:id:hiroyuki_abeja:20190826004156j:plain

(Fig: アイデアブレスト)

f:id:hiroyuki_abeja:20190822141532j:plain (Fig: ABECOINプランニング)

当時、デモのコンセプトとしては下記のようなをチームで考えていました。 (原文ママ)

  • 圧倒的なデモをお披露目する事で,ABEJAのイケヤバさを再認識してもらう.
  • その上で,実用を想起できるようなデモを実装し,テクノロジーをビジネスに実装できる企業であることを認知してもらう.
  • さらに,ABEJAは特に売上につながる訳でもないデモに本気を出すような遊び心満載な企業であることを社内外に認識してもらう.

こういったコンセプトを元に、SIXデモチームでランチMTGをしていたところ、「我々の強みの1つである画像解析を活用して、会場内の行動によってポイントを付与して消費できる仕組みがあったら面白いんじゃないか?」という仮説が出てきました。ただ、メンバーとの話を進めていく中で、「行動に対してポイントが貰える」「そのポイントを会場内で消費できる」という事が体験的に面白いのか?等の不安がありました。何故ならば、ポイントを貯めて消費するという点においては、紙ベースのスタンプカードやスマートフォンのアプリといった既存の代替技術によってこの体験は実装可能だからです。

一方で画像解析によって現実の行動を分析して「気づいたらポイントが溜まっている」という体験は、やはり面白いんじゃないか?という話になり、 今回は我々が研究開発を進めてサービスで実利用している「顔認証技術」を使ってポイント付加・決済システムの実装をしてみようと思いました。 この時、12月末で会社も休みだったので、3日~4日ぐらいかけて、検証用のシステムをラフに実装してみました。

2019年1月上旬 (SIXまであと2ヶ月!!)

プロトタイプのお披露目 (To 全社員)

f:id:hiroyuki_abeja:20190822135845j:plain

1月の初営業日、ちょうど全社の朝会スピーチが自分のターンがだったので、冬休み中に作ったABECOINの説明と実演を全社員+役員にしてみました。(写真は、社員に対してABECOINの説明・デモ・体験の仕方を説明している様子です。) とりあえず、社内の数十人に体験してもらい反応を見てから「SIXデモとして採用するか、しないか」を決めようと思っていました。

社内検証でわかった課題

社内リリース&社内での実験を通して、いくつかの課題が見えてきました。100人以下の体験人数で出てくる課題は、間違えなく数千人規模のイベントでは厳しくなります。自由研究をSIXデモに昇華させるにあたり、見えていた課題を下記に列挙しました。課題は多くありましたが、社内メンバーが楽しく何度も体験してくれている様子をみて、SIXのデモはこれで行こうと直感的に決めました。デモとしてやることが決まって課題が見えたら後は徹底的に潰しにいく、そんなスタンスで進めようと決心しました。

システム観点の課題 (技術的観点)
  • 体験の品質担保には、映像解析のリアルタイム性・パフォーマンスの両面をケアする必要性がある
    • 概ね数秒以内に映像解析をして、特徴量の抽出・人物マッチング・コイン付与を行う必要性がある
  • カメラに映る人数によってシステムの解析負荷が変動する為、Elasticなインフラ構成が必要
    • 現実世界でのイベント(ゾンビ映画のように人が流れ込んでくる等)に応じてシステム負荷が変動
      • 上記を考えると、技術的難易度が高くなる
  • 物理レイヤーのトラブルが発生するとシステムが止まる
    • 例:カメラの電源・LANケーブルが抜ける等
    • 物理レイヤーでトラブルが発生するとサービス全体に影響が出る
システム導入観点の課題
  • ハードウェアの会場インテグレーションが大変
    • カメラの設置をしたいが、会場は借り物なので壁に穴が開けられない&マウント可能な構造物がない。設置の難しさがある。
    • 映像解析をエッジでやるか、クラウドでやるか問題があり、機材構成・配置に大きくインパクトする。
    • 小規模でもカメラの設置・設定作業は時間がかかる
      • 数台のカメラを社内に設置し、システム結合・テスト、チューニングしてたら半日〜1日が過ぎ去っていった
      • SIXのような大規模イベントでは、電源・N/W・各種構造物が前日の夜・当日の朝に構築される。
      • 本番で機材の設置・結合テスト・チューニングに使える時間は数時間。失敗するとデモがコケる恐れがある。
システム運用(=サービスデリバリー)観点の課題
  • 数千人の来場者の登録作業をどうやって効率化していくか?
    • 初期バージョンにおける社内テストでは、一人あたりのユーザー登録作業に約3~5分程度かかった。
    • 仮に1000人が体験するとして、3000分〜5000分。ユーザー登録だけでABEJA SIXの2日目が終わってしまう。
    • 登録〜UIアクセスまで、人による補助が必要 (スタッフ)
  • 数千人の来場者の景品交換オペレーションをどうやって効率化していくか?
    • 帰り際、景品交換したい人が殺到する事が予想される
    • システムのインフラも、スタッフもElasticに変動させていかないといけない

2019年2月上旬 (SIXまであと1ヶ月!!)

f:id:hiroyuki_abeja:20190822151229p:plain (Fig: 1月末時点でタスクブレイクダウン状況)

今回のデモでは、SIX2019で使う会場内にカメラを含めた機材を設置する必要性がありました。機材を設置し、当日に確実にサービスを動かす為には、 そろそろ、会場とのインテグレーションを前提としたNWアーキ設計、機材選定・開発等をボチボチ始める必要性がありました。 (本当は一ヶ月前の時点でだいぶ遅いのですが、、)

SIX2019の弊社緒方の基調公演にて「今回のデモはハードウェア、L2レイヤーから設計をしている」と説明がありました。今回、機材開発〜設置計画まで幅広く実施しており、本章では機材関係の話について触れます。

機材設置計画の立案

f:id:hiroyuki_abeja:20190822165316p:plain (Fig: 会場内のカメラ配置と結線ルート)

今回のABECOINの体験では、ユーザーは会場内の行動(回遊)に応じてポイントを獲得する事ができます。幅広い回遊を促す為に、回遊してもらいたいポイントに顔認証を有効にしたカメラを会場中に設置する必要性がありました。今回は、10台以上を設置しました。

  • 登録ブース(ログインゲート)・・・例: 100ABE付与
  • 展示会場入り口・・・例:200ABE付与
  • 展示会場内プレゼンステージ・・・例:500ABE
  • 展示会場内ABEJAブース・・・例:300ABE付与
  • 展示会場外エスカレーター前・・・例:50ABE付与

カメラ・カメラスタンドの設置・結線作業を考えると準備作業は大掛かりになります。準備の全体工程に大きく関わる為、機材設置にかかわる計画は早めに仮fix&運営メンバーへの周知をしました。

全体システム設計

f:id:hiroyuki_abeja:20190822143146p:plain (Fig: 基調講演やABECOINブース用のシステム図)

今回の体験では、下記を重視したシステム全体の設計を行いました。

  • 時間がなさそうなので、機材含めた導入をぱぱっとすむようにする (理想は機材置くだけ)
  • カメラの前に立ったら最大10秒以内にポイントが付与される
  • 変化するシステム負荷(来場者数依存)・カメラ設置計画の変更に柔軟に対応できる構成
  • 会場内で発生する物理的トラブルをある程度許容できる (ケーブル断線、WAN側ダウン等)

後述の現地調査を踏まえて、全体構成が右往左往していた時期もありましたが、最終的に下記のようなシステム構成を選びました。

クラウド型の映像解析アーキテクチャ
  • 最初は、映像解析や顔認証に必要なアプリを載せたGPUクラスターの会場持ち込み、会場内でエッジ解析する事を視野に入れていました。
  • 下記の理由から、今回はクラウド型解析を選択しました。
    • 2dayイベントの為に、新規にマシンを購入しクラスター構築をするとお金がかかる
    • 準備時間が限られている中で、クラスターを運搬・現地で構築すると時間的コストがかかる
    • マシンの故障リスク (クラウド上のVMでも同じ事は言える)
    • マシン故障時の対応コストの大きさ
    • 解析負荷に応じたElasticなリソースのスケールの難しさ (負荷に応じて急に物理解析クラスターは増設できない)
ある程度故障に強いリアルタイム映像伝送用の拠点間通信
  • クラウド側(AWS側)の仮想ルータと会場内の物理ルーター間で拠点間通信を構築
    • 伝送路のデータはAES256をベースとした強固な暗号化を実施
    • クラウド側のアプリケーションは、カメラが乗っている現地NWに透過的にアクセスが可能
  • クラウド側(AWS)と接続する出口(WAN)の経路は3重冗長化
    • 回線①: SIX2019専用で敷設する回線
    • 回線②: 施設側がもともと確保している
    • 回線③: LTEで通信可能なM2Mルーター with 数十MBpsで無制限でデータ転送ができる特殊契約SIMカード
  • 会場内物理ルーター及びクラウド側(AWS側)に複数の仮想ルーターを配置
    • VRRPを活用したゲートウェイ冗長化
    • BGPを活用した障害発生時のデータ転送経路の自動切り替え
QRコードを用いた高速ログインゲート
  • ログインゲート用カメラ前に立つと10秒で顔特徴量の登録・ABECOINアカウントの自動登録
    • この際、顔画像は破棄し、特徴量である高次元ベクトルとバーチャルなお財布(ABECOINアカウント)が紐づく状態
  • 会場に設置した感熱紙プリンターがアカウント登録イベントを検知して高速にログイン用QRコードを発行する
  • リアル世界のログインボーナスとして数百コインを付与
使用した技術スタック

実装に用いた技術スタックは下記のとおりです。

リアルタイム映像転送用拠点間通信の実装
  • 利用技術
    • EdgeRouter (会場側) ※Vyattaをベースとしたルーター(物理機器)
    • VyOS (クラウド側) ※Vyattaをベースとしたルーター用OS
  • 選定理由
    • 暗号化拠点間通信の実装が比較的簡単にできる
    • コマンド体系が直感的で理解しやすい
    • VyOSは業務である程度使っていて慣れていた

vyos.io

顔認証基盤
  • 利用技術スタック(?)
    • 弊社サービス Insight for retailで使っている映像解析、顔認証用システムをカスタムして使っています
      • ここらへんは論文を読んでアルゴリズム研究を行うところからアプリケーション化するまでを社内で行っています
    • システムのホスティングには、AWS上のGPUインスタンス + nvidia-dockerを利用しました

github.com

ABECOIN サービス基盤 (UI)
  • 利用技術スタック
    • Firebase
      • Firebase Hosting
      • Firebase CloudFunction
      • Firebase Auth
      • Firebase Realtime Database
    • Vue.js
  • 選定理由
    • FirebaseのようなmBaasに乗っかる事で、開発工数削減・安定的な機能デリバリーがしたかった
    • 業務で利用していて親和性が高かった

firebase.google.com

QRコード印刷機
  • 利用技術スタック
    • Raspberry Pi
    • FirebaseSDK(Python)
    • ESC/POS対応ライブラリ(Python)
  • 選定理由
    • ログインゲートにPCを置きたくなかったので、RaspberryPiを選択
    • FirebaseAuthを用いてデバイス(RaspberryPi)の認証部分が記述できそうだった
    • FirebaseSDKを用いる事でWebSocket用いてリアルタイムなデータ追加(変更)イベントが拾える
現地調査の実施

f:id:hiroyuki_abeja:20190822165555j:plain (Fig: 現地での速度テストの様子)

ここまでシステム全体の大まかな設計と実装に用いた技術の話をしました。机上でできるシステム設計も多く存在しますが、ソフトに限らずハードや物理環境(会場)も関わってくる為、実際の状況を想定した上での環境調査をしないとわからない事が多くあります。

現地調査の目的

今回は下記のような目的で現地調査を行いました。

  • 会場内(物理世界)の制約・状況を早めに知る事で、システム・デリバリー・体験の設計にフィードバックする

    • 前日・当日にほぼぶっつけで準備するので、会場とのインテグレーションで想定される問題を未然に防いでおきたい
      • 機材の搬入計画、機材の配線計画....
    • 安全性に関わる問題は確実に潰したい
      • 想定ポイントに機材を置いても問題ないかの確認
  • ログインゲート(登録ゲート)周りの環境チェック

    • 調査観点例
      • 仮に基調講演後に、登録ゲート前にXXX人並んでも他のブースの邪魔にならないか...?
  • ポイント付与用カメラスタンド周りの環境チェック

    • 調査観点例
      • 人流が多く転倒の危険性がないか?
      • 他の構造物はないか?設置可能か?
      • 顔検出に十分な明るさが確保できているか?
      • 近くにコンセント・LANポートはあるか?
      • ケーブルを這わせられる壁はあるか?
  • 会場サイドの回線の調査・テスト

  • 調査観点例
    • 割り振られるのは、会場基幹ルーターのローカルIPか?グローバルIPか?
    • 動画をアップロードするのに十分な上り帯域が確保できているか?
    • クラウド側と拠点間通信をするにあたって、ファイアウォール等が邪魔していないか?
    • ネットワークを使う他の事業者(例えば来場者用無線LAN等の設置業者等)と、かちあわないか?
ハードウェアの準備

全体設計 x 現地調査が完了したタイミングで、ハードウェア・ソフトウェアの両面から開発をスタートさせました。本章では、ハードウェアまわりの準備作業について触れます。

本場用カメラスタンドの作成

f:id:hiroyuki_abeja:20190826020307j:plain (Fig プロトタイプ設計)

f:id:hiroyuki_abeja:20190823023645j:plain (Fig カメラスタンドの構築-1)

f:id:hiroyuki_abeja:20190826022932j:plain (Fig カメラスタンドの構築-2)

f:id:hiroyuki_abeja:20190826020842j:plain (Fig SIX本番用機材に量産)

ABEJAでは、AIに限らずハード面も得意なメンバーが多くいます。そういったメンバーと議論をしながら、カメラスタンドの構想を練りつつ、ホームセンターに何度か足を運んで資材(+工具)を購入しました。カメラスタンドを普通に購入するのもよかったのですが、カメラマウントの問題・価格・安定性・ちょうどいい高さ・運びやすさの観点でよいものがなく自作する事を決めました。

本番用NW機器構築

f:id:hiroyuki_abeja:20190826160018p:plain (Fig: NW周りの設計)

今回はEdgeRouter(会場側) x VyOS(クラウド側)で拠点間通信を構築しています。ルーターのCLI/GUI、VyOSのターミナルからコマンドをたたく事で、おおむね設定が完了しました。

仮想ルーターを用いた開発では、Vagrant + VirtualBox + VyOSを利用して進めました。EdgeRouterとVyOSは祖先が同じ為、コマンド体系が似ています。会場側もクラウド側も両方この方法で機材の開発を行いました。

※下記記事は、VyOSでBGP部分を構築した時に忘備録として書いたものです。

qiita.com

ログインゲート構築 (社内試験用)

f:id:hiroyuki_abeja:20190826165239j:plain (Fig: サーマルプリンターの制御テスト With RaspberryPi)

f:id:hiroyuki_abeja:20190826171120j:plain (FIg: 印刷されたQRコードを用いたログイン)

いかにして一人あたりの登録コストを下げて効率的に登録作業を終わらせるか。たどり着いた先はQRコード + コンビニで使われているようなレシートの印刷機(サーマルプリンター)でした。これらを組み合わせる事で、顔特徴量及びアカウント登録後に素早くアクセス用URLを手渡しできると考えました。

qiita.com

上記を参考に社内で検証してみました。事前にユーザーの端末にQRコードリーダーがインストールされていれば、概ね10秒でユーザーがアクセス用QRコードをゲットできる事がわかりました。これをN並列で稼働できれば、ログインゲートのスループットは一人あたり平均10秒/Nとなります。この手法をベースに並列度を増やしていく作戦で進める事にしました。

ソフトウェアの準備

ここまでハードやインフラ面の話が多くありました。ただ、機材の会場へのインテグレーションばかり気にするわけにはいきません。ハード・インフラの部分はサービスを維持する為の必要な必須要素であり、もちろんないと始まらないのですが、今回のユーザー体験の質にインパクトするのはどちらかというとソフトの部分です。

ユーザー用Webアプリ側の改修

f:id:hiroyuki_abeja:20190826024521j:plain (Fig: デザイナーとUI設計ディスカッション)

1月頭の時点で、ABECOINの簡単なプロトタイプは完成していました。筆者(大田黒)が設計・実装をしたものです。普段社内ツールやB2B用途のUIを開発する事はあるのですが、今回のような不特定多数で使われるようなB2Cに近いUI開発は初めてでした。レビューをもらう為に、デザイナー・UI開発の経験があるメンバーを交えて改善点について議論しました。結果的に、UI/UXのセオリーに則っていない部分が多くあり、作り直す事を決めました。議論に巻き込んだメンバーが名乗りを上げてくれて、デザインや実装面のサポートをいただける事になりました。

管理者用機能の開発

f:id:hiroyuki_abeja:20190826180757j:plain (Fig: コイントランザクションの統計表示)

景品交換ブースや会場スタッフが使うことを想定して、ABECOIN自体の管理権限を持つスタッフ専用のUIを作りました。本UIでは、通常のユーザーと違ってコイン流通の統計であったり、ユーザー間の強制送金ができる様になっています。

※カメラの画像、顔画像等センシティブな領域には、一切アクセスできないようになっています。あくまでスタッフの運営用の機能として開発しました。

Sentryの導入 (Error Tracking Software)

f:id:hiroyuki_abeja:20190826171614p:plain (Fig: 実際に飛んできた例外一覧)

UIの社内試験を進めていく上で、端末の種類によってトラブルが起きたり、起きなかったり、想定していた動作にならないケースが多くありました。実際の現場で起きているエラーをいかに検知してデバッグに役立つ情報を集めるか。この部分に今回はSentryを利用し、エラートラッキングができる土壌を作りました。

2019年2月後半 (本番まで2~3週間!!)

前日準備の計画

f:id:hiroyuki_abeja:20190912025209p:plain (Fig: 準備工程)

いよいよ本番まで数週間。ハード・ソフトの開発作業だけではなく、会場にインテグレーションする為の計画を練り、関係者に周知する必要性がありました。特に本番前日の準備日は、SIX運営にかかわる様々な企業様(運営パートナー、施工パートナー、電気・NW配線パートナー等)が同時に作業を進行させます。その為、下記に注意をしつつ前日の準備工程を立案しました。

  • 機材搬入関連
    • 他の搬入計画(特に大型構造物)と時間がかぶっていないか?
    • 搬入口は十分な広さがあるか?
    • カメラスタンドを運搬する十分な幅は確保できるか?
  • 機材設置・セットアップ関連
    • 機材設置タイミング
      • 機材設置場所周辺の構造物・配線工事のタイミングとかぶらないか?
      • 電源・N/W配線作業が完了する時間帯はいつか?

事前の現地調査で会場の雰囲気は分かっていたので、スムーズに計画を立てる事ができました。

当日スタッフのオペの確認

今回、ログインゲートの運営や景品交換を円滑に進める為には、ABEJA SIXを支えるスタッフの力が不可欠でした。ABECOINに関わるスタッフ向けのオペレーション設計を考え、ボトルネックになる部分はABECOINサービス基盤上の管理者機能による補助を前提にしたマニュアルを構築をしました。

パンフレット入稿

f:id:hiroyuki_abeja:20190823103140p:plain

デモンストレーションの存在・遊び方を周知する為に、ABEJA SIX運営チームと組んでパンフレットに手を加えました。今回は、下記に重きをおいてパンフレット入稿をしました。

  1. ログインゲート/景品交換所の位置の明確化
  2. QRコードリーダーを事前に用意してもらう事による、ログインゲートの滞留防止
  3. カメラ利活用ガイドブックに基づくデータ利活用ポリシーの表明
社内インテグレーションテスト

2月の末になってようやくサービスを支える全登場人物が完成し、仮組みができる状態となりました。 そこでユーザーの体験及び運営側の作業が回るか含めたテスト&改善をしていました。

f:id:hiroyuki_abeja:20190829123452p:plain

前日 (SIXまで1日!!)

会場への機材搬入

f:id:hiroyuki_abeja:20190826015243j:plain

f:id:hiroyuki_abeja:20190826015256j:plain

東京オフィスの1Fにハイエースを止めて、必要物をすべて積載して会場へ。ギリギリまで機材検証とチューニングをやっていたので、機材はまだ熱を帯びていたのを覚えています。SIXデモチームに限らず有志があつまり、会場に無事運ぶ事ができました。

システムの疎通チェック (仮組)

f:id:hiroyuki_abeja:20190826011250j:plain (Fig: 構造物施工中の展示スペース)

f:id:hiroyuki_abeja:20190826020227j:plain (Fig: NW機材仮組み)

メイン構造物の完成を待っている間も時間を無駄にできません。大規模な会場の空いているスペース(まだ工事がスタートしていないスペース)を使って、カメラ・NW機器・映像解析システム・ABECOINサービス基盤(WebUI・API)が機能しているかをチェックしました。

f:id:hiroyuki_abeja:20190826035557p:plain (Fig GPUインスタンスとカメラ間感の速度テスト with DummyPayload)

仮設で組んだネットワークで、クラウド上から現地ネットワーク上のWebサーバーにアクセスした所、数十MBpsのデータ転送パフォーマンスが出ていました。 ビットレート制限をかける必要性はありますが、会場内のカメラからのなんとか映像転送ができそうな速度が出ていました。(EdgeRouter-Xでは、AES256の処理が追い付かず十分な速度が得られませんでした。なので、上位機種を本番では利用しました。)

本場用ログインゲートの構築

f:id:hiroyuki_abeja:20190826015108j:plain (Fig: 必要機材の配置・結線)

f:id:hiroyuki_abeja:20190826173409j:plain (Fig: ログインゲートの全体感)

ログインゲートは、こんな感じになりました。2基のログインゲートの前に人が立つと、登録が自動で完了してQRコードが出てくるという仕組みです。本当はもう少し増やしたかったんですが、カメラスタンドの生産が追いつかず、一旦2並列にしました。机の下には感熱紙プリンターの予備ロールや運用マニュアルなどを配置し、スタッフが機材の運用含めたオペレーションができるように準備を整えました。

本番用景品交換ブースの構築

f:id:hiroyuki_abeja:20190826032727j:plain (Fig: コイン送金用のQRコード)

オペレーションを考えた結果、景品交換ブースのスタッフは複雑なシステム操作をせずに商品交換に専念してもらったほうがよいと考え、ユーザー側からブラウザ上QRコードスキャナーでスキャン&送金してもらうというスキームにしました。これで、景品交換ブースは最小限の人の張り付きで運営可能です。

ただ一つ問題がありました。社内でたくさんの人に体験してもらう中で、ブラウザ上でカメラ機能がオープンできない端末が少数存在している事が分かりました。おそらくセキュリティー設定によるものだと推測されますが、これがあると送金できません。バッグアッププランとして、管理者側iPadでユーザーのQRコードをスキャンする事で、コインを移動させるという機能を作り、トラブル時はそれを使ってもらう運用としました。

カメラスタンドの安全対策

f:id:hiroyuki_abeja:20190912030051p:plain (Fig: あるケースにおける必要な重さの見積もり)

f:id:hiroyuki_abeja:20190827154540p:plain (Fig: どれぐらい傾くとまずいのかの計算例)

f:id:hiroyuki_abeja:20190826025800j:plain (Fig: 総重量 250Kg以上のウォーターバッグ)

f:id:hiroyuki_abeja:20190826030555j:plain (Fig: ウォーターバッグの設置)

今回自作したカメラスタンドは、完全自立が可能で通常ユースケースにおいては非常に安定しています。一方で、今回設置する環境(大規模イベント)では多くの通行が予想される為、転倒を防止する為の安全対策を考える必要性がありました。いくつかの想定ケースを考え、理論的に計算をしたところ、数十kgの重りをポールの根本に設置する事によって(故意ではない)衝突ケースにおいて倒れにくくなる事がわかりました。

  • カメラスタンドの周囲を立ち入り禁止エリアとする

    • トラテープ(黒・黄のシマシマのテープ) + 立ち入り禁止の張り紙を設置
    • スタッフによる巡回等で危険行為がないかを確認
  • カメラスタンドへのウォーターバッグ(おもり)の設置

    • ウォーターバッグをポールに巻きつける形で設置
      • サンドバッグと異なり、水は現地で調達・破棄・運搬しやすい
      • 万が一、足元が躓いたとしても、衝撃をポールを中心とした回転モーメントに変換する
        • 躓いてもポールが回転して終わる
    • プラスαでポール以外にも重りを追加

上記を実施しつつ、現場でのテストを通して最終的な安全性について確認を実施しました。

SIX当日 (3/4, 3/5)

f:id:hiroyuki_abeja:20190912013124j:plain (Fig: ABEJA SIX当日の朝会)

全ての準備作業が前日の夜に完了し、特に大きなトラブルもなく当日を迎える事ができました。当日の朝、全ABEJA社員が一斉に集まるタイミングがありました。そのタイミングで全社員にABECOINの登録作業を実施してもらい、構築した本番用システムが問題なく動く事・スタッフのオペレーション的に問題がない事の確認をしました。いよいよご来場いただいた方がデモを体験できる状態になりました。

開場後、基調講演が終わったタイミングから登録数が急激に伸び、ログインゲートがフル稼働状態となりました。登録作業に時間がかかる事は社内検証で想定&対処できていた為、当日は大きな行列を作ることなく効率的に登録オペレーションを進める事ができました。また、夕方にかけて景品交換の数が増え、景品交換所の稼働率が上がりました。こちらも大きな行列を作ることなく、効率的に進める事ができました。最終的にイベントを開催した2日間、特に大きなシステムトラブルやオペレーショントラブルもなく、無事走りきる事ができました。

ABEJA Booth

f:id:hiroyuki_abeja:20190912013538j:plain (Fig: ABEJA Booth内 デモ紹介エリア)

ABEJAのデモ紹介エリア(ABEJA Booth)では、開発した管理用機能を使って会場内のコイントランザクション・ユーザ数の統計情報を表示していました。会場内でコイン付与・消費等のコイントランザクションが発生するとリアルタイムで「アベコインッ」と音が鳴る仕掛けをしていたので、多くの方にお気づき頂けたのではないかと思います。この画面を使ってユーザーの登録状況・コイン流通状況を確認しつつ、当日はABEJA BoothにてABECOINの説明員をさせて頂きました。

後日談

事件1: 資材搬入が予定通りいかなかった

f:id:hiroyuki_abeja:20190826011420j:plain

今回、施工物を搬入するパートナーと時間的にかぶらないように資材搬入計画を立てました。搬入計画通りにものを運ぼうとしたら、東京マラソンによる交通規制がありホテルになかなかたどり着けないというトラブルがありました。念のためマージンを持ったスケジューリングをしていたので問題はありませんでしたが、予期しないトラブルだったのでかなり焦りました。

教訓: 資材搬入時は会場・ホテルとの調節だけではなく、交通事情も含めて確認する事

事件2: GPUインスタンスの上限緩和忘れ

今回の我々のサービスでは、リアルタイムの映像解析・顔認証を行ってABECOINのサービス基盤と連動させる為に、大量のGPUインスタンスを活用しました。AWSを普段使っていてサービスを運用されている方ならご存じだとは思いますが、AWS EC2では立てられるインスタンス数に制限があり、制限を超えた数のインスタンスを使うためには事前申請が必要となります。今回気づいた段階で大急ぎで申請を出しましたが、もし当日までに緩和申請が間に合わなかったらと考えるとゾッとします。

教訓: クラウドはリソースの調達にある程度自由度はある。ただし油断しない。

aws.amazon.com

事件3: ハイパーインフレーション事件

f:id:hiroyuki_abeja:20190823002522j:plain

f:id:hiroyuki_abeja:20190826192009p:plain

(Fig: 事件発生からのHotfix)

バグによりString型の数値を足し算するロジックが走ってしまい、総取引コインを表示する管理者側アカウントがとんでもない事になりました。管理者アカウントのみの影響で、他のユーザーには何も影響はありませんでしたが、見栄えがやばいので急いでHotfixを当てました。

  • 教訓
    • Javascriptの数値の足し算きをつける。
    • 当日のバグの原因となる為、ギリギリまで機能開発をしない。リリース日程とテストスケジュールをしっかり切っておく。
    • Sentryを入れておいてよかった。バグ(例外)の発生と原因のTraceBackがすぐに上がってきて、対応が高速にできた。

事件4: ユーザーの端末でQRコードリーダーが開かない問題

今回、手軽にユーザー間でコイン送金ができるようにとブラウザ上でWebカメラを開きQRコードの認識を行っていました。肌感ですが、4分の1程度のユーザーの端末で正常にカメラ機能が働かず、結果的に管理者アカウントでログインしているiPadで決済を進めるケースが多くありました。

  • 教訓
    • 運用の今回に関わる機能はリカバリープランを用意しておく事
    • 実装した機能が全ての端末で動く保証はない

感じたこと

今回は、2~3ヶ月でデモ設計・体験/技術的な検証・HW/SW/NWの実装・会場とのインテグレーション・運用という流れを体験する事ができました。 様々な観点で、いくつか学びを得ることができましたので、こちらで共有させていただきます。

市場の反応が予想以上に良かった事

正直作り込み自体にかけられた時間は1ヶ月程度でした。システムとしては動いておりましたが、UIのクオリティも含めてProductionレベルというよりかは、PoCレベルの完成度だったと思います。一方で、多くの方にブースに足をお運びいただきまして、面白いと評価を頂きました。また、この仕組みを使って介護・リハビリの分野に応用したい等の様々なディスカッションをさせていただきました。また、TwitterのABEJASIXタグをつけていただいて多くの体験のご報告を頂きました。多くの方に反響を頂きまして、本当に作ってよかったなと感じた瞬間でした。

RPG形式で、社内にデモづくりの仲間が増えていく楽しさ

ABEJAでは、面白いことをやっているとワイワイ仲間が集まってきます。社内で有志で人が勝手に集まって、みんなで各人のスキルを活かしてでバリューを実装していく感覚。こういったところにABEJAのカルチャーを感じました。

  • Member A(大田黒):全般 + 資材搬送の軽トラ運転 (AT限定)
  • Member B:会場とのインテグレーション全般のヘルプ
  • Member C:UIデザイン&実装、会場内LANケーブル敷設
  • Member D:UIデザイン&ロゴ設計 + 物品発注
  • Member E:映像解析システムのチューニング、カメラのチューニング
  • Member F:法務周りの整理
  • Member G:カメラスタンドの設計開発 & LANケーブルかしめ
  • Member H:バイトリーダー (学生スタッフ、当日スタッフのまとめ役)
  • Member I:ログインゲートで人員誘導
  • Member J:ログインゲートで人員誘導
  • Member K:ABEJAブースの説明員 & 景品交換補助
  • Member L:当日の運用に必要なiPad等の機材を調達

実は、2月の頭まで一人でデモ実装を進めていました。気づいたら、チームと呼べるぐらいメンバーが身の回りに集まっていて、気づいたらカメラスタンドの設計が進んで材料リストが列挙され、気づいたらロゴと立派な展示ブースができていて・・・。コミットする事業が違くても、やっていきたい世界観を語ると、気づいたらコミットしてくれる。そんなメンバーに囲まれていたので、当日皆様に楽しんでいただけたコンテンツになったのではないかと思っています。

余談
  • 当日のABECOINブースで流れていたコイントランザクションの音「アベコインッッ!」は、副業で声優をやっているメンバーの声です

  • 元自衛隊(通信部隊)メンバーのケーブル敷設、回収(8の字巻)の速度がすごすぎて、一瞬でNW構築が終わりました

高速なプロトタイピング&検証の重要性

「この体験は面白いのか?」

そういった問いに対して、高速なプロトタイピングをして検証をすることは一つのやり方であると感じました。 冬休み中にプロトタイピングがあったからこそ、社内メンバーを巻き込みながら体験の検証・SIX2019でのデモ化に振り切れたと思っています。 もし、ラフなプロトタイピングをしていなかったらABECOINも生まれていなかったし、ABEJA SIXのデモは完全に別のモノになっていたと思います。

物理世界とのインテグレーションは大変

ここでいう物理世界=会場ですが、ソフトウェアに閉じた世界と違って物理レイヤーが絡むと考える事が格段と増えるなと感じました 今回は、自分の足で現地に赴いて情報収集をし、そこから導入・運用・撤収というライフサイクルが滞りなく進める為のプランニングをする必要性がありました。 また、大規模なイベントなので当日スタッフや不特定多数の人の動きについても設計・予測・考慮する必要性があります。

まとめ

f:id:hiroyuki_abeja:20190823022625j:plain

ABECOINの構築に関われた全ての社員の方、イベント設営に関わっていただいた全てのパートナー企業の皆様、また今回体験頂いたご来場者の皆様、本当にありがとうございました。個人的に難しいチャレンジだった為、成功するかどうか当日まで不安でした。結果的に走り切る事ができ、フィードバックもいただき、良かったなと思っています。

SIX直後の3月・4月はすごく多くのお問い合わせを頂きまして、取材いただくこともありました。開催から約半年経過した今でも、ご連絡をいただくことがあります。社内外の反応は予想以上に良く、結果的にSIXのデモとしては大成功だったのではないかと思います。今回つくったモノはSIXのデモに閉じずに、何かしらの形で社会実装が進められればと考えております。

来年のSIX2020では、SIX2019での経験を生かして、さらに面白いコンテンツを用意できればと思います。ありがとうございました。

宣伝 (募集)

ABEJA インターンメンバー

一緒にABECOINを盛り上げたい学生メンバーを募集しています。

www.wantedly.com

ABEJA 新卒メンバー

ABEJAでは、イノベーションで世界を変える挑戦に興味のある新卒メンバーを募集しています。 イノベーティブなものづくりと社会実装に興味のある方を募集しております!

hrmos.co

ABEJA Insight for retail エンジニア

今私の事業部で募集している職種です。IoT・BigData・AIを活用し、小売流通業の未来を作っていきたいエンジニアメンバーを募集しています。

hrmos.co

hrmos.co

hrmos.co

hrmos.co

ABEJAの中の人と話ししたい!オフィス見学してみたいも随時受け付けておりますので、気軽にポチッとどうぞ↓↓