<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog.alumican.net</title>
	<atom:link href="http://blog.alumican.net/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.alumican.net</link>
	<description>日々の記憶と記録とActionScript とその周辺</description>
	<lastBuildDate>Thu, 19 Jan 2012 05:51:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>そろそろWebGLを・・・</title>
		<link>http://blog.alumican.net/2012/01/19_023902</link>
		<comments>http://blog.alumican.net/2012/01/19_023902#comments</comments>
		<pubDate>Wed, 18 Jan 2012 17:39:02 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[WebGL]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=2219</guid>
		<description><![CDATA[
そろそろWebGLでもやっておかないと食いっぱぐれるかなあ。
というわけで、
» WebGL Chaser (Google Chrome推奨)
マウスドラッグで視点切り替え、スペースキーでレンダリングモード切り替え。
 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://lab.alumican.net/webgl_chaser/"><img src="http://blog.alumican.net/wp-content/uploads/2012/01/webgl_chaser.jpg" alt="" width="478" height="200"/></a></p>
<p>そろそろ<a href="http://ja.wikipedia.org/wiki/WebGL">WebGL</a>でもやっておかないと食いっぱぐれるかなあ。<br />
というわけで、</p>
<p>» <a href="http://lab.alumican.net/webgl_chaser/">WebGL Chaser (Google Chrome推奨)</a></p>
<p>マウスドラッグで視点切り替え、スペースキーでレンダリングモード切り替え。</p>
<p>WebGLといっても、mr.doob先生の<a href="https://github.com/mrdoob/three.js/">Three.js</a>経由です。ついでに、Three.jsを誰でも簡単に始められるようにテンプレートクラスを作っておきました。</p>
<p>» <a href="https://github.com/alumican/BasicView.js">BasicView.js (GitHub)</a><br />
» <a href="http://lab.alumican.net/three_js_basic_view_example/">BasicView Example</a></p>
<p>今年は色々な技術や感性を磨きつつ、それらを自分自身へ落とし込めるように頑張りますわー。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2012/01/19_023902/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C++でAS3ライクにイベントを記述する JPPEvent 公開</title>
		<link>http://blog.alumican.net/2012/01/13_200548</link>
		<comments>http://blog.alumican.net/2012/01/13_200548#comments</comments>
		<pubDate>Fri, 13 Jan 2012 11:05:48 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[openFrameworks]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=2192</guid>
		<description><![CDATA[最近 openFrameworks をやっていて、C++のリハビリもかねてJPPEventというアドオン作りました。このアドオンを使うと、oF上でActionScript3.0的なイベントドリブンモデルを実現できます。
 [...]]]></description>
			<content:encoded><![CDATA[<p>最近 <a href="http://www.openframeworks.cc/">openFrameworks</a> をやっていて、C++のリハビリもかねてJPPEventというアドオン作りました。このアドオンを使うと、oF上でActionScript3.0的なイベントドリブンモデルを実現できます。</p>
<p><a href="https://github.com/alumican/JPPEvent.cpp">» JPPEvent (GitHub)</a></p>
<p>JPPEvent/srcディレクトリにパスを通してJPPEvent.hをインクルードすればすぐに使えます。</p>
<p>JPPEventはAS3でいうところのEventDispatcherクラスとEventlクラスを備えていて、そのままでも使えるのですが、各クラスを適宜継承することでイベントを発行可能なカスタムクラスや、用途に応じたカスタムイベントを作ることができます。いくつかサンプルを用意したので詳しくはexampleディレクトリをご覧ください。</p>
<p>ちなみにアドオンのコードはoFに依存していないので、実はoFじゃなくても普通に使えます。結構久々にC++を書いているのでバグがあるかも知れませんが、そのときは報告してもらえれば頑張ります。</p>
<p><strong>追記 12.01.15　サンプルコードを修正しました</strong><br />
addEventListener時に無意味なキャストをしていたのでシンプルに使えるよう修正しました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2012/01/13_200548/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Designing に掲載していただきました</title>
		<link>http://blog.alumican.net/2011/12/24_142139</link>
		<comments>http://blog.alumican.net/2011/12/24_142139#comments</comments>
		<pubDate>Sat, 24 Dec 2011 05:21:39 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[WORK]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=2172</guid>
		<description><![CDATA[
現在発売中のWeb Designing（2012年1月号）にて、僕のインタビュー記事を掲載していただいています。「10人の新世代クリエイター！」という特集で、10人のU-30枠の一人として取り上げられており、どうやら相 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.alumican.net/wp-content/uploads/2011/12/webdesigning201112.jpg" alt="" width="478" height="200"/></p>
<p>現在発売中の<a href="http://book.mycom.co.jp/wd/currentissue/">Web Designing</a>（2012年1月号）にて、僕のインタビュー記事を掲載していただいています。「10人の新世代クリエイター！」という特集で、10人のU-30枠の一人として取り上げられており、どうやら相当恐れ多いことになっています。</p>
<p>記事中では、仕事やデザインに対する考え方について、クライアントワークや個人制作の事例を交えながらお話しさせていただいています。インタラクションをつくるということに対して、何か少しでも持って帰ってもらえると嬉しいなあと思っています。僕自身も、同世代の他の方の記事にかなり刺激を受けました。みなさん本当にすごい人ばかりです。</p>
<p>機会があれば手にとっていただけるとうれしいです。</p>
<p>（声をかけてくださったマイナビの毛利さん、A4Aの<a href="https://twitter.com/#!/akiko_saito">齋藤あきこ</a>さん、どうもありがとうございました）</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2011/12/24_142139/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autodesk 123D Catch がすごい</title>
		<link>http://blog.alumican.net/2011/12/16_174845</link>
		<comments>http://blog.alumican.net/2011/12/16_174845#comments</comments>
		<pubDate>Fri, 16 Dec 2011 08:48:45 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[ActionScript3.0]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=2156</guid>
		<description><![CDATA[
対象物が写った複数の画像をアップロードすると、サーバサイドで対象物を三次元復元し、3Dモデルデータをダウンロードできるアプリ『Autodesk 123D Catch』がすごいわけです。とりあえず、出力されたfbxファイ [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.alumican.net/wp-content/uploads/2011/12/bouze3d.jpg" alt="" width="478" height="200"/></p>
<p>対象物が写った複数の画像をアップロードすると、サーバサイドで対象物を三次元復元し、3Dモデルデータをダウンロードできるアプリ『<a href="http://www.123dapp.com/catch">Autodesk 123D Catch</a>』がすごいわけです。とりあえず、出力されたfbxファイルの頂点データをFlashでパースして某PV風なサウンドビジュアライズを速攻で作ってみました。</p>
<p>» <a href="http://wonderfl.net/c/mb1a">Vertices From Autodesk 123D Catch</a></p>
<p><span id="more-2156"></span></p>
<p>fbxのパースにはSaqooshaの『<a href="http://saqoo.sh/a/2343">FBX Parser for AS3</a>』が使えるかなあと思ったんですが、fbxは方言が激しいらしくうまくパースできなかったので強引にやりました。今、膨大な頂点をまびきながらテクスチャをマッピングする作業が思ったよりもめんどうで苦戦中。</p>
<p>3Dモデルのモデルには<a href="https://twitter.com/#!/bouze">@bouze</a>が協力してくれました。アプリには完成したモデルデータをYouTubeにアップするボタン（いるのかこれ）も付いていたのでやってみました。</p>
<p>» <a href="http://youtu.be/HoPcY8ZlbB8?hd=1">Bouze3D</a></p>
<p>以下メモ。</p>
<p>僕も学生時代に<a href="http://ci.nii.ac.jp/naid/110007688210">似たような研究</a>をやってました。こういう技術はたくさんの基礎技術の組み合わせでできていて、例えば</p>
<ol>
<li>入力画像から特徴点を抽出する。</li>
<li>複数の画像にまたがって現れる特徴点のパターンを検出し、画像同士の相対的な位置関係を明らかにする（カメラの座標と角度の推定）。</li>
<li>各カメラの位置、画像を元に、対象物の表面（メッシュ）を推定する。テクスチャもこのとき多数決法などで復元したりすることもある。</li>
<li>誤差や不十分な入力によってで生じるメッシュの穴を補完する。</li>
</ol>
<p>数学的予測に基づく面の補完（4）を、再び実際の画像に照らし合わせて答え合わせをする（3）という作業を繰り返すことで精度の良い復元になっていったりします。</p>
<p>まだ確認していないのですが、クラウド上にアップされているみんなの写真を使ってモデリングをおこなうこともできるらしく、これが本当だとすれば、各々が持ち寄った写真から一つの街をモデリングすることもできるかもしれないという。</p>
<p>ちなみに、複数の写真から得られる情報を重ね合わせることで元の写真よりも解像度をあげる<a href="http://ja.wikipedia.org/wiki/%E8%B6%85%E8%A7%A3%E5%83%8F%E6%8A%80%E8%A1%93">超解像</a>という技術があるのですが、この技術も組み合わせれば「自分が復元した3Dモデルが、いつの間にか他の人の写真によってより精細になっていた」ということが実現されるかも知れません。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2011/12/16_174845/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AIRKinect Extension （AIR + ANE + Kinect）を動かす</title>
		<link>http://blog.alumican.net/2011/11/16_031622</link>
		<comments>http://blog.alumican.net/2011/11/16_031622#comments</comments>
		<pubDate>Tue, 15 Nov 2011 18:16:22 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[ANE]]></category>
		<category><![CDATA[Kinect]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=2105</guid>
		<description><![CDATA[
AIRKinectを使えば、ActionScript Native Extensions（通称ANE）を経由して、AIRアプリからMicrosoftのKinectドライバを簡単に叩けるらしい。
ということでやってみた。 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.alumican.net/wp-content/uploads/2011/11/Kinect0.jpg" alt="" width="478" height="200"/></p>
<p><a href="http://www.as3nui.com/">AIRKinect</a>を使えば、<a href="http://cuaoar.jp/2011/09/adobe-air-actionscript-n.html">ActionScript Native Extensions</a>（通称ANE）を経由して、AIRアプリからMicrosoftのKinectドライバを簡単に叩けるらしい。</p>
<p>ということでやってみた。</p>
<p><span id="more-2105"></span></p>
<ol>
<li><a href="http://kinectforwindows.org/">Microsoft Kinect SDK beta2</a>をインストールする。<br />
これまでOpenNIを使ってた人はドライバが競合するので注意。<a href="http://d.hatena.ne.jp/kaorun55/20110627/1309193339">解決方法</a>もあるみたいだけど、めんどうだったのでOpenNIをアンインストールした。</li>
<li><a href="http://www.as3nui.com/air-kinect/">ここ</a>のDemo Applicationからデモアプリをダウンロードしてインストールする。</li>
<li>Kinectを接続してサンプルAIRアプリを起動する。うまく動かない人は、Microsoft Kinect SDKのインストールフォルダに入ってるサンプルを一度起動から、もう一度AIRアプリを試してみるとうまくいくかも。</li>
</ol>
<p>するとこうなる。</p>
<p><a rel="shadowbox;" href="http://blog.alumican.net/wp-content/uploads/2011/11/Kinect1.jpg"><img src="http://blog.alumican.net/wp-content/uploads/2011/11/Kinect1.jpg" alt="" width="478" height="266"/></a></p>
<p>では次に、自分でAIRアプリをパブリッシュしてみる。基本的にはライブラリ作者の<a href="http://vimeo.com/32021413">チュートリアルビデオ</a>が30分かけて丁寧に全部教えてくれる。英語で。</p>
<ol>
<li>ANEを使ったアプリの制作環境を<a href="http://akabana.info/2011/08/11/air-native-extension-series/">ここらへん</a>を参考にしながら整える。
<p>ちなみにチュートリアルビデオでは現時点ではリリースされていないFlash Builder 4.6を使ってる。Flash Builderでやりたい人はプレリリースプログラムに<a href="https://prerelease.adobe.com/callout/default.html?callid=DC919522A42544798C33ECB4041FC5DC">参加</a>しよう。もう終わってるかも知れないけど。</p>
</li>
<li><a href="http://www.as3nui.com/air-kinect/">ここ</a>のDownload AIRKinectExtensionから.aneファイルをダウンロードする。</li>
<li><a href="http://www.as3nui.com/airkinect-basics-01/">ここ</a>からFlash Builder用のプロジェクトをダウンロードする。</li>
<li>AIRKinectExtension.aneにパスを通して、プロジェクトに入ってるBasicKinect01.asをパブリッシュする。FlashBuilder4.6でのパスの通し方は、<a href="http://vimeo.com/32021413">チュートリアルビデオ</a>の3:30あたりから。英語がわからなくても気合いでなんとかなると思う。
</li>
</ol>
<p>自分の場合は、「com.as3nui.nativeExtensions.kinect.data.AIRKinectFlags（色んな定数を定義しているクラス）が無いよ」というコンパイルエラーが出た。よく分からないので、<a href="http://as3nui.com/extension/v1/docs/">ASDoc</a>を見ながら、該当箇所を値に置き換えるとうまくいった。色々試してみると、どうも com.as3nui.nativeExtensions.kinect.data パッケージには、他にもいくつか抜け落ちているクラスがあるみたい。</p>
<p>BasicKinect01.asを改造してDepthをとってみた。</p>
<p><a rel="shadowbox;" href="http://blog.alumican.net/wp-content/uploads/2011/11/Kinect2.jpg"><img src="http://blog.alumican.net/wp-content/uploads/2011/11/Kinect2.jpg" alt="" width="478" height="374" /></a></p>
<p>AIRKinect.initialize()で「Depth画像を使うよ」っていうフラグを渡し忘れていて、えらくハマった。</p>
<p>» <a href="http://blog.alumican.net/wp-content/uploads/2011/11/BasicKinect01.as">ソースコード</a></p>
<p>まあとりあえずこんなとこ。実行速度は実用に耐えられるレベル。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2011/11/16_031622/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FlashPlayer11のサウンド新機能を試してみる 2</title>
		<link>http://blog.alumican.net/2011/10/16_004347</link>
		<comments>http://blog.alumican.net/2011/10/16_004347#comments</comments>
		<pubDate>Sat, 15 Oct 2011 15:43:47 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=2096</guid>
		<description><![CDATA[前回、Sound.LoadPCMFromByteArrayを試してみたんで、ついでにSound.LoadCompressedDataFromByteArrayについてもやってみました。このメソッドではPCMデータではなく [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.alumican.net/2011/10/14_190342" target="_blank">前回</a>、Sound.LoadPCMFromByteArrayを試してみたんで、ついでに<a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/media/Sound.html#loadCompressedDataFromByteArray()" target="_blank">Sound.LoadCompressedDataFromByteArray</a>についてもやってみました。このメソッドではPCMデータではなく圧縮済みのmp3データそのものをSoundインスタンスに変換することができます。</p>
<p>» <a rel="shadowbox;width=550;height=400;background-color:#000000;" href="http://blog.alumican.net/wp-content/uploads/2011/10/LoadCompressedDataFromByteArray/main.html">サンプル（要FlashPlayer11）</a><br />
» <a href="http://blog.alumican.net/wp-content/uploads/2011/10/LoadCompressedDataFromByteArray/LoadCompressedDataFromByteArray.zip" target="_blank">ソース</a></p>
<p>こちらはうまくいくようです。SoundCompleteイベントも呼ばれているようです。再生完了時に約20ミリ秒ほど再生ヘッダが最後まで進まずに止まりますが、普通にサウンドを再生したときも同様の現象が起こったので多分こんなもんなのでしょう。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2011/10/16_004347/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FlashPlayer11のサウンド新機能を試してみる</title>
		<link>http://blog.alumican.net/2011/10/14_190342</link>
		<comments>http://blog.alumican.net/2011/10/14_190342#comments</comments>
		<pubDate>Fri, 14 Oct 2011 10:03:42 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=2076</guid>
		<description><![CDATA[ブログを書くのが久しぶり過ぎて、世の中ではすでにFlashPlayer11の話題で持ちきりのようで。
アップデートの目玉であるStage3Dに関してはいろんな人が取り上げているので、ちょっと地味なSoundの新機能をちょ [...]]]></description>
			<content:encoded><![CDATA[<p>ブログを書くのが久しぶり過ぎて、世の中ではすでにFlashPlayer11の話題で持ちきりのようで。</p>
<p>アップデートの目玉である<a href="http://www.adobe.com/devnet/flashplayer/stage3d.html" target="_blank">Stage3D</a>に関してはいろんな人が取り上げているので、ちょっと地味なSoundの新機能をちょちょいと試してます。<a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/media/Sound.html#loadPCMFromByteArray()" target="_blank">Sound.LoadPCMFromByteArray</a>を使えば、ByteArrayに格納されたPCMデータからSoundインスタンスを生成できるようになります。ごにょごにょ加工したByteArrayをSoundインスタンスに変換しておくことで、SampleDataEventでサウンドを動的に生成し続けなくても、同じ音であれば低コストで繰り返し再生できるようになりますね。</p>
<p>以下、SoundインスタンスからByteArrayにデータを抽出して、再びSoundインスタンスに変換し直しただけのサンプルです。クリックで再生します。音量注意。</p>
<p>» <a rel="shadowbox;width=550;height=400;background-color:#000000;" href="http://blog.alumican.net/wp-content/uploads/2011/10/LoadPCMFromByteArray/main.swf">サンプル（要FlashPlayer11）</a><br />
» <a href="http://blog.alumican.net/wp-content/uploads/2011/10/LoadPCMFromByteArray/LoadPCMFromByteArray.zip" target="_blank">ソース</a></p>
<p>見てもらえれば分かりますが、再生終了時の挙動が変です（FlashPlayer11.0.1.152現在）。ちょうど、SampleDataEventでサウンドを動的生成する場合における、最後の方のサンプルデータをずっと入れ続けたような状態でしょうか。調べてみるとSound.lengthが取れておらず0のままで、SoundChannel.positionがずっと進み続けています。SoundCompleteイベントも発行されません。</p>
<p>･･･もうちょっと待てば改善されるかな。それともやり方間違ってるのかな。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2011/10/14_190342/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第一回東京ひよこの会に参加してきました</title>
		<link>http://blog.alumican.net/2011/03/07_013518</link>
		<comments>http://blog.alumican.net/2011/03/07_013518#comments</comments>
		<pubDate>Sun, 06 Mar 2011 16:35:18 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=2056</guid>
		<description><![CDATA[久しぶりのブログ更新です。生きてます。
「東京ひよこの会」なる勉強会に参加してきまして、そのとき発表したデモをアップしました。

　
SpriteやMovieClipのhitAreaというプロパティ自体は前々から知ってい [...]]]></description>
			<content:encoded><![CDATA[<p>久しぶりのブログ更新です。生きてます。</p>
<p>「<a href="http://www.project-nya.jp/modules/weblog/details.php?blog_id=1350">東京ひよこの会</a>」なる勉強会に参加してきまして、そのとき発表したデモをアップしました。</p>
<p><script type="text/javascript" src="http://wonderfl.net/blogparts/lN4J/js"></script><br />
　</p>
<p>SpriteやMovieClipのhitAreaというプロパティ自体は前々から知っていたのですが、うまく扱えないためこれまで避けていました。</p>
<p>Spriteを親SpriteのhitAreaとして設定した場合、hitAreaの兄弟Spriteにもボタンが反応してしまっていたのですが（デモ起動直後のbtn4の状態）、このたび会場にいらしていた<a href="http://fumiononaka.com/">野中先生</a>のおかげでこの問題を無事解決することができました。</p>
<p>ボタン自体のmouseChildrenをfalseにするだけでした。hitAreaに設定されたSpriteはマウスイベントに関する扱いが少し特殊で、mouseEnabledやmouseChildrenをfalseに設定しても、hitAreaとして設定されているSpriteやMovieClipのヒット領域としての仕事は全うできるようです。言葉での説明が難しいのでデモを見てもらえば分かると思います。</p>
<p>こんな感じで皆それぞれが「今できること + 本当はこんな風にしたい」を持ちより共有してみんなで考える、というスタイルは有意義で、新しい発見もありとても為になりました。自分にとって「<a href="http://teraco.jp/">てらこ</a>」がエッジな技能を披露する場であるのに対して、ひよこは理解度とスキルのベースアップの場という棲み分けなのかなぁ、という感触です。</p>
<p>皆さんもどんどん参加すればいいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2011/03/07_013518/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flash + OpenCV</title>
		<link>http://blog.alumican.net/2010/08/10_040647</link>
		<comments>http://blog.alumican.net/2010/08/10_040647#comments</comments>
		<pubDate>Mon, 09 Aug 2010 19:06:47 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[AIR2.0]]></category>
		<category><![CDATA[OpenCV]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1846</guid>
		<description><![CDATA[
AIR2.0の新機能でOpenCVと連携してみました。AIRアプリを起動してTwitterID入力 → Webカメラを選択すると、カメラ映像から顔領域を検出してアイコンが顔を隠します。TwitterIDを空欄にすると笑 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.alumican.net/wp-content/uploads/2010/08/opencv_title.png" alt="" width="478" height="200" /></p>
<p>AIR2.0の新機能でOpenCVと連携してみました。AIRアプリを起動してTwitterID入力 → Webカメラを選択すると、カメラ映像から顔領域を検出してアイコンが顔を隠します。TwitterIDを空欄にすると笑い男が出現します。俺の目を盗みやがったなという具合に。</p>
<p>» <a href="http://blog.alumican.net/wp-content/uploads/2010/08/OpenCVFaceDetection.exe">OpenCVFaceDetection</a><br />
» <a href="http://blog.alumican.net/wp-content/uploads/2010/08/opencv_face_detection.zip">ソース一式</a></p>
<p>・Iキー　･･･ アイコンの表示/非表示を切り替えます。<br />
・Rキー　･･･ 検出された全顔領域の表示/非表示を切り替えます。<br />
<span id="more-1846"></span></p>
<p>実行にはWindows環境であることと、OpenCV 2.1が必要です。また、ネイティブアプリケーション側とAIR側から同じWebカメラに同時にアクセスするので、複数アプケーションからのWebカメラへの同時アクセスをサポートする環境が必要です。<br />
» <a href="http://opencv.jp/download">OpenCV</a><br />
» <a href="http://blog.alumican.net/2010/08/07_025611">ひとつのWebカメラを複数のアプリケーションから同時に使う</a></p>
<p>ビルドにはさらにDirectX SDK、<del datetime="2010-08-11T12:28:24+00:00">Platform SDK</del>（Windows SDKに統合されたっぽい）が必要です。もしこれらのライブラリだけでは足りなかったよーという場合は教えてもらえるとうれしいです。<br />
» <del datetime="2010-08-11T04:39:19+00:00"><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&#038;displaylang=en">Platform SDK</a></del> → <a href="http://msdn.microsoft.com/ja-jp/windows/bb980924.aspx">Windows SDK</a><br />
» <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&#038;FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba">DirectX SDK</a></p>
<p><strong>やりたかったこと</strong><br />
AIR2.0から、ネイティブアプリケーション（exeやappなど）と標準入力・標準出力を介して通信できるようになったので、裏方を全部ネイティブアプリケーションにやらせて結果だけFlashで描画するという試みです。要は一から画像処理系をASで組んでやるよりも、高速に動作するネイティブ言語に元々実装されている資産を使った方が効率いいじゃんっていうことです。今回はC++でOpenCVを使って顔検出するネイティブアプリケーションを実装し、その結果をFlashでリアルタイムに描画するプログラムを組んでみました。</p>
<p><strong>AIRの起動から終了までの流れ</strong></p>
<ol>
<li>ユーザがAIRを起動する</li>
<li>AIRがネイティブアプリケーションを起動する</li>
<li>ネイティブアプリケーションが毎フレーム顔検出をして、結果をFlashに送る</li>
<li>AIRが検出結果に基づいて描画をおこなう（3に戻る）</li>
<li>ユーザがAIRを終了すると、AIRがネイティブアプリケーションを終了する</li>
</ol>
<p>こんな感じです。ネイティブアプリケーションは基本的に表に出しません。エンジン部分はネイティブアプリケーション、表示部分はAIRという風に完全に切り分けることにします。</p>
<p><strong>AIRとネイティブアプリケーションの通信</strong><br />
以下の形式の文字列で通信することにしました。間に改行は挟むことができず、最後は必ず改行で終了する必要があります（改行はデータの終端を意味します）。</p>
<pre><code>顔1のx座標,顔1のy座標,顔1の幅,顔1の高さ;顔2のx座標,顔2のy座標,顔2の幅,顔2の高さ;顔3の・・・\n</code></pre>
<p>このルールに沿った文字列をネイティブアプリケーションから標準出力し、AIR側の標準入力で受け取りパースします。</p>
<p>ちなみに似たような内容を先日のSparkProject勉強会で発表してきました。AIRからのネイティブアプリケーション起動、通信部分、終了に関するそれぞれのコードは発表資料に書いてあります。発表時にはWebCam Splitterのようなソフトウェアの存在を知らなかったために、AIRの透過ウィンドウをネイティブアプリケーションの上に重ねる方式になっています。<br />
» <a href="http://blog.alumican.net/wp-content/uploads/2010/08/Presentation_spark3.pdf">SparkProject勉強会 発表資料</a></p>
<p>OpenCVでの顔検出にはcvHaarDetectObjects関数を用いました。画像から顔検出をする流れは以下のサイトがわかりやすかったです。各種SDKのインストールについても詳細に書いてあるので環境構築の参考にもなります。<br />
» <a href="http://ameblo.jp/fujimonia/entry-10240952353.html">OpenCVを使って顔認識プログラムを作ってみた</a></p>
<p>今回のサンプルを作るにあたり、笑い男マークとTwitterアイコンを取得するAPIを以下のサイトからお借りしました。<br />
» <a href="http://antina.vigorosso.net/blog/index.php?e=2072">antina工作室</a><br />
» <a href="http://tweetimag.es/">tweetimag.es</a></p>
<p><strong>感想</strong><br />
ネイティブアプリケーションとAIRの通信は思った以上に簡単でした。かつネイティブアプリケーションの強力なパワーを実感できて満足です。配布時にはネイティブアプリケーション自身やdllを、AIRのインストーラに含めることができるので、ユーザが実行環境を用意する手間もかなり省くことができます（今回はファイルサイズが大きくなるのでdllは含んでいません）。</p>
<p>OpenGLやDirectXで描画までおこなうものに比べれば非力ですが、うまく使えばFlashのメリットである描画やインターフェース構築の簡単さ、ネイティブアプリケーションのメリットである高速演算、それぞれをうまく引き出すことができると思います。</p>
<p><strong>追記 10.08.10</strong><br />
デフォルトで使うOpenCVのバージョンを2.1に変更しました。OpenCV 1.0を使う場合は以下の記事の追記部分を参考にソースコードの一部およびパスを書き換えてください。<br />
» <a href="http://blog.alumican.net/2010/08/06_152939">C++とOpenCVでWebカメラを簡単に扱う</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2010/08/10_040647/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ひとつのWebカメラを複数のアプリケーションから同時に使う</title>
		<link>http://blog.alumican.net/2010/08/07_025611</link>
		<comments>http://blog.alumican.net/2010/08/07_025611#comments</comments>
		<pubDate>Fri, 06 Aug 2010 17:56:11 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1905</guid>
		<description><![CDATA[
最近OpenCVとFlashの連携というものを研究していて、例えばFlashがWebカメラにアクセスしているときにOpenCVが同じWebカメラにアクセスしちゃうと、デバイスがロックされているためにアプリケーションが落 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.alumican.net/wp-content/uploads/2010/08/webcam_splitter_title.png" alt="" width="478" height="200" /></p>
<p>最近OpenCVとFlashの連携というものを研究していて、例えばFlashがWebカメラにアクセスしているときにOpenCVが同じWebカメラにアクセスしちゃうと、デバイスがロックされているためにアプリケーションが落ちたりして＼(^o^)／になるんですけど、それを解決してくれるソフトウェアがありました。</p>
<p>» <a href="http://very-soft.com/wcs">WebCam Splitter ($19.95)</a></p>
<p><span id="more-1905"></span>すでにWebカメラが起動している場合はいったんすべて終了させておきます。こいつをインストールして起動するとタスクトレイに常駐します。タスクトレイのアイコンをクリックするとWebカメラの一覧が表示されるので、取り込みたいWebカメラを選択します。成功するとWebカメラが起動し、画像のようにアイコンの目が赤くなります。</p>
<p><img src="http://blog.alumican.net/wp-content/uploads/2010/08/webcam_splitter_1.png" alt="" width="285" height="108" /></p>
<p>WebCam Splitterはあたかも自身がWebカメラであるかのように振舞ってくれるので、アプリケーションは普通のWebカメラに接続するように「VerySoft WebCamSplitter」に対して接続することができます。</p>
<p><img src="http://blog.alumican.net/wp-content/uploads/2010/08/webcam_splitter_2.png" width="213" height="136" alt="" /></p>
<p>同じようにして別ののアプリケーションからも「VerySoft WebCamSplitter」へ接続することで、同一のWebカメラの映像を複数のアプリケーションから同時に使えるようになりました。</p>
<p><img src="http://blog.alumican.net/wp-content/uploads/2010/08/webcam_splitter_3.png" width="350" height="212" alt="" /></p>
<p>ちなみにこのWebCam Splitterというソフト、Webカメラだけでなく<strong>動画ファイルやデスクトップのリアルタイムキャプチャもWebカメラとして取り込める</strong>のでかなりおもしろいです。試用期限は無いみたいですが、トライアル版では一定間隔で画面がグレースケールになってテキストがかぶさってしまいます。試してないですが、他に<a href="http://www.softservice.org/products_camsplitter.html">CamSplitter</a>というソフトもあるみたいです。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2010/08/07_025611/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.324 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-05-19 04:02:29 -->

