読者です 読者をやめる 読者になる 読者になる

Natural Software

KinectなどのDepthセンサーを中心に活動しています

「Intel Developer Forum 2015」でのRealSense周りまとめ

「Intel Developer Forum 2015」でRealSense周りでいろいろ発表があったので、まとめておきます。

ほかにもあれば教えてください。

 

「Google Project Tango」に「Intel RealSense」を提供

一番大きな話題がこれでしょうか。Googleが進めているProject TangoのセンサーにRealSenseを提供とのことです。

Project Tangoはタブレット内蔵型の空間認識センサーとして進められていました。少し前にタブレットがセールになっていたので、新バージョンがでるのでは?という話もありましたが、RealSense内蔵になったようです。

詳細は分かりませんが、用途的にはR200が内蔵でしょうか。

japan.zdnet.com

 

Razerが「RealSense」対応カメラの開発を表明

Razer社が「RealSense」対応カメラの開発を表明しました。こちらは用途と見た目からF200と思われます。

F200は内蔵が前提で外付けについては、特にアナウンスがありませんでした。Razer社のセンサーが発売されれば外付けでF200が使えることになり、用途が広がりますね。

http://www.4gamer.net/games/023/G002318/20150819007/TN/002.jpg

 

http://www.4gamer.net/games/023/G002318/20150819007/」より引用

www.4gamer.net

 

 

RealSenseのMac OS、Linux、ROS対応の表明

RealSense(SDK)は現在Windowsのみの対応ですが、Mac OS、Linux、ROSにも対応する予定があるとのことです。

LinuxやROSだとロボット分野との連携が加速します。現在は選択し自体がないため、XtionとOpenNIを使っている方も多いかと思います。

スペック的にはR200がAtom CPUにも対応しているので、対応すればXtionに代わる選択肢になりそうです。

itpro.nikkeibp.co.jp

 

ほかに見つけた記事

www.itmedia.co.jp

gigazine.net

www.simply.reviews

RealSense全般について

www.naturalsoftware.jp

 

 

C#でベクトル演算をする

C#

KinectやRealSenseを使っているとベクトルや行列、クォータニオンを使ったコードを書くことが増えます。

Unityを使っていると、Unityが面倒みてくれるのでよいのですが、WPFなどの環境で使うとベクトル演算ができるクラスがありませんでした(Leap Motion SDKは独自でベクトル演算クラスを用意してくれています)。

探していたところ、NuGetに「System.Numerics.Vectors」というのがあるそうなので入れたみたら、ほしいものが一通り入っているようです。

d.hatena.ne.jp

サンプル

試しに、Kinectで両手の間の距離を計算するサンプルを作ってみます。 最新のv4.1.0では .NET Framework 4.6が必要なので、本サンプルはVisual Studio 2015で作成しています。

f:id:kaorun55:20150818155046p:plain

WPFアプリを作成し、NuGetから「System.Numerics.Vectors」をインストールします。またKinect SDKもNuGetから取得できるので合わせてインストールしておきます。

f:id:kaorun55:20150818155551p:plain

f:id:kaorun55:20150818155554p:plain

Bodyを処理するところで、右手と左手を取得します。つぎにPosition(CameraSpacePointクラス)をVector3クラスに変換してVector3.Distance()で距離を計算します。 変換については、拡張メソッドを作っておくとよさそうです。

//  右手と左手の距離を表示する
var right = body.Joints[JointType.HandRight];
var left = body.Joints[JointType.HandLeft];
if ( (right.TrackingState == TrackingState.Tracked) &&
     (left.TrackingState == TrackingState.Tracked) ) {
    var rightPos = new Vector3( right.Position.X,
                                right.Position.Y,
                                right.Position.Z );

    var leftPos = new Vector3( left.Position.X,
                                left.Position.Y,
                                left.Position.Z );

    // カメラ座標系の単位がmなので、cmに変換する
    var distance = Vector3.Distance( rightPos, leftPos ) * 100;
    TextMessage.Text = distance.ToString();
}

サンプルコード

CameraSpacePointからVector3に変換する拡張メソッド

using System.Numerics;
using Microsoft.Kinect;

namespace KinectVectorSample
{
    public static class CameraSpacePointExtensions
    {
        public static Vector3 ToVector3( this CameraSpacePoint point )
        {
            return new Vector3( point.X, point.Y, point.Z );
        }
    }
}

右手と左手の距離を表示する(拡張メソッド)

var right = body.Joints[JointType.HandRight];
var left = body.Joints[JointType.HandLeft];
if ( (right.TrackingState == TrackingState.Tracked) &&
        (left.TrackingState == TrackingState.Tracked) ) {

    // カメラ座標系の単位がmなので、cmに変換する
    var distance = Vector3.Distance( 
        right.Position.ToVector3(),
        left.Position.ToVector3() )
        * 100;
    TextMessage.Text = distance.ToString();
}

右腕の角度を求める

