スポンサーサイト

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

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

    前回に引き続き、 KinectFaceTrakingのお話です。

    今回は、識別点をリアルタイムに表示する方法です。



    こちらの動画はサンプルアプリを動作させています。
    ちなみにカメラは、KinectでなくWEBカメラを使用しています。
    配置の調整等を行っているため、画像が荒くなっていたり、
    位置も微妙にずれています…。
    サンプルコード:

    package
    {
    import flash.desktop.NativeApplication;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Matrix;
    import flash.geom.Point;
    import flash.media.Camera;
    import flash.media.Video;

    import jp.vivamambo.KinectFaceTraking;

    [SWF(backgroundColor="#000000", width="400", height="300", frameRate="24")]
    public class KinectFaceTrakingSample2 extends Sprite
    {
    private static const KFT:KinectFaceTraking = new KinectFaceTraking();
    private var _trakingStage:Shape = new Shape();
    private var _bitmapData:BitmapData;
    private var _video:Video;
    public function KinectFaceTrakingSample2()
    {
    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()) {
    addChildren();
    addEventListener(Event.ENTER_FRAME, onEnterFrame);
    trace("Kinect initialize ");
    } else {
    trace("Kinect not initialize ");
    }
    }

    private function addChildren():void {
    _video= new Video(600,500);
    var camera:Camera = Camera.getCamera();
    if(camera){
    _video.smoothing = true;
    _video.attachCamera(camera);
    }
    _bitmapData = new BitmapData(400, 300);
    addChild(new Bitmap(_bitmapData));
    addChild(_trakingStage);

    }

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

    private function drawFaceTracking(points:Vector.<Point>):void {
    var matrix:Matrix = new Matrix();
    matrix.scale(-1, 1);
    matrix.translate(400, 0);

    _bitmapData.draw(_video,matrix);
    _trakingStage.graphics.clear();
    var len:int = points.length;
    if (len <= 0) {
    return;
    }
    _trakingStage.graphics.lineStyle(1, (Math.random() * 0xffffff) % 0xffffff);
    for (var i:int = 0; i < len; i++) {
    _trakingStage.graphics.drawCircle(points[i].x - 255, points[i].y - 50, 1.5);
    }
    _trakingStage.graphics.endFill()
    }

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


    前回とほとんど同じコードです。BitmapやShape、CameraやVideoについては、
    KinectFaceTrakingのライブラリとは、あまり関係のないコードです。

    今回、新たに出てきた命令は、KFT.doFaceTraking()です。

    KFT.doFaceTraking();
    EnterFrame内で毎回、呼び出しているこの関数は、
    顔の識別点を:Vector.<Point>にして返してくれる関数です。

    動画で確認できるかと思いますが、この識別点は100個分返却するようです。
    今回、描画用の関数にdrawFaceTrackingを作成しています。

    この関数内で、識別点(:Vector.<Point>)が0個なら描画処理を行わない
    ようにしています。

    KinectFaceTrakingの使用方法を2回に渡って、お伝えしました。
    KinectFaceTrakingが、どういったライブラリであるかが、
    わかっていただけたかと思います。

    より詳細な情報やライブラリの利用については、
    ビバマンボ様のブログにてご確認ください。
    スポンサーサイト

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

    コメント

    Secret

    プロフィール

    tokufxug

    Author:tokufxug
    FxUGの中の人。

    ガジェット

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