GoogleGlassの視線(カメラプレビュー)をiPad でリアルタイムに共有して、かつ、指示を送ってみる その一

Glassを身につけている人の視線(カメラプレビュー)をリアルタイムに共有できたらとても便利と思いませんか?

更にお互いに何かのアクションをやりとりできたらどんなに素敵でしょう。さまざまな仕事やエンターテイメントに応用できるはずです。

ということで、Glass の視線をiPadで共有し、ついでに、iPadからGlassに対して指示を送るサンプルを作ってみました。「ここを見て!」という指示が飛ぶようにします。

アプリの流れは以下のようになります。

  1. GlassからiPadにカメラプレビューを送信し続ける。
  2. iPadではGlassから送られて来たイメージを表示する。
  3. iPadで表示されているイメージをタップすると、Glassにタップした座標を送信する。
  4. GlassではiPadから送られて来た座標に円を描画する。

先に言っておくと、今回はtimeline + Cardの仕組みは使いません。

Activityを使ってメインコンテンツの描画を行います。

何故かと言うと、Card 内の SurfaceView にはアクセスができない為、カメラビューを Card の SurfaceView にレンダリングするところまではできますが、その上に何か独自の描画を行う事が困難だからです。

このアプリはバックグラウンドで実行する処理がいくつかあり、又ネットワークの知識も必要である為、ある程度の開発スキルが要求されます。その為、全てを解説するのは困難であり、ある程度省略しながら書きます。

まずはアプリを作成する上で必要な要素を部品毎に分けて説明します。

重要な部品として以下が挙げられます。

  • Cardではなく、Activityを使ってGlassアプリを構築する
  • カメラプレビューを取得し描画する
  • 描画したカメラプレビューの上に円を描画する
  • カメライメージをiPadへ送信する
  • iPadから座標を受信し、座標に円を描く

尚、Glassの解説に的を絞りたいのでiPad側のコードについてはここでは解説しません。

Activityを使ってアプリを構築する

これに関して以前書きました。
http://d.hatena.ne.jp/bs-android/20140128/1390874828

カメラプレビューを取得し描画する

Androidと同じくCameraクラスを使って実現することができます。
注意すべき点としては、カメラパラメータ設定時のFpsRangeとSizeの設定値です。Glassは今のところ一機種しか無いので、以下のような設定で良いでしょう。

Camera.Parameters params = mCamera.getParameters();
params.setPreviewFpsRange(30000, 30000);
params.setPreviewSize(640,360);

カメラプレビューの上に円を描画する

とりあえず、SurfaceViewを重ね合わせて実現するとします。
カメラプレビューの上に円を描画する為のSurfaceViewを重ねて描画します。

例:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true" >

	<SurfaceView android:id="@+id/CameraImageSurfaceView"
       android:layout_width="match_parent" 
       android:layout_height="match_parent" />
    	
    <SurfaceView android:id="@+id/ShapeSurfaceView"
       android:layout_width="match_parent" 
       android:layout_height="match_parent" />
    
</FrameLayout>

さて、

  • カメライメージをiPadへ送信する
  • iPadから座標を受信し、座標に円を描く

この二つに関しては説明が長くなりそうなので、次回に続きます。