スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    第48回「AIR ネイティブ拡張 (ANE) ライブラリ版 KinectFaceTraking を試す(其の一)」の巻

    Kinectセンサーを皮切りにXtionやLeapMotionといった
    「モーションセンサー」の種類も増えて新たな
    インタラクションに注目が集まってきています。

    これらのセンサーを利用したアプリケーション開発を
    行う場合、WindowsやMacなどと言った、
    ネイティブ言語を習得する必要があります。

    Adobe AIRであれば、ネイティブ言語とAIRの連携を、
    可能にするネイティブ拡張(ANE)を利用することで、
    「モーションセンサー」を活用したアプリケーション開発を
    可能にします。

    現在、AIRによるサイネージ&展示コンテンツの
    アプリケーション開発者で、構成されている
    グループがあります。

    グループ名は「ANExNUI」と言います。

    ANExNUI

    このグループは非公開で、知人限定の参加になってます。

    今回は、ANExNUIで提供されている
    「KinectFaceTraking」の紹介と機能(一部)の説明を記載します。


    KinectFaceTrakingとは…

    Kinect for Windowsセンサーを使用して、
    顔の追跡データや顔の輪郭などの100箇所の
    識別点データを取得する為のライブラリです。

    KinectFaceTrakingSample
    こちらの画像では、顔の追跡データをdrawRectで描画しています。
    顔の輪郭などの100箇所の識別点データは、drawCircleで点を描画、
    配列番号も併せて描画しています。


    KinectFaceTrakingSampleRect

    これは、顔を追跡データをdrawRectで描画だけ行っています。
    今回は、上記の顔追跡だけ行う簡単なサンプルアプリを作ります。

    使用した開発ツール:

    Flash Builder 4.6
    AIR SDK version 3.8
    Apache Flex 4.10.0

    FaceTraking構成
    (上記の画像をクリックで拡大画像が表示されます。)

    新規プロジェクトの作成から、
    ActionScriptプロジェクトを選択。

    アプリケーションの種類は、「デスクトップ」とします。

    kinectFaceTaking.aneを入手後、
    ネイティブエクステンションの設定を行います。

    参考:Flash Builder 4.6でネイティブ拡張(Native Extensions)を使ってみよう

    ANEライブラリの入手は、ビバマンボ様にお問い合わせください。

    サンプルコード:

    package
    {
    import flash.desktop.NativeApplication;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Rectangle;

    import jp.vivamambo.KinectFaceTraking;

    [SWF(backgroundColor="#000000", width="400", height="300", frameRate="24")]
    public class KinectFaceTrakingSample extends Sprite
    {
    private static const KFT:KinectFaceTraking = new KinectFaceTraking();

    public function KinectFaceTrakingSample()
    {
    NativeApplication.nativeApplication.addEventListener(Event.EXITING, onExiting);
    addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
    }

    private function onAddedToStage(event:Event):void {
    removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
    init();
    }

    private function init():void {
    if (KFT.initKinect()) {
    addEventListener(Event.ENTER_FRAME, onEnterFrame);
    trace("Kinect initialize ");
    } else {
    trace("Kinect not initialize ");
    }
    }

    private function onEnterFrame(event:Event):void {
    if (KFT.startUpdate(false)) {
    drawRectangle(KFT.getRectArray());
    }
    }

    private function drawRectangle(rect:Rectangle):void {
    graphics.clear();
    if (rect.width + rect.height <= 0 ) {
    return;
    }
    graphics.lineStyle(1, 0xff0000);
    graphics.beginFill (0xFFFF00, 1.0);
    graphics.drawRect(rect.x- rect.width / 2, rect.y - rect.height / 2, rect.width, rect.height);
    graphics.endFill();
    }

    private function onExiting(event:Event):void {
    KFT.dispose();
    }
    }
    }

    private static const KFT:KinectFaceTraking = new KinectFaceTraking();
    KinectFaceTrakingのインスタンスを生成しています。

    KFT.initKinect();
    KinectFaceTrakingの初期化処理です。
    KinectFaceTrakingを利用する際に
    必ず、はじめに呼び出す必要があります。

    呼出し後、Booleanによる戻り値が
    返却されます。trueならKinectセンサーに
    アクセス可能です。

    falseの場合は、何かしらの原因で、
    Kinectセンサーにアクセスできない状態です。

    KFT.startUpdate(false);
    Kinectセンサーのカメラデータを更新します。
    今回はリアルタイムによる顔追跡データを取得したいため
    EnterFrame内で毎回更新処理を行っています。

    引数をtrueに設定することで、Kinectセンサーが、
    ユーザーの顔の位置を中心になるように傾きを、
    自動的に調整します。

    KFT.getRectArray();
    顔追跡データをRectagleで返却します。

    KFT.dispose();
    Kinectセンサーの利用を破棄します。
    Event.EXITINGのタイミングで、
    実行するようにしています。

    次回は、顔の輪郭によるデータ取得の方法について、
    寄稿する予定です。

    参考にした情報
    inectFaceTrakingANEのfunctionとか at ビバマンボ Labo
    スポンサーサイト

    テーマ : ブログ
    ジャンル : ブログ

    コメント

    Secret

    プロフィール

    tokufxug

    Author:tokufxug
    FxUGの中の人。

    ガジェット

    最新記事
    最新コメント
    月別アーカイブ
    カテゴリ
    検索フォーム
    RSSリンクの表示
    リンク
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。