Kinect for Windows v2 のセットアップ

Kinect for Windows v2 のセットアップの方法や注意点について記述します。
開発環境と非開発環境では方法が異なります。
(v1 系については、以前に Kinect for Windows SDK のセットアップに書きました。)

 

■ 開発環境におけるセットアップ

開発環境には、Kinect for Windows SDK 2.0 (約 280 MB) をインストールします。

インストール後の接続確認をするには、「Developer Toolkit Browser」を利用するとよいでしょう。
これには多数のサンプルが含まれています。

環境変数については、Kinect for Windows SDK 2.0 をインストールすると

KINECTSDK20_DIR=C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\

が追加されます。

 

さて、アプリケーションを開発するには、Microsoft.Kinect.dll への参照が必要になります。
Visual Studio の参照マネージャーで、[アセンブリ] – [拡張] からこれを選択できます。

参照マネージャー

ただし、この方法では特定のバージョンに依存することになり、
例えば、今後バージョン 2.1 の SDK にアップグレードした場合、プロジェクトはビルドエラーになってしまいます。
そこで前述の環境変数を利用して、
プロジェクト ファイル (C# なら .csproj) において例えば次のようにアセンブリのパスを指定することもできます。


  <ItemGroup>
    <Reference Include="Microsoft.Kinect">
      <HintPath>$(KINECTSDK20_DIR)Assemblies\Microsoft.Kinect.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    (以下略)


この方法であれば、特定のバージョンに依存せずにビルドすることができます。

 

■ 非開発環境におけるセットアップ

本番用・配布用端末では SDK は不要で、Kinect for Windows Runtime 2.0 (約 90 MB) をインストールします。

なお、Kinect for Windows Runtime は Kinect for Windows SDK にも付属しており、次のパスに存在します。

%KINECTSDK20_DIR%Redist\KinectRuntime-v2.0_1409-Setup.exe

 

バージョン情報
Kinect for Windows v2
Kinect for Windows SDK 2.0
Visual Studio 2013

参照
Kinect for Windows v2 センサー
Kinect for Windows SDK 2.0
Kinect for Windows Runtime 2.0

Kinect for Windows SDK 2.0 (MSDN)
Getting Started (MSDN)
Kinect for Windows SDK のセットアップ (v1 用)

広告
カテゴリー: 周辺機器. タグ: . 1 Comment »

Google Glass の画面を PC に表示する

Google Glass を Windows PC に USB で接続して、画面をリアルタイムで複製して表示する方法を紹介します。
画面表示のためのツールとしては、Android Screen Monitor を利用します。
(Google Glass に限らず、Android であれば表示できます。)

なお、ここでは非開発環境を想定し、なるべく最小限のセットアップにしたいと思います。

 

(1) Java Runtime Environment (JRE) をインストールします。

(2) Android SDK のページで [VIEW ALL DOWNLOADS AND SIZES] を表示し、
     [SDK Tools Only] の android-sdk_r23.0.2-windows.zip をダウンロードして、任意のフォルダーに展開します。

ここでは、C:\android-sdk に展開したと仮定して進めます。

(3) Android SDK Manager を起動し、次のものをインストールします。

  • Android SDK Platform-tools
  • Google USB Driver

なお、企業内環境など、プロキシを利用して通信する場合は、
Android SDK Manager の [Settings] で [HTTP Proxy Server] および [HTTP Proxy Port] を指定しておきます。

(4) Android Screen Monitor (ZIP ファイル) をダウンロードして、任意のフォルダーに展開します。

(5) 展開したフォルダー (asm.jar の存在するフォルダー) で、次の内容の BAT ファイルを作成します。

 

asm.bat


set PATH=%PATH%;C:\android-sdk\tools\
set PATH=%PATH%;C:\android-sdk\platform-tools\

java -jar asm.jar


 

(6) Google Glass 上で [Setting] → [Device Info] と移動し、[Turn on debug] と表示されたらタップします。

タップすると、[Turn off debug] に変わります。

Turn off debug

 

(7) Google Glass を USB ポートに接続します。

初回の接続時に、ドライバーのインストールを試みるはずです。
ドライバーのインストールでエラーが発生した場合、
デバイス マネージャーを起動して Google Glass を探し (「Glass 1」と表示されているはず) 、
[ドライバー ソフトウェアの更新] を実行します。

ドライバーの場所を手動で

C:\android-sdk\extras\google\usb_driver

と指定します。

成功すれば、Android Device として認識されるようになります。

Glass 1のプロパティ

 

(8) Google Glass との接続が成功すると Google Glass 側に通知されるので、次のようにしてアクセス許可を与えます。

  • [Trust this computer?] と表示されたらタップする
  • [Always allow] と表示されたらタップする

 

以上で設定は完了です。

asm.bat を実行して Android Screen Monitor を起動させ、
対象のデバイスを選択すれば Google Glass の画面が表示されます。

Select a Android Device

Android Screen Monitor

 

参照
Android Screen Monitor
Google Glassの簡単なアプリを作る

Leap Motion のセットアップ

Leap Motion Controller のバージョン 1 系を .NET で利用するためのセットアップの方法について記述します。
(なお、v1 系の最終版は v1.2 になると思われます。
v2 系については、改訂版として Leap Motion v2 のセットアップを書きました。)

Leap Motion のサイトから、Software および Developer SDK をダウンロードできます。
開発環境ではこれらの両方が必要ですが、非開発環境では Software (ドライバー) のみをインストールします。

■ Software (ドライバー)

公式には Leap Motion Software と呼ぶようですが、要するにドライバーです。
Developer SDK + Documentation にアクセスして、[v.1.2.2 for Windows] をクリックします。
ダウンロードするには、アカウントの登録が必要です。
このインストーラーを実行して、Software をインストールします。

なお、Setup Your Leap Motion Controller でダウンロードできる Software は、現在ではバージョン 2 系になっています。

■ Developer SDK

Developer SDK + Documentation にアクセスして、[v.1.2.0.10970 for Windows] をクリックします。
ダウンロードするには、アカウントの登録が必要です。
ファイル名は LeapDeveloperKit_release_win_1.2.0+10970.zip で、これを任意の場所に展開するだけです。

Developer SDK を .NET Framework 4.0 以降のアプリケーションで利用するには、

  • LeapDeveloperKit\LeapSDK\lib\LeapCSharp.NET4.0.dll (.NET アセンブリ)
  • LeapDeveloperKit\LeapSDK\lib\x86\Leap.dll (ネイティブ アセンブリ)
  • LeapDeveloperKit\LeapSDK\lib\x86\LeapCSharp.dll (ネイティブ アセンブリ)

が必要になります。

したがって、Visual Studio における手順は以下のようになります。

  1. LeapCSharp.NET4.0.dll をプロジェクトの参照に追加する。
  2. プロジェクトを右クリックして [追加] – [既存の項目] を選択し、
    Leap.dll および LeapCSharp.dll をリンクとして追加する。
  3. Leap.dll および LeapCSharp.dll のプロパティで、
    [出力ディレクトリにコピー] を [新しい場合はコピーする] に設定する。

既存項目の追加

出力ディレクトリにコピー

ビルドしたときに、この 3 つの DLL がコピーされていれば OK です。

出力ディレクトリ

 

(追記) 上記のような設定を自動で実施するための NuGet パッケージを作成しました。

(追記) Leap Motion v1 が自動でアップグレードされないようにするというのを書きました。
v1 を使い続けるにはこの設定が必要です。

 

バージョン情報
Leap Motion Software 1.2.2
Leap Motion Developer SDK 1.2.0
Visual Studio 2013

参照
Setup Your Leap Motion Controller
Leap Motion Developers
V1 Developer SDK + Documentation

カテゴリー: 周辺機器. タグ: , . 2 Comments »

Kinect で背景を除去するツール

Kinect for Windows (v1) を使用して、
カメラの画像から人物の部分を切り抜いて (背景を取り除いて) 表示するためのデスクトップ アプリ Portrait Clip を作成しました。
セットアップ方法、使用方法も Portrait Clip のページに記載してあります。

画像をマウスやタッチで直接ドラッグすれば移動させることができます。
また、画像を右クリックしてウィンドウの枠を表示させ、その枠をドラッグすれば画像を拡大・縮小できます。

オンライン セミナーなど、資料を全画面で表示しつつ人物も同時に表示したい場合に活用できると思います。

Portrait Clip

 

バージョン情報
.NET Framework 4.5
Kinect for Windows Runtime v1.8

参照
Portrait Clip (GitHub)

Kinect for Windows で表情認識

Kinect for Windows Developer Toolkit には、フェイス トラッキングおよび表情認識の機能が含まれています。
今回は、Kinect for Windows で表情認識を利用するための方法について説明します。

フェイス トラッキングを利用するには、以下の DLL が必要になります。

  • Microsoft.Kinect.dll
  • Microsoft.Kinect.Toolkit.FaceTracking.dll
  • FaceTrackData.dll (ネイティブ)
  • FaceTrackLib.dll (ネイティブ)

下の 3 つの DLL は、32 ビット版と 64 ビット版に分かれます。
ちなみに、Microsoft.Kinect.Toolkit.dll はフェイス トラッキングとは直接には関係がありません。

 

■ DLL の作成

さて、なぜか SDK には、ビルド済みの Microsoft.Kinect.Toolkit.FaceTracking.dll が含まれていません。
まずはこの DLL を自分で作成する必要があります。

Microsoft.Kinect.Toolkit.FaceTracking.dll のソースコードを入手するには、
Developer Toolkit Browser を起動し、「Face Tracking Basics-WPF」の [Install] をクリックします。
任意のフォルダーを指定すれば、そこにソースコードがコピーされます。

Developer Toolkit Browser

 

FaceTrackingBasics-WPF.sln を Visual Studio で開き、Release モードでビルドします。
必要となるプラットフォーム (x86, x64) ごとにビルドして DLL を作成します。
(ビルド済みの DLL を Samples-2014/Kinect SDK/v1.8/bin に置きました。)

 

■ プロジェクトの作成と参照の追加

Visual Studio で、任意のプロジェクトを作成します。
既定では [プラットフォーム ターゲット] が Any CPU、[32 ビットの優先] がオンに設定されています。
この設定のままフェイス トラッキングを利用するのであれば、32 ビット用の DLL を参照に追加します。

64 ビットで動作させたい場合は、
[プラットフォーム ターゲット] を x64 に設定するか、[32 ビットの優先] をオフに設定して、
64 ビット用の DLL を参照に追加します。

 

.NET の DLL への参照は、[参照の追加] から 1 つずつ追加してもよいのですが、
なるべく環境変数を利用したいので、プロジェクト ファイル (.csproj) を直接編集します。

次のように、Kinect に関連する部分を ItemGroup に追加します。
ここでは Microsoft.Kinect.Toolkit.dll も含めています。


  <ItemGroup>
    <Reference Include="Microsoft.Kinect">
      <HintPath>$(KINECTSDK10_DIR)Assemblies\Microsoft.Kinect.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Kinect.Toolkit">
      <HintPath>$(KINECT_TOOLKIT_DIR)Assemblies\Microsoft.Kinect.Toolkit.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Kinect.Toolkit.FaceTracking">
      <HintPath>…(DLL のパスを指定してください)…\Microsoft.Kinect.Toolkit.FaceTracking.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" /> 
    (以下略)


 

次に、ネイティブの DLL をビルド時にコピーさせるための設定です。
プロジェクト ファイルの下のほうに、次の ItemGroup を追加します。


  <ItemGroup>
    <Content Include="$(FTSDK_DIR)Redist\x86\FaceTrackData.dll">
      <Link>FaceTrackData.dll</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="$(FTSDK_DIR)Redist\x86\FaceTrackLib.dll">
      <Link>FaceTrackLib.dll</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>


64 ビットの場合は、次のパスを使用します。


  <ItemGroup>
    <Content Include="$(FTSDK_DIR)Redist\amd64\FaceTrackData.dll">
      <Link>FaceTrackData.dll</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="$(FTSDK_DIR)Redist\amd64\FaceTrackLib.dll">
      <Link>FaceTrackLib.dll</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>


 

[プラットフォーム ターゲット] を Any CPU に設定していると、ビルド時に次の警告が出ますが、
実際の動作時のプラットフォームが一致していれば正常に動作します。
とはいえ、[プラットフォーム ターゲット] を x86 または x64 に設定しておくのがよいでしょう。

警告

 

■ 実装について

全体的な実装の方法や顔の各点の 3D 座標を取得する方法については、
上記の「Face Tracking Basics-WPF」のソースコードが参考になります。

表情認識については、次のように、
FaceTrackFrame オブジェクトに対して GetAnimationUnitCoefficients メソッドを呼び出します。


var faceTrackFrame = faceTracker.Track(sensor.ColorStream.Format, colorImage, sensor.DepthStream.Format, depthImage, skeleton);
if (faceTrackFrame.TrackSuccessful)
{
    var animationUnits = faceTrackFrame.GetAnimationUnitCoefficients();
    // 口の開閉状態
    var jawLower = animationUnits[AnimationUnit.JawLower];
}


取得できる表情の種類は、Face Tracking の「Animation Units」の項に書かれています。
ここでは、JawLower (口の開閉状態) の値のみ取得しています。
この値は -1 ~ 1 の間の数値で、1 は開いた状態、0 は閉じた状態を表し、-1 ~ 0 の間の数値が返ってくることもあります。

なお、FaceTrackFrame クラスは IDisposable ですが、
現在のフレームでの処理が終了したからといって Dispose メソッドを呼び出してしまうと、
なぜか以降のフレームでの処理が正常に続かなくなります。

 

作成したサンプル
Samples-2014/KinectSample/FaceTrackingConsole (GitHub)

バージョン情報
Kinect for Windows SDK 1.8

参照
Face Tracking
Microsoft.Kinect.Toolkit.FaceTracking Component
Kinect for Windows SDK のセットアップ

やってみよう!Kinectアプリ開発 – FaceTracking(前編)
やってみよう!Kinectアプリ開発 – FaceTracking(後編)
KinectとC#でFace Trackerを動かす

カテゴリー: 周辺機器. タグ: . Leave a Comment »

Leap Motion で日本語の文字入力・文字認識

Leap Motion を利用して、空中で指やペンで日本語の文字を入力し、同時に手書き文字認識をするプロトタイプを作成しました。
一見、書道アプリですが。
(追記: 2016年12月20日のテレビ東京「ワールドビジネスサテライト」 トレンドたまごの取材を受けました。)

その様子を撮影した動画を投稿しました。
まずはこちらをご覧ください:
Japanese Calligraphy and Handwriting Recognition in the Air

 

以下では、上記の動画について補足していきます。

書道で「鎧武」を書く元ネタはこちら:
【仮面ライダー鎧武】幼稚園児「書き初めで『ガイム』書きたい」書道家「?」の後日談がとっても素敵

鎧武

 

ほとんどの文字を行書で書いていますが、問題なく文字認識されています。
実際には、楷書のほうが認識率は高いと思います。

京都

一部の文字は草書も認識されます。

日本

 

犯人はヤス。
ひらがなとカタカナの例です。

犯人はヤス

 

タイムアタック。

  • 京王八王子: 3"31
  • 四八(仮): 3"44
  • 雪風: 1"93
  • 漣: 1"72
  • 纐纈: 5"75

京王八王子

 

Leap Motion では、指のほかに、ペンなどの棒状のものも使えます。
「龍驤」を書くときには、割り箸を使っています。

龍驤

龍驤

 

三次元空間上で文字を書くには、ユーザー側にも多少の練習が必要になります。
コツは、本当に紙の上で書いていると脳に錯覚させて、普段紙の上で書いているときの動作をすることです。

参照
Japanese Calligraphy and Handwriting Recognition in the Air (Vimeo)
Japanese Calligraphy and Handwriting Recognition in the Air (Youtube)
Text recognition in the air, for Yukikaze and Sazanami.

【仮面ライダー鎧武】幼稚園児「書き初めで『ガイム』書きたい」書道家「?」の後日談がとっても素敵
Vision-Based Handwriting Recognition for Unrestricted Text Input in Mid-Air (PDF)
Ring : Shortcut Everything. by Logbar inc. — Kickstarter
Leap Motion で「つまむ」操作

Leap Motion で「つまむ」操作

昨年末に、Leap Motion Controller を使用して
3D ジェスチャにより画像などの 2D データの集合をブラウズする方法を示すコンセプト動画を投稿しました。

3D Touch and Pinch Gestures

 

空中でスクリーンに平行な平面に触れる操作と、2 本の指で物をつまむ操作を実装しています。
公式 SDK に存在するジェスチャは利用しておらず、判定ロジックを自作しています。
とくに、「つまむ」ジェスチャは公式 SDK にも存在すらしてしないため、
これを実装した動画は現時点で希少です (しかもあるのはなぜか 5 本指のものばかり)。

GUI 部分は WPF (XAML + C#) で実装しており、
独特のヌルヌル感を出すために細やかなチューニングを施しています。
結果的に Windows 8 / Windows Phone の挙動に近くなりました。

なお、この動画は、元日の Leap Motion Developer ML の中で「Highlights & Innovations」の 1 つとして紹介されました。
(YouTube と Vimeo に同じものを投稿しましたが、Vimeo のほうが紹介されました。)
ML の配信は週 1 回なので、たまたま元日に当たったのは運が良かったです。

参照
3D Touch and Pinch Gestures (Vimeo)
3D Touch and Pinch Gestures (YouTube)