Leap Motion v2 のセットアップ

Leap Motion SDK のバージョン 2 系を .NET 開発で利用するためのセットアップの方法について記述します。
(以前に Leap Motion のセットアップを書きましたが、その改訂版です。)

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

 

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

Setup Your Leap Motion Controller でドライバーをダウンロードしてインストールします。

最新版以外のバージョンを指定してインストールするには、
V2 Desktop | Leap Motion Developers で Leap Motion SDK (ZIP) をダウンロードします。
ダウンロードするには、アカウントの登録が必要です。
この ZIP ファイルにはドライバーのインストーラーが含まれているので、それを実行します。

なお v2 では、Leap Motion コントロール パネルの [トラッキング] タブで
[道具の追跡] が既定でオフになっているようです。
指以外のツールを使えるようにするには、これをオンに設定します。

 

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

V2 Desktop | Leap Motion Developers で、
現在の最新版である [Leap Motion SDK v2.3.1.31549] (ZIP) をダウンロードします。
ダウンロードするには、アカウントの登録が必要です。
この ZIP ファイルを任意の場所に展開します。
中にドライバーのインストーラーが含まれているので、まずそれを実行します。

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

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

が必要になります。

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

  1. プロジェクトの参照に LeapCSharp.NET4.0.dll を追加する。
  2. プロジェクトのプロパティを開いて、
    [ビルド イベント] – [ビルド後イベントのコマンド ライン] に次のようなコマンドを設定する。
    (DLL のパスを指定します。環境によって変わるので注意してください。)

copy "$(ProjectDir)..\..\LeapSDK\lib\x86\Leap.dll" "$(TargetDir)"
copy "$(ProjectDir)..\..\LeapSDK\lib\x86\LeapCSharp.dll" "$(TargetDir)"

ビルド イベント

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

出力ディレクトリ

 

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

 

バージョン情報
Leap Motion SDK 2.3.1
Visual Studio 2015

参照
Setup Your Leap Motion Controller
V2 Desktop | Leap Motion Developers

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

Bellona.Analysis でクラスタリング

以前にクラスタリングを実装する (C#) を投稿しましたが、
クラスタリングの機能をライブラリ化して Bellona.Analysis (GitHub) を作成しました。
NuGet にも同じ名前で登録してあります。

基本となるアルゴリズムは k 平均法 (k-means 法) です。
しかし通常の k 平均法では、

  • 生成されるクラスターの数をあらかじめ指定しなければならない
  • 初期クラスターの重心をランダムで決定するため、再現性がない
    • 偏りがあって納得感のない結果になることもある

という問題点がありました。
そこでこのライブラリでは、クラスター数をあらかじめ指定する通常の方法に加えて、
クラスター数が自動で決定される方法も用意しました。

クラスター数を自動で決定するために、各クラスター内において値のばらつき具合を判定して調整します。
すなわち、ある偏差値を閾値として、それを超える値がクラスター内に存在する場合はクラスターを分割します。
これにより、クラスターとして納得感のない状態を回避します。
また、クラスター数が 1 の状態から開始してクラスターを分割していくため、自然にどこかで収束し、
同じデータを使えば同じ結果が得られます。

基本的な使い方は次の通りです。

using System;
using System.Drawing;
using Bellona.Analysis.Clustering;
namespace ClusteringConsole
{
class Program
{
static void Main(string[] args)
{
// 色のデータを用意します (実際にはもっと多く)。
var colors = new[] { Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue, Color.Indigo, Color.Violet };
// ClusteringModel.CreateAuto メソッドでモデルを初期化します。
// ラムダ式で、特徴量を表すベクトルを指定します。
// Train メソッドで学習させます。
var model = ClusteringModel.CreateAuto<Color>(c => new double[] { c.R, c.G, c.B })
.Train(colors);
// 学習結果のモデルから、クラスターにアクセスします。
var cluster0 = model.Clusters[0];
// 各クラスターには 0 から始まる ID が付けられます。
Console.WriteLine(cluster0.Id);
// クラスターに含まれる要素を列挙します。
foreach (var record in cluster0.Records)
Console.WriteLine(record.Element.Name);
// 別の色をクラスターに割り当てます (この場合、学習はしません)。
var assignedCluster = model.Assign(Color.Gold);
}
}
}
view raw Program.cs hosted with ❤ by GitHub

 

Train メソッドには、オプション引数として
最大クラスター数 (maxClustersNumber) および最大偏差値 (maxStandardScore) を指定できます。

maxStandardScore の既定値を 1.645 としています。これは、正規分布において 90% 以内を意味します。
データの性質に応じて、この maxStandardScore をチューニングするとよいでしょう。
(maxStandardScore の単位は標準偏差 σ です。偏差値 50, 60, 70 はそれぞれ 0, σ, 2σ に対応します。)

// 最大クラスター数および最大偏差値を指定して学習させます。
// 1.5σ は偏差値 65 を意味します。
var model = ClusteringModel.CreateAuto<Color>(c => new double[] { c.R, c.G, c.B })
.Train(colors, 20, 1.5);
view raw Program.cs hosted with ❤ by GitHub

 

なお、クラスター数が 1 の状態から開始してクラスターを分割していくため、処理時間はかなりかかります。
したがってデータ数が大きい場合は、まずクラスター数が固定されたモデルで学習させ、
次に自動モードに変換して再学習するとよいでしょう。

// クラスター数を固定するには、ClusteringModel.CreateFromNumber メソッドでモデルを初期化します。
var fixedModel = ClusteringModel.CreateFromNumber<Color>(c => new double[] { c.R, c.G, c.B }, 10)
.Train(colors);
// ClusteringModel オブジェクトを AutoClusteringModel オブジェクトに変換します。
var autoModel = fixedModel.ToAutoModel()
.Train(new Color[0]);
view raw Program.cs hosted with ❤ by GitHub

 

サンプル

Bellona.Analysis を利用したサンプルのソースコードは ClusteringSample にあります。

System.Drawing.Color 構造体に含まれる色:

日本の都道府県庁所在地の緯度・経度:

 

バージョン情報
.NET Framework 4.5