var hand = body.Joints[JointType.HandRight];
var elbow = body.Joints[JointType.ElbowRight];
var shoulder = body.Joints[JointType.ShoulderRight];

// 内積の定義
// cosθ = ( AとBの内積 ) / (Aの長さ * Bの長さ)
// http://www.sousakuba.com/Programming/gs_two_vector_angle.html
var v1 = hand.Position.ToVector3() - elbow.Position.ToVector3();
var v2 = shoulder.Position.ToVector3() - elbow.Position.ToVector3();

const float Rad2Deg = 180.0f / (float)Math.PI;
var dot = Math.Acos( Vector3.Dot( v1, v2 ) / (v1.Length() * v2.Length()) );
var angle = (float)(dot * Rad2Deg);
TextMessage.Text = angle.ToString();

APIリファレンス

System.Numerics 名前空間 ()

Visual StudioとVisual Studio Onlineの豪華セッションとTDDBCを開催します。

f:id:kaorun55:20150811100022p:plain

最近TFSUG協力の昼セミナーを月一くらいで開催しています。8月と9月は豪華セッションが決まりました。

8/26(水)はTFSUGの面々によるセッションのほかに、日本マイクロソフトにジョインした牛尾さんによる特別セッションが行われます。

9/2(水)はTDDの伝道師である和田さんによるTDDBCが開催されます。

いままでマイクロソフトとは縁遠かったお二人によるセッションですので、ぜひぜひご参加ください!

8/26(水)

TFSUG (Team Foundation Server User Group) 鉄人たちが「本音」で語る Team Foundation Server/Visual Studio Online で実現する今どきの開発プロジェクト管理

9/2(水)

開発効率を高める! 第一人者 和田卓人さんによるテスト駆動開発ブートキャンプ Visual Studio 2015 活用編

Microsoft Kinect v2まとめ

概要

マイクロソフト社が進めている3D Depthセンサー。

Xbox Oneに同梱される形で発売が開始された。少し遅れてWindows用のSDKがリリーされた。

Kinect v2センサー

いままでのKinect for Windowsセンサーという販売はなくなり、「Xbox OneのKinect v2センサー」と「Xbox One Kinect センサー用 Windows PCアダプター」を組み合わせることでWindows PCでの利用が可能になる。性能、ライセンスなどは同じ。PCとの接続はUSB 3.0となっている。

f:id:kaorun55:20150810113312j:plain

www.naturalsoftware.jp

www.naturalsoftware.jp

Kinect for Windows SDK

ダウンロードページ

Kinect for Windows SDK 2.0をダウンロード、インストールしてください。

サポート環境

OS
  • Windows 8
  • Windows 8.1
  • Windows Embedded 8 Standard
