Marilenaでアイドル(3)

080708.jpg

さてさて。
もうてらこで発表してからだいぶたってしまいましたが、
この無駄に長く解説してきたシリーズも今回で最後です。
前回前々回からどうぞ。


って言っても、もうほとんど終わっているので、解説するところはほとんどないんですが、、。

FlickrとMarilena

前々回、一番最初で、Marilenaの使い方を説明しました。
その時に、ここに画像のURLを入れればいい、と書いたと思います。
それがここ。

ACTIONSCRIPT:
  1. public function FaceDetector() {
  2.   initUI();
  3.   initDetector();
  4.   faceImage.load( new URLRequest("<b>013.jpg</b>") );
  5. }

で、as3flickrlibを使用して、Flickr上の画像のURLをゲット。
それがこれ。

ACTIONSCRIPT:
  1. var photoArr : Array = e.data.photos.photos;
  2. for(var i:Number = 0; i&lt;photoArr.length; i++){
  3. farm = photoArr[i].farm;
  4. server = photoArr[i].server;
  5. id = photoArr[i].id;
  6. secret = photoArr[i].secret;
  7. owner = photoArr[i].ownerId;
  8. //画像のURL
  9. trace( 'http://farm' + farm + '.static.flickr.com/' + server + '/' + id + '_' + secret + '.jpg');
  10. }

もうおわかりのように、これでFlickrから取得してきたURLを、Marilenaに渡してやることが出来ます。
これによって、Flickrの画像を顔認識にかけてやることができます。

で、エロく

あとは、顔と判定されたポイント(Rectangleで返ってくる)をもとに、
顔からした、顔が半分切れたバストショットになるように調整。

調整した結果が、これ。

顔とバストショットの関係図

緑の枠が、Marilenaで取ってきた顔の範囲で、青の枠がそこから割り出した見せたい範囲。
割り出した、っても実際に目で確認しながら調整しただけ。
顔の範囲の下半分から始めて、顔の範囲の高さの三倍分の高さにしただけ。
式にするとこう。

ACTIONSCRIPT:
  1. //顔の範囲を rect とする
  2. xx = rect.x - rect.width / 2;
  3. yy = rect.y + rect.height / 2;
  4. ww = rect.width * 2;
  5. hh = rect.height * 3;

結果的にたいていのものが上手くいったので、これでいいか、ってことで。
(顔認識自体が上手くいってないものは除いて)

まとめ

だいたい以上で終了。
自分のわかってる範囲で、説明しきったはずです。

最後にソースを一式アップしときます。
ほんと、既存のものをいじっただけ&汚いソースですが、、、。

ソース(164.4Kbyte)

※動作させるには別途、以下が必要です。(ライブラリ)
Marilena
as3flickrlib
as3corelib
tweener

FlashCS3で、Main.asをドキュメントクラスに設定してお使い下さい。

・Marilenaシリーズ
Marilenaでアイドル(1)
Marilenaでアイドル(2)


About this entry