ダウンロードはこちら
 

aeroTAP 技術仕様

ここでは、aeroTAPをより実践的な環境で利用するためのコンテンツ/アプリケーション作成者のための技術情報を提供します。
その他、技術的な質問や要望はサポートまでお知らせください。

ステレオカメラの設定に関する測定データ

設置方法に関する注意

左右のカメラが接続され、 aeroTAP を起動すると、 [ ようこそ ] タブのカメラ画像右下の [ > ] ボタンをクリックして、左右のカメラの映像を切り替えてカメラの向きを確認します。
画面に映っている画像が メインカメラ の画像です。
注意 : メインカメラは、 aeroTAP を起動する毎に変わります。毎回確認してください。

  • 左右のカメラの撮影範囲を合わせる
    [ > ] ボタンをクリックして、左右の画像を比較し、ほぼ同じ範囲が映っていることを確認してください。ステレオカメラ設定では、 aeroTAP は両方のカメラに映っている範囲のみに反応します。
    例えば、メインカメラのみに映っている領域での操作には反応しません。
  • 焦点の設定
    メインカメラを表示しながら、操作位置で指先を動かします。この時、カメラ画像上に青い矩形が反応して表示されます。青色の矩形は、メインカメラの認識、赤色の矩形はサブカメラの認識したポイントです。
    [ 焦点設定 ] ボタンをクリックすると、現在の操作位置 ( 指先位置 ) を焦点として設定することができます。 焦点を変更するには、 [ 焦点リセット ] ボタンをクリックします。
  • 検知範囲の設定
    検知距離バーを移動することで検知範囲を設定することができます。検知範囲とは、設定した焦点からのカメラに向かって前後幅で検出する範囲です。
    この値は、相対値であるため、カメラ間の距離や焦点位置により実際の距離は変わってきます。
    例えば、カメラをほぼつけた状態 (5cm) で 0.5m の位置を焦点として設定すると、デフォルトでは、だいたい焦点位置を中心に前後 25cm が検知範囲になるはずです。
    しかし、同じカメラ位置で、焦点を 2m まで遠ざけると検知範囲はほとんど無限になります。この場合には、カメラ間の距離を離す必要があります。
    本ドキュメントでは、このカメラ間の距離と焦点位置と検知範囲の関係の測定データを紹介します。これを元に適切なカメラの設置方法と操作位置の決定を行ってください。

続きは、こちらaeroTAP-StereoCam.pdf

インターラクティブ Processing コンテンツとaeroTAP

バージョン 2.50以降、aeroTAPはProcessingコンテンツを動かすことができるようになりました。

通常、Processingで記述されたインターラクティブコンテンツは、マウス位置、クリックおよびキーボードを利用してインターラクティブ なコンテンツにプログラムしています。

aeroTAPでは、下記の種類のインターラクティブインターフェースを提供します。

1. 画像上の動きをマウスポインタに直接に変換

対応方法: Processingスクリプトの名前を aeroTAPmode1SampleなどのようにaeroTAPmode1で始まる名前に変更し、スクリプトを実行するとaeroTAPは、入力カメラ内の動きをマウス位置に変換してProcessingスクリプトに送ります。

aeroTAPmode1 スクリプト例のダウンロード

2. マウスの移動とクリックをProcessingで利用する

対応方法: Processingスクリプトの名前をaeroTAPSoftなどのようにaeroTAPで始まる名前に変更し、スクリプトを実行するとaeroTAPは、ボタンタップ動作をマウス移動とクリックをProcessingスクリプトに送ります。

aeroTAPSoftBody スクリプト例のダウンロード

aeroTAP APIとサンプルプログラム

aeroTAP for Windows バージョン 2.50以降、外部アプリケーションがAPIを介してaeroTAPのイベントを検出することができます。

Sample.exe実行例 ( #フレーム番号, アクション, x: x座標、y:座標、z:座標 の値を表示しています)

aeroTAP APIを介して、下記のアクション イベントおよび座標位置(x、y、z)を取得することができます。*z座標の値はステレオカメラ実行時のみ

acrButtonは、最大4点の座標を返します。

enum aeroAction // aeroTAP action
{
actButton = 1,
actCursorMove,
actClick,
actDClick,
actGestureLeft,
actGestureRight,
actGestureBottomLeft,
actGestureBottomRight,
actGestureZoomIn,
actGestureZoomOut,
actGestureTurnLeft,
actGestureTurnRight,
actGestureFlipLeft,
actGestureFlipRight,
actBlackout,
actCancel
};

補足: actGestureZoomIn,actGestureZoomOut,actGestureTurnLeft,actGestureTurnRightは現時点で実装されていません。

概要
aeroTAP APIを利用するアプリケーションは、aeroTAP DLL にイベント コールバックを登録することでaeroTAPのイベント情報を取得することができます。

重要: 現在のバージョンでは登録できるアプリケーション数は1つに限られています。複数のアプリケーションを同時に登録することはできません。

プログラム例:
プロジェクトソースコード( V Studio 2005, VC++) ダウンロード 実行プログラムダウンロード

aeroTAPU APIアドレスの取得

typedef BOOL (__stdcall *aeroTAPCallbackInit)(HWND hWnd,UINT nMsg);
typedef void (__stdcall *aeroTAPCallbackTerm)();

if ( !g_aeroTAPCallbackInit )
{
HMODULE hUser32 = GetModuleHandle(_T("berIdle.DLL"));
if ( !hUser32 )
{
AfxMessageBox(_T("Failed to load berIdle.DLL"));
return;
}

g_aeroTAPCallbackInit = (aeroTAPCallbackInit)
GetProcAddress(hUser32, "aeroTAPCallbackInit");
g_aeroTAPCallbackTerm = (aeroTAPCallbackTerm)
GetProcAddress(hUser32, "aeroTAPCallbackTerm");
}

アプリケーションコールバックエントリの登録

if ( g_aeroTAPCallbackInit )
{
g_aeroTAPCallbackInit(m_hWnd,WM_AEROTAP);
}

アプリケーションコールバックエントリの解除


g_aeroTAPCallbackTerm();

コールバックエントリ

/////////////////////////////////////////////////////////////////////////////
//
//
// OnAeroTAPEvent(WPARAM wp, LPARAM lp)
// wp: Frame No. << 16 + ( Action No. + Distance Value<<8 )
// lp: cursor position ( x + y<<16 )
//
// This is call back entry from aeroTAP DLL
//
/////////////////////////////////////////////////////////////////////////////
LRESULT CSampleDlg::OnAeroTAPEvent(WPARAM wp, LPARAM lp)
{
CString sTmp;
int nAct= (int)(wp &0xFF);
char nDistance= (char)(wp >> 8 & 0xFF);
int nFrame= (int)(wp >> 16);
sTmp.Format(_T("#%06d %s(%d) x:%d,y:%d, z:%d"), nFrame, aeroTAPActionString( nAct ) ,nAct, (int)(lp & 0xFFFF),(int)(lp >>16),nDistance );
CListBox *pList= (CListBox*)GetDlgItem(IDC_LIST_EVENT);
pList->InsertString(0,sTmp);
if ( pList->GetCount()> 50 )
pList->DeleteString( pList->GetCount()-1 );
return 0L;
}