Google Glassで作る近未来アプリケーション(1)
Google Glassアプリケーション開発の基礎知識
Glassware(=Glassアプリ)開発を始めるなら、日本上陸前の今がチャンス。米国シリコンバレー在住の筆者が、現地ならではの視点でGlassware開発を解説する連載スタート。
はじめに
Google Glass(以下、Glass)は、グーグルが開発する眼鏡型のウェアラブルデバイスだ。2012年6月にGoogle I/Oでコンセプトが発表され、2013年春から米国で早期導入プログラム参加者への販売が始まった。
販売開始からもうすぐ1年になるが、インターネット上では日々多くの議論や改善要望が投稿され、個人が開発した「Glassware」(=Google Glassアプリケーション)の紹介も活発に行われている。社会問題として取り上げられるなどネガティブな側面もあるが、それも含めて、Google Glassの時代は着実に近づいてきていると感じる。
一方で、Glasswareの開発はまだ始まったばかりで、キラーアプリと呼べるものは数少ない。開発を始めるなら、今がチャンスだ。本連載では、まずGlassの機能や特徴、開発方法などについて解説し、その後、Glassならではの近未来的アプリケーションを、サンプルコードを交えながら解説していく。
なお、筆者はシリコンバレーでAndroidアプリケーション開発に従事しており、現地でのGlassミートアップなどにも参加している。現地ならではの視点が、皆さまの役に立てば幸いである。
Google Glassのハードウェア
まずはGlassのハードウェアとしての特徴を見てみよう(図1)。外観を見て分かる通り、主要なパーツは全て右側に集中している。
ディスプレイ/カメラ/マイク
Google Glassで何といっても特徴的なのが、右眼の前に位置するプリズムディスプレイだ(図2)。断面1cm四方のプリズムの中に、ハーフミラーが埋め込まれており、Glass内部のプロジェクターから照射された映像が投影される。スクリーンはかなり明るいので、屋外でも問題なく見える。アーム部分はちょうつがい(=ヒンジ)になっており、前後に動かして見え方の個人差を調整できる。
ディスプレイのすぐ横には、カメラが取り付けられている。静止画と動画の両方に対応しており、静止画の解像度は500万画素、動画は720pに対応している。画角は水平画角が54.8度、垂直画角が42.5度でGalaxy Sなどの端末と同程度であるが、体感的にはかなり広画角だ。またアーム上部にはカメラ用のシャッターボタンも存在し、長押しで動画の撮影もできる。
また表面からは見えないが、カメラのあるアーム部分の内部にはマイクがあり、音声認識などに利用されている(※2014/02/24 追記)。
タッチパッド
プリズムディスプレイが接続されている柄の根元部分はタッチパッドになっており、タップやスワイプなどのジェスチャーでGlassを操作できる。
バッテリー&スピーカー
Glass右側の先端部分(=耳より後ろに当たる部分)には、バッテリーが格納されている(図4)。使用方法にもよるが、動画やゲームなどに偏った使い方をしなければ7時間くらいは持続する。また、この部分には「Glass」と印字されたボタンが存在するが、これはボタンではなく、骨伝導スピーカーである。音声信号が機械的振動に変換され、この突起を通じて耳に振動が伝えられる。
骨伝導なので周囲には音が漏れにくいが、完全に聞こえないわけではなく、静かな空間では4~5m離れていても聞き取ることができる。
ネットワーク接続
インターネットにアクセスする場合は、Wi-Fi(802.11b/g)に直接接続するか、スマートフォンのネットワーク接続を使ってアクセスすることもできる。後者の場合、Android端末もしくはiOS端末に「MyGlass」と呼ばれるGlass専用の管理アプリをインストールして、BluetoothでGlassとペアリングする必要がある。テザリング相当の機能がテザリング無しで使えるので、非常に便利である。
GlassはBLE(Bluetooth Low Energy)チップも搭載していると言われているが、現時点でGlassに搭載されているAndroid OS 4.0.4は、BLEをサポートしていない。将来的なOSアップデートで利用できるようになると思われる。
ストレージ
16GBytesのフラッシュメモリを搭載しており、うち12GBytesがGlasswareから読み書きできる。
センサー
小さな見掛けによらず、Glassには以下のようにさまざまなセンサーが搭載されている。もちろん全てGlasswareからも利用可能だ。
センサー名 | 説明 |
---|---|
Invensense MPL Accelerometer | 加速度センサー |
Invensense MPL Magnetic Field | 磁気センサー |
Invensense MPL Orientation | 方向センサー |
Invensense MPL Gyroscope | ジャイロスコープセンサー |
LiteOn LTR-506ALS Light sensor | 照度センサー |
Invensense MPL Gravity | 重力センサー |
Invensense MPL Linear Acceleration | 線形加速度センサー |
Invensense MPL Rotation Vector | 回転ベクトルセンサー |
また、現時点でGlasswareから直接アクセスできないが、ヒンジ部分の裏側に、赤外線センサーが搭載されている(図5)。これはGlassの着脱時に自動的にディスプレイをオン/オフするOn-head detectionや、ウィンクの検知に使われている。
Glassにないもの
Glassには3Gチップは組み込まれていないので、単体では通話やSMSは利用できない(Google HangoutsはWi-Fiやインターネットがあれば利用できる)が、スマートフォン上のMyGlassアプリとBluetoothで接続すれば、ヘッドセットとして通話やSMSを利用できる。
また、GPSチップも組み込まれていない。位置情報プロバイダーとしてはWi-Fiネットワークか、通話同様、Bluetooth経由でスマートフォンのGPSとネットワークを利用できる。
Google Glassの機能
タイムライン
Glassで主に使うことになる、一列に並んだカード型のUIを「タイムライン」と呼ぶ。「ok glass」が表示されるHomeカード(=図6の中央)を中心にして、右が過去の情報、左が現在または未来の情報という構成になっている。タッチパッドを左右にスワイプして、カード間を移動できる。
Card
タイムラインのカードは、Glasswareによって挿入・更新される。例えば上の図6の例では、Homeの右には、Cameraアプリで撮った写真とSMSアプリの通知が、左にはGoogle Nowの天気予報カードが表示されている。新しく写真を撮ったり、メッセージを受信したりすると、新たなカードがHomeのすぐ右側に追加されていく。古い情報は右に押し出されていき、一週間たったカードは削除される。
Home左側のカードは、現在・未来の情報なので、基本的にはそのまま残り続ける。図6の例では、Homeの左側には常にGoogle Nowのカードがあり、時間や場所によって絶えず更新される。
Menu Items
カードには、ユーザーがタップした際に選択できるアクションが指定されている。例としてTwitterアプリのフローを見てみよう。
タイムライン上のTwitterカードをタップすると、まずReplyのメニューが表示され、右にスワイプするとRetweet/Favoriteのメニューと切り替わっていく。各メニューをタップした際の動作も、Glasswareによって指定されている。例えばReplyのメニューをタップすると、音声認識の画面が立ち上がり、認識されたテキストがReplyとしてTwitterに投稿される仕組みだ。
音声コマンド
Glassを立ち上げるとまず表示されるのが「ok glass」が表示されるHomeカードである。この画面が表示された状態で「ok glass」と言うと、音声コマンドの候補がスクリーンに表示される(図8)。続けて音声コマンドを発することで、コマンドに対応するGlasswareを立ち上げることができる。例えば「ok glass, take a picture」と言うと、カメラアプリが立ち上がり、自動的に写真を取ってくれる。「ok glass, get direction to McDonald」と言うと、Google Mapsの検索が行われ、近くのマクドナルドまでのナビが開始される。このように、いくつかのGlasswareは音声コマンドを使って、ハンズフリーで操作できる。
音声コマンドは最も一般的なGlasswareの起動方法である。Glassware開発者は、後述するGDKを使って対応する音声コマンドを定義できる。公式Glasswareとして申請する場合は、プリセットの音声コマンドを使うか、グーグルに事前に承認してもらう必要がある(グーグルがプリセットの音声コマンドに合わせて音声認識をチューニングしているため)。公式ではなく、いわゆる“野良アプリ”として配布する場合は、特に手続きは必要なく、どんなコマンドを定義してもよい。
タッチジェスチャー
Glass右サイドのタッチパッドでは、ジェスチャーを使ってさまざまなアクションを行うことができる。タップで決定、下方向へのスワイプで戻る、前後のスワイプで左右に移動する動作は、全ての画面で共通している。
Glassware開発者はGDKを使ってタッチジェスチャーを検出できる。タップやスワイプなどの基本的なイベントに加えて、タッチされている指の本数や、前後スワイプ時にどれくらいスワイプしたかなどの情報が利用可能だ。
ウィンクとヘッドジェスチャー
Glassならではの操作方法として、ウィンクとヘッドジェスチャーがある。2013年末のファームウェア・アップデートから、ウィンク検知の機能が正式に公開された。この機能を有効にすると、Home画面でウィンクすることで写真を撮ることができる。ウィンク検知のAPIは、まだ公式には発表されていないが、非公式のAPIを使うことでGlasswareから利用することも可能だ。また内部的には、ウィンク以外にもダブル・ブリンク(=素早く2回瞬きすること)検知の機能も含まれていることが確認されている。
また、Glassには「Head wake up」という機能があり、Glassを装着した状態で上を向くと、Glassのスクリーンをオンにできる。この機能と音声コマンドを組み合わせることで、完全なハンズフリーでの操作を実現できる。
Glassware開発環境
Glasswareの開発方法には、Mirror APIとGDK(Glass Development Kit)の2種類がある。いずれか1つを選択してもよいし、両方を組み合わせてもよい。
Mirror APIは、GlassとやりとりをするためのWebベースのREST APIだ。このAPIを叩くことで、タイムラインにカードを挿入したり、情報を更新したりできる。Mirror APIを利用するには、OAuth 2.0でユーザーのGoogleアカウント認証を行う必要があるため、Webアプリケーションでの利用が前提と考えてよいだろう。できることは限られており、ニュースの配信や写真の共有など簡易的なGlassware作成に向いている。
GDKはGlass上のネイティブアプリケーションを開発するためのSDKだ。Android SDKを拡張し、タッチジェスチャーやカードUI、音声コマンドなどのGlass独自の機能を追加したもので、ハードウェアがサポートする限り、Android SDKの機能のほとんどを利用できる。カメラやセンサーを利用する場合や、リッチなユーザーインタラクションを必要とする場合などはGDKを使うことになるだろう。残念なことに、この記事執筆時点でGDKのエミュレーターは公開されていないため、GDKのGlass独自APIを利用して開発する場合は、どうしてもGlassの実機が必要になる。
Mirror APIとGDKの違いを、表2にまとめた。
Mirror API | GDK | |
---|---|---|
アプリケーションの形態 | Webアプリケーション | ネイティブアプリケーション |
開発言語 | PHP、Python、Java、RubyなどWebアプリケーションを開発できる言語全て | Java(ただし、Xamarinなどのサードパーティのツールやフレームワークを使えば、Java以外の限度でも開発できる) |
エミュレーター | 個人開発者によって非公式エミュレーターが公開されている | 無し |
できること | 基本的にはタイムラインの操作や通知のみ。ハードウェアへのアクセスや、オフラインで動作するアプリは作成不可 | ハードウェアへのアクセス、オフラインアプリなど、Androidアプリでできることは、ハードウェアがサポートする限りほぼ実装可能 |
Glasswareの配布とインストール
2014年2月2日現在、37の公式Glasswareが配布されており、Webの管理画面か(図9)、スマートフォンのMyGlassアプリを通じてインストールできる。
開発者が自分のアプリケーションを公式Glasswareとして配布するためには、グーグルに専用のフォームを提出して、レビューを受ける必要がある。現時点ではかなりの狭き門であるため、個人開発者の多くは野良アプリとして.apkファイル(=バイナリファイル)を自身のWebサイトなどで配布している。野良アプリの場合、ユーザーはPCで.apkファイルをダウンロードして、USBケーブルでGlassを接続、adb
コマンドでGlassにインストールする必要があり、(特に非開発者への)配布にはみんな、苦労している様子である。
Glassware紹介
Google Glassの可能性を理解するために、すでに公開されているGlasswareをいくつか見てみよう。
Word Lens
Glassで見たものをそのまま翻訳できるGlasswareだ。グーグルがGDKを発表した際にデモとして紹介され、公式Glasswareとして配布されている。残念ながら日本語にはまだ対応していないが、「ドラえもん」の世界をほうふつとさせる、非常に未来を感じるGlasswareである。デモの動画もぜひ見てほしい。
Mini Games
グーグルは5つのミニゲームを公式サンプルとして配布している。顔の傾きでバランスを取る「Balance」や、顔の方向で照準を合わせ、音声認識で弾を撃つ「Clay Shooter」など、どれもGlassの特性を生かしたものとなっている。ソースコードは公開されていないが、公式ページによると、実装にはBox2DやAndEngineが使われているとのこと。
Name Tag
いわゆる「顔認識」を実現する非公式のGlasswareである。Glassのカメラで顔を検出し、LinkedInやFacebook、犯罪者データなどのデータベースからマッチするデータを探してくれる。デモ画像以外での認識精度はまだまだで、実験レベルではあるが、とても面白く、かつ挑戦的だ。なおグーグルは、プライバシーへの配慮から顔認識を行うGlasswareを認めておらず、今後も公式に配布されることはないだろう。
Race Yourself
今年の1月にプロモーションビデオが公開され、大きく話題を呼んだ。AR(Augmented Reality: 拡張現実)でランニングを楽しくするGlasswareで、過去の自分の残像をGlassに映すことで自分自身と競ったり、走っている風景にゾンビを映したりできる。まだ開発中なので、実際にはどこまで実現されるか分からないが、コンセプトは非常に面白いと思うので今後に期待したい。
まとめと次回
Google Glassの機能や特徴について解説し、代表的なGlasswareを紹介した。読者のほとんどはGlassを持っていないと思うが、そういった方たちにも「Glassで何ができるのか」「Glassでどんなアプリが作れるのか」が少しでも伝われば幸いだ。
次回はGDKにフォーカスして、APIの使用方法や実際のGlassware作成方法などを、サンプルコードを交えながら解説する。
堀川 隆弘 (ほりかわ たかひろ)
東京大学理学部数学科卒業。大手SIer・モバイルコンテンツ会社勤務を経て2012年に渡米。現在は、Yahoo IncでAndroid向けのモバイルSDK開発を担当。
2008年に個人で開発・公開した携帯シミュレーターFireMobileSimulatorは、日本全国のモバイルサービス会社で広く使用される。
日本国内でAndroidが発売された当初よりAndroidアプリ開発に没頭し、コンピュータービジョンやAR/VRなどの技術と組み合わせたアプリ開発を得意としている。
- ブログ:遥かへのスピードランナー
- Twitter: @thorikawa
※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
1. 【現在、表示中】≫ Google Glassアプリケーション開発の基礎知識
Glassware(=Glassアプリ)開発を始めるなら、日本上陸前の今がチャンス。米国シリコンバレー在住の筆者が、現地ならではの視点でGlassware開発を解説する連載スタート。
2. GDKで開発できるGoogle Glassアプリの機能とは?
GDKを使うとGoogle Glassの機能をフルに活用したアプリを開発できる。3種類のUI(Static Card/Live Card/Immersion)/タッチジェスチャー/音声認識/位置情報/センサー/カメラなど、GDKの全体像を、コードを示しながら解説する。
3. 初めてのGoogle Glassアプリ開発(GDK編)
いよいよGlass開発を実践。GDKの開発環境の構築手順と、Glassware(=Glassアプリ)の作成/実行方法を説明。また、サンプルアプリのソースコードを読み解きながら、よりGlassらしいアプリの実装方法について説明する。
4. Google Glassで動くARアプリケーションの実装
Google Glassの「眼鏡型」という特性を生かしたAR(Augmented Reality: 拡張現実)アプリの開発を、サンプルソースを交えながら解説。