aeroTAP evo API は、aeroTAP evo (タッチレスインターフェイス)を実行しながら手のひらトラッキングの状態を取得するためのAPIです。
カーソルの表示はアクションをaeroTAP evo側ではなく、アプリケーション側で処理する際に利用できます。
設定 |
解説 |
[ようこそ] タブ ガイダンス表示 OFF |
aeroTAP のガイダンス表示機能をOFFにします。 APIを使って、人物の有無を判断しながら同様なガイダンスをアプリ側で表示することが可能です。 |
[詳細設定]-タブ | シンプルな操作のためにマルチタッチ機能をオフにします。 |
[詳細設定]タブ クリックアクション なし |
クリックなどのアクションは、アプリ側で行うためにオフにします。 |
[全般]タブ プレビュー表示 なし |
プレビュー表示をしない |
カラー画像、深度画像、aeroTAP evoステータスデータの構造体
下記の構造体を準備します。 TAPINFO tapinfoには、aeroTAP evoでの手のひらトラッキング情報が得られます。
aeroTAP evo 手のひらトラッキング ステータスデータ定義aeroTAP evo ステータス情報の取得 typedef BOOL(__cdecl *AERO_GetAeroState)(void *lpszBuf); |
現在のaeroTAP evo状態を構造体 AEROSTATに取得します。 引数: AEROSTATE構造体のポインタを使用します。 戻り値: 成功 TRUE , 失敗 FALSE bActive[2] ポイントが有効(TRUE)/無効(FALSE) bObjectType[2] ポイントの種類 0手のひら、1 クリック(握る) POINT3i pos[2] 現在の画面解像度での座標系でのポイント位置(X,Y,Z) bPerson 人物の有(TRUE)/無(FALSE) posG 人物の重心点(X,Y,Z) *座標は 320x240 座標系(左上がX=0,Y=0) *aeroTAP evoは、最大2点を追跡します。 |
int nCamHeadInclined = 10; // Degree int nCamHeadPositionY= 200; // cm POINT3F posHead =aeroState.posHead; //頭部3D位置の取得 double inclinedR = nCamHeadInclined*M_PI/180; // 身長 cm posHead.y = nCamHeadPositionY - posHead.z*sin(inclinedR)/10 - posHead.y*cos(inclinedR) /10; // カメラからの距離 cm posHead.z = posHead.z*cos(inclinedR) / 10; |
AEROSTATE aeroState;
aeroState.nSize = sizeof(AEROSTATE);
if (g_pAERO_GetAeroState && g_pAERO_GetAeroState(&aeroState))
{
CString sTmp;
// Operator info
sTmp.Format(_T("%s"), aeroState.bPerson ? _T("Exist") : _T("N/A"));
GetDlgItem(IDC_STATIC_OPERATOR)->SetWindowTextW(sTmp);
if (aeroState.bPerson)
sTmp.Format(_T("x: %d , y: %d, z: %d"), (int)aeroState.posG.x, (int)aeroState.posG.y, (int)aeroState.posG.z);
else
sTmp = _T("N/A");
GetDlgItem(IDC_STATIC_OP_POS)->SetWindowTextW(sTmp);
// Palm Tracking info
sTmp.Format(_T("%s"), aeroState.bActive[0] ? _T("Tracking") : _T("N/A"));
GetDlgItem(IDC_STATIC_PALM)->SetWindowTextW(sTmp);
if (aeroState.bActive[0])
sTmp.Format(_T("x: %d , y: %d, z: %d"), (int)aeroState.pos[0].x, (int)aeroState.pos[0].y, (int)aeroState.pos[0].z);
else
sTmp = _T("N/A");
GetDlgItem(IDC_STATIC_PALM_POS)->SetWindowTextW(sTmp);
サンプルコード利用方法:
1. Unityで新しいプロジェクトを作成し、保存
2. 作成されたプロジェクトフォルダーのAssets/Plugins/x86_64に aeroTAP_CAM.dll, eSPDI.dll をコピー
3. Unity ProjectにあるAssets/Plugins/x86_64/aeroCAM_DLLをクリックし、Inspectorを設定 (OS:Windows, CPU:x86_64 )
4. GameObject->3D Object -> Cubeで立方体を作成 (任意のオブジェクト)
5. Inspector の[Add Component] ボタンでNew Script を選択し、aeroTAP として[Create and Add]で作成
6. aeroTAP.cs を編集(下記コードを張り付け)
7. Ctrl+Bでビルド実行
*ここでは、ビルドを確認する。
8.ビルドに問題が無いことを確認したら、aeroTAP evoを起動し、作成したUnity プロジェクトを実行する
*人物の検出、手のひら検出をUnity側で受け取っていることを確認
[aeroTAP.cs]
using System.Collections;