読者です 読者をやめる 読者になる 読者になる

気ままにI/O

プログラムとかものづくりのインプット・アウトプットのためのブログ。

大八耐でVisionAPIを使ったARコンテンツを作ってきた

9/24~25で開催された大八耐というハッカソンイベントに参加してきました。

 

atnd.org

 

大八耐とは

大八耐は2日間で何かしらものづくりをしようというイベントで、基本的にテーマやルールはありません。

普段作っているものを継続して開発してもよし、2日間だけで作ってもよし。

内容も、プログラムでもCGでも絵画でも音楽でも立体物でも手芸でもなんでもOK。

お互いの作品を披露し合って交流しましょう、というような会です。

 

作ったもの

タイトルにある通り、GoogleのVisionAPIを使ったARコンテンツを作りました。

スマホをセットするタイプのHMDを装着してプレイします。

作品名は「識り神の眼」(しりがみのめ)

すべての物の名前を知っている識り神という神様がいます。(いません)

HMDを装着し特別な手袋を身につけることで識り神の眼を体験できます。

名前を知りたい物に手をかざすと、識り神の力によりその物の名前が分かります。

 

f:id:k_nagamine:20160928190050j:plain

 

こんな風に見えてます。

 

www.youtube.com

 

分かりやすいように全画面表示していますが、実際はHMD用の2眼表示になってます。

手をかざすと魔法陣が表示され、その内側にあるものが何かを表示します。

対象は何でもOK。小さいものでも、大きな建物でも、魔法陣の中に収まるように調整すれば認識されます。(結果はGoogle先生しだい)

 

環境など

用意したもの

f:id:k_nagamine:20160928190827p:plain

 

  1. Nexus6
  2. ハコスコDX(外カメラが使えるスマホHMD
  3. 識り神の手袋(100円ショップで軍手と柄のついた布を買って縫い合わせた)
  4. 識り神のマスク(にぎやかし。識り神のイメージ。100円。)

 

開発環境

Unity5.4

Vuforia6.0

 

使用したAPI

Google Cloud Vision API

Microsoft Translator API

 

処理の流れ

  1. 手袋の模様(ARマーカー)をVuforiaで認識して手の位置を把握
  2. 手の横に魔法陣を徐々に大きくなるように表示
  3. 魔法陣が一定の大きさになったら認識開始
  4. 魔法陣が表示されている画像領域を切り取りVision APIに投げる
  5. 認識結果が英語で返ってくるのでTranslator APIに投げる
  6. 日本語で返ってきた結果を画面に表示

  

ポイントとしては、4.で魔方陣の領域に合わせて画像を切り取っているところです。

手の位置を上下左右前後に動かすことで魔方陣の位置と大きさを調整できるので、自分が調べたい範囲を任意に指定することができるようにしています。

画像の切り取りは、ARマーカーとカメラの位置関係、カメラのFoV値などからごにょごにょ計算しています。多分ここが一番複雑だった。

 

APIについて

APIGoogleのVision APIMicrosoftのTranslator APIを使っています。

このAPIがUnityから使えることだけは事前に確認してから臨みました。

 

Google Cloud Vision API

Googleの学習済みの機械学習モデルを外から簡単に利用できるAPIです。

今回は物体検知の機能を使いましたが、顔検知、ランドマーク検知、テキスト抽出など、いろいろな機能があります。

Unityからの使い方はこちらのブログGitHubが大変参考になり、割とすんなりいけました。ありがとうございます!

Vision APIは1000リクエスト/月までは無料で利用できますが、それを超えると1000リクエストごとに5ドル程度かかるようなので、無料アプリとかで公開したら大変なことになります。

 

Microsoft Translator API

Microsoftが提供している翻訳APIです。テキスト翻訳と音声翻訳があるようですが、今回はテキスト翻訳を利用しています。

VisionAPIの結果が英語で返ってくるので、日本語に翻訳するために使いました。

最初はGoogleの翻訳APIを使おうと思ったのですが、無料での利用ができないようだったので、無料で使えるMicrosoftAPIに切り替えました。こちらは2,000,000文字/月までは無料で利用できるようです。

Translator APIはUnityから扱うサンプルなど見あたらなかったのでドキュメントや他言語での記事を見ながら実装しました。コンポーネントとしてGistに上げてます。

 

UnityからMicrosoft Translator Text APIを利用するコンポーネント · GitHub

 

感想

Googleの物体認識の精度がすごいです。

もちろん周囲の環境にもよりますが、対象の画像範囲を絞っているのでなかなかいいかんじで結果を表示してくれます。

多くの人に使ってもらいましたが、「じゃあこれはどうだろう?」「これならどう?」といったかんじでいろいろ試してもらえたので良かったです。

 

また、ありがたいことに審査員賞をいただくことができました。

技術、アイデア、手袋による入力インターフェイス、「識り神」という世界観、といったコンテンツ全体を含めて評価していただけました。

入力インターフェイスをどうするか悩んでいたのですが、識り神の手袋というアイテムにすることで世界観を表現しつつ認識範囲の調整もできるようになったので良かったです。

 

おまけ

識り神のマスクは世界観を演出する賑やかしアイテムなので別に無くても遊べます。

が、実はHMDの上からかぶることもできます。むしろかぶることで本物の識り神に近づけます。

マスクの目の部分に穴を開けており、ちょうどカメラが眼球っぽくなります。

まさしく「識り神の眼」ですね。

 

 

f:id:k_nagamine:20160928191536p:plain

 

f:id:k_nagamine:20160928191737p:plain