開発環境
  • Visual Studio 2012以降
  • .NET Framework 4.5(C#)
  • Unity 4 Pro以降(Unity 5 Personalで動作する)

開発事例

Twinface

www.naturalsoftware.jp

www.naturalsoftware.jp

3D スキャン

www.naturalsoftware.jp

技術デモ

フェイススキャン

www.naturalsoftware.jp

Unity

www.naturalsoftware.jp

www.naturalsoftware.jp

情報源

www.microsoft.com

 

KINECT for Windows SDKプログラミング Kinect for Windows v2センサー対応版

KINECT for Windows SDKプログラミング Kinect for Windows v2センサー対応版

 

 

www.naturalsoftware.jp

www.buildinsider.net

Intel RealSense まとめ

概要

インテル社が進めている3D Depthセンサー。基本的にはPCに内蔵した形での利用を想定。現状でもF200タイプの全面センサー内蔵PCがいくつか発売されている。

www.intel.co.jp

開発の際には外付けの開発キットを購入することでも、RealSenseを利用したアプリケーションを開発できる。

インテル RealSense カメラ(開発キット)

F200

f:id:kaorun55:20150810110621p:plain

R200

f:id:kaorun55:20150810110625p:plain

画像は https://software.intel.com/en-us/articles/intel-realsense-data-ranges より引用

比較

インテル RealSense SDK

ダウンロードページ

持っているカメラのDCM(Depth Camera Manager)、インテル RealSense SDKをダウンロードします。

以前のバージョン

インストール順序

  1. RealSenseカメラをPCに接続する
  2. DCM(Depth Camera Manager)をインストールする
  3. インテル RealSense SDKをインストールする

サポート環境

OS
  • Windows 10
  • Windows 8.1
開発環境
  • Visual Studio 2010以降
  • .NET Framework 4.0(C#)
  • Unity Pro 4.1.0以降(Unity 5 Personalで動作する)
  • Processing 2.1.2以降
  • Java JDK 1.7.0.11以降
  • JavaScript(Internet Explorer 11以降 Microsoft Edge 20以降 Chrome 42以降、 Firefox 37以降)
  • OpenCL 1.2以降(R200のみ)

更新履歴

R4(v6.0) 2015/08/01更新
  • リリースノート
  • 視線検出機能の追加(F200)
  • Enhanced Photography(R200)
  • Windows 10 RTM対応
  • Visual Studio 2015対応
  • ブラウザサポート(Microsoft Edge含む)

視線検出

f:id:kaorun55:20150810110401p:plain

特記事項

ニュース

2015/08/24更新

IDFまわりまとめました。

www.naturalsoftware.jp

2015/08/20更新

www.itmedia.co.jp

japan.zdnet.com

www.4gamer.net

 

インテル社主催のソフトウェアコンテスト

Intel® RealSense™ App Challenge 2014

2ND PLACE WINNER!

www.youtube.com

Intel® Perceptual Computing 2013

GRAND PRIZE WINNER!

www.youtube.com

開発事例

順次公開

 

技術デモ

Windows Hello

www.naturalsoftware.jp

3Dスキャン

www.naturalsoftware.jp

Unity

www.naturalsoftware.jp

www.naturalsoftware.jp

www.naturalsoftware.jp

情報源

software.intel.com

 

Intel RealSense SDKセンサープログラミング

Intel RealSense SDKセンサープログラミング

 

 

www.naturalsoftware.jp

www.naturalsoftware.jp

 

Windows 10でKinect for Windows SDK v2.0をストアアプリ形式で動かす

Windows 10になって、ストアアプリがデスクトップで動くようになったので、WPFとの比重を変えていこうかななんて思っています。

Windows 10のストアアプリでKinect SDKを動かす方法について、おおよそわかってきたので備忘録かねて書いておきます。

参考にしたページはこちら

dailydotnettips.com

なお、Windows 10のストアアプリといっても、実際にはWindows 8または8.1の形式です。本当にWindows 10形式(ユニバーサルアプリ)では現状のSDKはビルドできません。これについて、アップデートされることも期待しつつ。

また、ストアの対応もやっていないので、わかりません。3D BuilderやKinect Evolutionはストアにあり、インストールして動作するので、Windows 8または8.1形式でも大丈夫かもしれません(追記:Windows 8.1のストアアプリは動くそうです)。

 

開発環境については、Visual Studio 2013になります。Visual Studio 2015でも開発自体はできますが、依存関係からVisual Studio 2013のインストールは必要です。

環境が整うとこんな感じでSDKのサンプルがWindows 10のアプリとして動作します。

f:id:kaorun55:20150805094040p:plain

OS自体の見た目の変更もあって、WPFアプリとパッと見同じように見えます。内部的には違いますが、見た目でいえばそれほど違いはなくなったように感じます。

f:id:kaorun55:20150805094245p:plain

開発環境

Visual Studio 2013が必要な理由として、Kinect SDKのWinRT版では「Microsoft Visual C++ Runtime Package」(Version=11.0)に依存するためです。

f:id:kaorun55:20150805094508p:plain

SDKブラウザーのサンプルであれば、Visual Studio 2013で開けばそのまま実行できます。Visual Studio 2015の場合は、下記手順が必要になる場合があります。

  • Windows 8.1用に再ターゲッティング
  • 参照から「WindowsPreview.Kinect」および「Microsoft Visual C++ Runtime Package」を外す
  • 再度WindowsPreview.Kinect」を参照する

Kinectを使ったアプリケーションの場合、Webカメラとマイクの権限が必要になるので、Package.appxmanifestで該当項目をチェックします。

f:id:kaorun55:20150805094749p:plain

プライバシー

これらの権限について、OSレベルでの承認については、「設定」の「プライバシー」から変更します。

f:id:kaorun55:20150805094949p:plain

開くと「カメラ」や「マイク」という項目があり、ここから使用可否を設定できます。

f:id:kaorun55:20150805094958p:plain

f:id:kaorun55:20150805095011p:plain

 

Sketchfabに3Dモデルをアップロードする

C#

前の記事でもちらっと書いた通り、3Dモデルをアップロードする機能を作りました。

といっても、SketchfabのAPIを簡単に使えるようにしたというくらいですが。

sketchfab.com

APIやサンプルが公開されているのですが、コピペで使えなかったので、整形しました。

sketchfab.com

プランについては、無償版で1モデル50MBまでの制限はありますが、今のところ数に制限はないので、使いやすそうです(頻繁にアップロードしてると、Proにしたら?とメールがくるくらいです)。

sketchfab.com

コード

こちらにコードを上げていて、自分のアカウントのAPIトークンを設定すると、3Dモデルをアップロードできます。

github.com

f:id:kaorun55:20150803115205p:plain

 

コードとしてはこんな感じで、ZIPファイルをアップロードしてURLが返ってくる感じです。

var url = SketchfabUploader.Upload( @"*** API token ***", zip, title );

ZIPファイルの作成については、System.IO.Compressionアセンブリを追加して、ZipFileクラスで作成しています。この辺りはまとめてテストアプリに入っています。

APIトークンの取得

My Settingsの「PASSWORD & API」から「API token」をコピーします。

f:id:kaorun55:20150803115231p:plain