<?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>橋本商会 &#187; webcam</title>
	<atom:link href="http://shokai.org/blog/archives/tag/webcam/feed" rel="self" type="application/rss+xml" />
	<link>http://shokai.org/blog</link>
	<description>なんか作ったりした記録を忘れないうちに書くblog</description>
	<lastBuildDate>Mon, 06 Feb 2012 13:32:44 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com/" />
			<item>
		<title>USBカメラフラットモジュール(WR-UC32)のケーブルを作った</title>
		<link>http://shokai.org/blog/archives/4351</link>
		<comments>http://shokai.org/blog/archives/4351#comments</comments>
		<pubDate>Tue, 24 Mar 2009 08:01:56 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[USB]]></category>
		<category><![CDATA[webcam]]></category>
		<category><![CDATA[WR-UC32]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=4351</guid>
		<description><![CDATA[先日買ったUSBカメラのケーブルが変なケーブルで気に入らなかったので作った。 市販のUSBケーブルをバラして、赤・黒・白・緑の4本を同じ色同士接続したら動いた。紫は無視していい。 この状態だとまずいので後で絶縁するべき。 [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://shokai.org/blog/archives/4332">先日買ったUSBカメラ</a>のケーブルが変なケーブルで気に入らなかったので作った。<br />
<br />
<br />
市販のUSBケーブルをバラして、赤・黒・白・緑の4本を同じ色同士接続したら動いた。紫は無視していい。<br />
<a href="http://www.flickr.com/photos/shokai/3380805579/" title="R0010554 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3427/3380805579_fdd326a394.jpg" width="500" height="375" alt="R0010554" /></a><br />
この状態だとまずいので後で絶縁するべき。あと今回は<a href="http://shokai.org/blog/archives/4323">これ</a>の中に埋め込むので、もっと短い(10cm弱ぐらいの)ケーブルにする。<br />
<br />
<br />
カメラ側はコネクタを買いに行くのが面倒だったので付属のケーブルから切断<br />
<a href="http://www.flickr.com/photos/shokai/3380804953/" title="R0010545 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3579/3380804953_4740a0580a.jpg" width="500" height="375" alt="R0010545" /></a><br />
<br />
<br />
USBは4芯のはずだけど、裏を見ると5芯になっている。テスターで調べてみたら黒と紫は基盤内で両方GNDに通電していた<br />
<a href="http://www.flickr.com/photos/shokai/3380804803/" title="R0010544 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3606/3380804803_dc295f33fe.jpg" width="500" height="375" alt="R0010544" /></a><br />
<br />
<br />
なので、紫はとりあえず接続する必要無し。<br />
赤・黒・白・緑の4つだけ接続した<br />
<a href="http://www.flickr.com/photos/shokai/3380805069/" title="R0010547 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3557/3380805069_7f2af92935.jpg" width="500" height="375" alt="R0010547" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/4351/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>USBカメラフラットモジュール(WR-UC32)</title>
		<link>http://shokai.org/blog/archives/4332</link>
		<comments>http://shokai.org/blog/archives/4332#comments</comments>
		<pubDate>Mon, 23 Mar 2009 16:02:37 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[webcam]]></category>
		<category><![CDATA[WR-UC32]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=4332</guid>
		<description><![CDATA[共立エレショップのblogで紹介されていたロボット用のカメラ(WR-UC32)を買った。 この商品、なぜかシリコンハウスblog通販ではリストに載っていないので、共立エレショップの左側の検索ボックスから「WR-UC32」 [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://blog.siliconhouse.jp/archives/51503230.html">共立エレショップのblogで紹介されていたロボット用のカメラ</a>(WR-UC32)を買った。<br />
<br />
この商品、なぜか<a href="http://www.siliconhouse.jp/blog/order.html">シリコンハウスblog通販</a>ではリストに載っていないので、<a href="http://eleshop.kyohritsu.com/">共立エレショップ</a>の左側の検索ボックスから「WR-UC32」と型番で検索すると見つかる。<br />
<br />
<br />
ロボット用らしいが、USBビデオクラスとしてパソコンからも使える。<br />
解像度は640&#215;480で、画質は普通。オートフォーカスは付いていない。<br />
<br />
箱には「Windows XP/Vista対応」とあるがMacbook(Leopard)、Dell inspiron mini(Ubuntu)でもドライバインストールなしにいきなり認識した。もちろんMacbook(Windows XP)でも動作した。<br />
Macbook上のWindowsでVMWarePlayerで動かしているUbuntuではデバイスとして認識しようとするとVMWareごと強制終了して駄目だった。<br />
<br />
<br />
薄くて小さい。デバイスを使うと青色LEDが点灯する。<br />
ネジ止めする穴が複数空いていて使いやすそう<br />
<a href="http://www.flickr.com/photos/shokai/3358830123/" title="USBカメラフラットモジュール by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3429/3358830123_d00a733343.jpg" width="500" height="375" alt="USBカメラフラットモジュール" /></a><br />
<br />
<br />
付属のケーブル。<br />
面倒くさいことに、ロボット用のパーツなので（？）サーボモータを制御するためのシリアルケーブルと一本にまとめられている<br />
<a href="http://www.flickr.com/photos/shokai/3358829135/" title="R0010396 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3642/3358829135_6d6ac1077d.jpg" width="500" height="375" alt="R0010396" /></a><br />
<br />
<br />
<br />
基盤側のUSBケーブルとのコネクタは、秋葉原に行けば普通に買える形状の4ピンのものなので自分でケーブル作った方が扱いやすそう<br />
<a href="http://www.flickr.com/photos/shokai/3359648070/" title="R0010399 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3590/3359648070_4d258ee110.jpg" width="500" height="375" alt="R0010399" /></a><br />
<a href="http://www.flickr.com/photos/shokai/3359649334/" title="R0010413 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3577/3359649334_e78567b1ac.jpg" width="500" height="375" alt="R0010413" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/4332/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C#3.0 &#8211; DirectShow.NET2.0でwebcam撮影、JPEG保存する</title>
		<link>http://shokai.org/blog/archives/1546</link>
		<comments>http://shokai.org/blog/archives/1546#comments</comments>
		<pubDate>Mon, 16 Jun 2008 18:04:16 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[DirectShow]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[VS2008]]></category>
		<category><![CDATA[webcam]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=1546</guid>
		<description><![CDATA[Windowsでカメラからの画像入力を使うには、Flash(Air)やProcessing、Max/MSPを除くとDirectXかVideo for Windowsを使わなければならないんだけど、これらをC#から直接使う [...]]]></description>
			<content:encoded><![CDATA[<p>
<p>Windowsでカメラからの画像入力を使うには、<a href="http://shokai.org/blog/archives/1479">Flash(Air)</a>や<a href="http://shokai.org/blog/archives/1332">Processing</a>、Max/MSPを除くとDirectXかVideo for Windowsを使わなければならないんだけど、これらをC#から直接使うのはとてもめんどい。</p>
<p>で、DirectX自体はラッパーを介して使えるので問題ないんだけど、DirectShow（カメラの入力に使う）だけはなぜかC#用のラッパーが無いので<a href="http://directshownet.sourceforge.net/">DirectShow.NET</a>の出番になる。このライブラリは<a href="http://shokai.org/blog/archives/1207">s.h.log  DirectShow.NETで静止画キャプチャ</a>でも使ったんだけど、去年ぐらいからDirectShow.NETがver 2.0になってさらに良くなっていた。</p>
<p>ちょっといじってみたが、C++が苦手な馬鹿には便利すぎて感動したので、<br /><br />
webcam撮影→JPEG画像に保存のサンプルを作って置いておきます</p>
<p>■作ったもの<br /><br />
→ <a href="http://shokai.org/archive/cs3.0/0806_DshowNetCapture/">Download (VisualStudio 2008 + C#3.0)</a></p>
<p>昨日の朝に<a href="http://d.hatena.ne.jp/shokai/20080616/1213567007">DirectShow.NET2.0でwebcamキャプチャ、JPEG保存 &#8211; 橋本詳解</a>で書いたのとほぼ同じだが、デバイスの選択ができるようになった。<br /><br />
<a href="http://www.flickr.com/photos/shokai/2582231672/" title="select capture devices by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3090/2582231672_ac922404c1_o.png" width="481" height="302" alt="select capture devices" /></a></p>
<p>あと、DirectShow.NETを使えば、インストールすると1GBぐらいになるDirectX SDKを入れなくても済むのも嬉しい。</p>
<p>■プログラムの準備<br /><br />
まず準備として<a href="http://directshownet.sourceforge.net/">DirectShow.NET</a>のサイトからDirectShowLib-2005.dll本体と、サンプルを手に入れる。<br /><br />
DirectShowLib-2005.dllにパスを通し、sampleに入っているCapture.csもpublic domainなのでコピーしてありがたく使わせていただく。</p>
<p>そして、いくつか使うnamespaceを通す<br /><br />
<code>usingDirectShowLib;<br /><br />
usingSnapShot;<br /><br />
usingSystem.Runtime.InteropServices;<br /><br />
usingSystem.Drawing.Imaging;</code></p>
<p>■カメラデバイスを取得してプレビュー表示する<br /><br />
なんでもいいが、System.Windows.Forms.Controlを継承しているPanelやPictureBoxやFormなどを、カメラのプレビュー用に用意しなければならない。プレビューを画面に出したくなければVisible = falseしておけばいい。<br /><br />
そのコントロールをCaptureクラスのコンストラクタに渡してやると、cameraのプレビュー表示がリアルタイムに表示されるようになる。<br /><br />
<code>PanelpanelPreview=newPanel();<br /><br />
this.Controls.Add(panelPreview);<br /><br />
Capturecam=newCapture(0,640,480,24,panelPreview);//device,x,y,24FPS,preview</code><br /><br />
Capture()の第一引数は画像入力デバイスのindexで、0からはじまる。存在しないデバイスindexを選んでしまうとエラーになるので注意。FPSやカメラのXYサイズも指定できる。</p>
<p>■現在のカメラ表示を保存する<br /><br />
別のコントロールを用意して、そっちに保存する。<a href="http://www.flickr.com/photos/shokai/2582231672/">今回のサンプルアプリ</a>の場合は、左の動画が右に静止画としてキャプチャされる。<br /><br />
PictureBoxにキャプチャするなら<br /><br />
<code>PictureBoxpicBox=newPictureBox();<br /><br />
this.Controls.Add(picBox);<br /><br />
IntPtrm_ip=cam.Click();<br /><br />
Bitmapb=newBitmap(cam.Width,cam.Height,cam.Stride,PixelFormat.Format24bppRgb,m_ip);<br /><br />
b.RotateFlip(RotateFlipType.RotateNoneFlipY);//上下反転しているので直す<br /><br />
picBox.Image=b;</code></p>
<p>Image型で静止画をコピーできたので、JpegファイルやPNGファイルなどに書き出すのも簡単。<br /><br />
<code>picBox.Image.Save("captured.jpg",ImageFormat.Jpeg);</code></p>
<p>もちろんPictureBoxを経由しないで、直接保存もできる<br /><br />
<code>b.Image.Save("captured.jpg",ImageFormat.Png);</code></p>
<p>カメラを閉じるのを忘れずに。<br /><br />
FormのFormClosedイベント内などでDispose()を呼べば良い<br /><br />
<code>cam.Dispose();</code></p>
<p>ちなみに、現在接続してあるデバイスの一覧はDsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice)の中に入っている。<br /><br />
今回のサンプルでコンボボックスの中にデバイス名一覧を突っ込んだのはこんな感じでやった<br /><br />
<code>comboBoxDevices.Items.Clear();<br /><br />
foreach(DsDevicedsinDsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice))<br /><br />
{<br /><br />
comboBoxDevices.Items.Add(ds.Name);<br /><br />
}<br /><br />
comboBoxDevices.SelectedIndex=0;</code></p>
<p>ComboBox.SelectedIndexで現在選ばれたデバイス名のindexがわかって、それをCaptureのコンストラクタのデバイスindexとして使えば良い。</p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1546/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe AIRの開発環境を整えて、カメラで撮影してJPEGで保存するソフトを作った</title>
		<link>http://shokai.org/blog/archives/1479</link>
		<comments>http://shokai.org/blog/archives/1479#comments</comments>
		<pubDate>Sat, 12 Jan 2008 14:20:11 +0000</pubDate>
		<dc:creator>moblog</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[JPEG]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[webcam]]></category>

		<guid isPermaLink="false">http://shlog.sakura.ne.jp/blog/?p=1479</guid>
		<description><![CDATA[AIRを使うと、flash.filesystemやflash.desktopなどのデスクトップアプリ用のクラス群が使えるようになるので、やってみた。 Air beta3で開発する環境を作って、前からやってみたかった 半透 [...]]]></description>
			<content:encoded><![CDATA[<p>
<p>AIRを使うと、flash.filesystemやflash.desktopなどのデスクトップアプリ用のクラス群が使えるようになるので、やってみた。</p>
<p>Air beta3で開発する環境を作って、前からやってみたかった<br />
<ul>
  <li>半透明で変な形をしたウィンドウ</li>
  <li>USBカメラで撮影してJPEGにエンコードしてファイル出力</li>
<ul>
を作った。<br />
<br />
<p>撮影した写真はプログラムと同じフォルダに保存される。</p>
<p>できたもの => <a href="http://shokai.org/archive/as3/0801_CameraSaveJpeg/CameraSaveJpeg/CameraSaveJpeg.air">CameraSaveJpeg.air (Adobe AIR beta3)</a>、<a href="http://shokai.org/archive/as3/0801_CameraSaveJpeg/">Archive</a></p>
<p><a href="http://www.flickr.com/photos/shokai/2187777862/" title="Air app by shokai, on Flickr"><img src="http://farm3.static.flickr.com/2246/2187777862_efbc229f0f.jpg" width="500" height="313" alt="Air app" /></a><br /><br />
なお、半透明ウィンドウにするとスクリーンショットに写らなくなるので、デジカメで撮った。</p>
<p>■開発環境を整える<br /><br />
・<a href="http://labs.adobe.com/downloads/air.html">Adobe Labs &#8211; Downloads: Adobe AIR</a><br /><br />
AIRの実行環境</p>
<p>・<a href="http://labs.adobe.com/wiki/index.php/AIR:Flash_CS3_Professional_Update">AIR:Flash CS3 Professional Update &#8211; Adobe Labs</a><br /><br />
Japaneseを選んでインストール</p>
<p>・<a href="http://www.jinten.net/blog/archives/31">Jinten Blog  Blog Archive  FlashDevelop Beta5</a><br /><br />
<a href="http://www.flashdevelop.org/">FlashDevelp3.0 Beta5</a>で、AIRとmx系クラスのコード補完を有効にする方法<br /><br />
[Project]→[Properties]→[Compiler Options]→[Intrinsic Libraries]に<br /><br />
</p>
<blockquote><p>Library\AS3\frameworks\Flex3<br /><br />
Library\AS3\frameworks\AIR</p></p></blockquote>
<p>
<p>を追加する</p>
<p>で、普通にFlashDevelopでFlash IDE用のプロジェクトを作成。<br /><br />
さらにFlashCS3からもAIRプロジェクトを作成。FlashDevelopと同じフォルダを指定する。</p>
<p>Flex3.0のコンパイラはとりあえず必要ない。</p>
<p>■証明書を作る<br /><br />
・<a href="http://www.hatayan.org/weblog/archives/2007/11/03/062950.php">AIR Beta2でWEBCAMの画像をjpgに保存するサンプル &#8211; hatayanlog</a><br /><br />
が詳しい。AIR Beta2から証明書を作らないとならなくなった。</p>
<p><span id="more-1479"></span><br /><br />
■プログラム書く<br /><br />
普通にAS3書いてflaからリンクさせてコンパイルする。<br /><br />
JPEG圧縮は<a href="http://code.google.com/p/as3corelib/">as3corelib &#8211; Google Code</a>を使った。</p>
<p>・<a href="http://geek.oyspe.com/2007/12/memo-006adobe-air-beta2.html">memo 006　Adobe AIR Beta2でデスクトップアプリケーションを作ってみる &#8211; やっぱギークでナイト！</a><br /><br />
FlashCS3上でAIRプロジェクトを作って、新しいNativeWindowを開いたり閉じたりする。<br /><br />
コードだけFlashDevelopで書くには、ドキュメントクラス名を指定してやればいい<br /><br />
<a href="http://www.flickr.com/photos/shokai/2187862038/" title="document class by shokai, on Flickr"><img src="http://farm3.static.flickr.com/2341/2187862038_edbb994d99_o.png" width="665" height="102" alt="document class" /></a></p>
<p>・<a href="http://www.adobe.com/jp/newsletters/edge/september2007/articles/article2/index.html">Adobe Edge: 2007年9月 Flash CS3 でゼロからはじめよう AIRアプリケーション作成講座 Vol.1</a><br /><br />
NativeWindowを変な形のウィンドウにする方法</p>
<p>・<a href="http://www.hatayan.org/weblog/archives/2007/11/03/062950.php">AIR Beta2でWEBCAMの画像をjpgに保存するサンプル &#8211; hatayanlog</a><br /><br />
カメラで撮影、MovieClip→BitmapData→JPEGEncoder→ByteArray→FileStreamで保存<br /><br />
あと、beta2から3でまた変わったのか、Fileまわりは</p>
</p>
<blockquote><p><p>var file:File = new File();<br /><br />
var now:Date = new Date();<br /><br />
file.nativePath = File.applicationDirectory.nativePath + File.separator + now.time + &#8220;.jpg&#8221;;</p></p></blockquote>
<p>
<p>これでアプリケーションと同じディレクトリに保存できた。</p>
<p>■ソースコード<br /><br />
<a href="http://shokai.org/archive/as3/0801_CameraSaveJpeg/CameraSaveJpeg/CameraSaveJpeg.as">CameraSaveJpeg.as</a><br /><br />
<br />
<pre class="prettyprint">
/**<br />
*&nbsp;Capture&nbsp;Image&nbsp;by&nbsp;USB-Camera&nbsp;then&nbsp;Save&nbsp;it&nbsp;as&nbsp;JPEG&nbsp;file.<br />
*&nbsp;<br />
*&nbsp;@author&nbsp;Sho&nbsp;Hashimoto<br />
*&nbsp;@version&nbsp;1.1<br />
*&nbsp;http://shokai.org<br />
*&nbsp;FlashCS3&nbsp;+&nbsp;AIR&nbsp;beta3<br />
*&nbsp;2008/01/12<br />
*/<br />
package&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;fl.controls.*;<br />
&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.display.*;<br />
&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.filesystem.*;<br />
&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.media.*;<br />
&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.events.*;<br />
&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.utils.*;<br />
&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;com.adobe.images.JPGEncoder;<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;CameraSaveJpeg&nbsp;extends&nbsp;MovieClip{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;cam:Camera;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;video:Video;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;_buttonShot:Button;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;_textAreaLog:TextArea;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;_buttonClose:Button;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;_bg:MovieClip;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;CameraSaveJpeg()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stage.scaleMode&nbsp;=&nbsp;StageScaleMode.EXACT_FIT;&nbsp;//&nbsp;伸縮する<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;stage.scaleMode&nbsp;=&nbsp;StageScaleMode.NO_SCALE;&nbsp;//&nbsp;伸縮しない<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stage.align&nbsp;=&nbsp;StageAlign.TOP_LEFT;&nbsp;//&nbsp;左上から<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link_ide_obj()&nbsp;//&nbsp;IDEが生成したオブジェクトを関連づけ<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cam&nbsp;=&nbsp;Camera.getCamera();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cam.setMode(800,600,24,true);//&nbsp;24FPS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cam.setQuality(0,&nbsp;100);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;video&nbsp;=&nbsp;new&nbsp;Video(cam.width,&nbsp;cam.height);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;video.attachCamera(cam);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.addChild(video);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;video.width&nbsp;=&nbsp;200;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;video.height&nbsp;=&nbsp;150;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_bg.alpha&nbsp;=&nbsp;0.5;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_buttonShot.addEventListener(MouseEvent.CLICK,&nbsp;savePicture);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_buttonClose.addEventListener(MouseEvent.CLICK,&nbsp;window_onClose);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_bg.addEventListener(MouseEvent.MOUSE_DOWN,&nbsp;window_onMove);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;IDEが生成したオブジェクトを関連づけ&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;link_ide_obj()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this._buttonShot&nbsp;=&nbsp;buttonShot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this._textAreaLog&nbsp;=&nbsp;textAreaLog;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this._bg&nbsp;=&nbsp;bg;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this._buttonClose&nbsp;=&nbsp;buttonClose;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;現在の表示をファイルに保存&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;savePicture(e:Event)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_buttonShot.enabled&nbsp;=&nbsp;false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;bmd:BitmapData&nbsp;=&nbsp;new&nbsp;BitmapData(cam.width,&nbsp;cam.height);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bmd.draw(video);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;encoder:JPGEncoder&nbsp;=&nbsp;new&nbsp;JPGEncoder(95);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;bytes:ByteArray&nbsp;=&nbsp;encoder.encode(bmd);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;file:File&nbsp;=&nbsp;new&nbsp;File();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;now:Date&nbsp;=&nbsp;new&nbsp;Date();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.nativePath&nbsp;=&nbsp;File.applicationDirectory.nativePath&nbsp;+&nbsp;File.separator&nbsp;+&nbsp;now.time&nbsp;+&nbsp;".jpg";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;fs:FileStream&nbsp;=&nbsp;new&nbsp;FileStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fs.open(file,&nbsp;FileMode.UPDATE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fs.writeBytes(bytes,&nbsp;0,&nbsp;bytes.length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fs.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace("saved!&nbsp;=&amp;amp;gt;&nbsp;"&nbsp;+&nbsp;file.nativePath);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(e:Error)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(e.message);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_buttonShot.enabled&nbsp;=&nbsp;true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;window_onClose(e:Event)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stage.nativeWindow.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;window_onMove(e:Event)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stage.nativeWindow.startMove();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;trace(message:String)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_textAreaLog.text&nbsp;=&nbsp;message&nbsp;+&nbsp;"¥n"&nbsp;+&nbsp;_textAreaLog.text;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</pre>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1479/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash CS3 &#8211; 背景差分法</title>
		<link>http://shokai.org/blog/archives/1416</link>
		<comments>http://shokai.org/blog/archives/1416#comments</comments>
		<pubDate>Mon, 03 Sep 2007 20:39:47 +0000</pubDate>
		<dc:creator>moblog</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[webcam]]></category>
		<category><![CDATA[画像処理]]></category>
		<category><![CDATA[背景差分法]]></category>

		<guid isPermaLink="false">http://shlog.sakura.ne.jp/blog/?p=1416</guid>
		<description><![CDATA[昨日Flash CS3を買ったので、さっそくAS3でやってみた。 自分で1からBitmapDataクラスを使うのは初めてだったけどprocessingやってたお陰ですぐわかった。 一旦カメラの前からどいて、Save Ba [...]]]></description>
			<content:encoded><![CDATA[<p>
<p>昨日Flash CS3を買ったので、さっそくAS3でやってみた。</p>
<p>自分で1からBitmapDataクラスを使うのは初めてだったけどprocessingやってたお陰ですぐわかった。</p>
<p>一旦カメラの前からどいて、Save Backgroundボタンを押してみてください<br /><br />
<object width="800" height="350"><param name="movie" value="http://shokai.org/archive/as3/070903_camera/backgroundSubtraction.swf"></param><param name="allowScriptAccess" value="sameDomain" /><embed src="http://shokai.org/archive/as3/070903_camera/backgroundSubtraction.swf" type="application/x-shockwave-flash" width="800" height="350"></embed></object></p>
<p>うまくいくとこうなってるはず<br /><br />
<a href="http://www.flickr.com/photos/shokai/1315180460/" title="Photo Sharing"><img src="http://farm2.static.flickr.com/1320/1315180460_d09e5e08be.jpg" width="500" height="246" alt="BackgroundSubtraction" /></a></p>
<p>■<a href="http://shokai.org/archive/as3/070903_camera/backgroundSubtraction.fla">SourceCode (Flash CS3 / AS3)</a></p>
<p><span id="more-1416"></span><br /><br />
1フレーム目。左の大きなビデオ(camDebug)とは別に、画面に表示していない200&#215;150の小さなVideoオブジェクト(camVideo)がある。そこからBitmapDataを作って、背景差分法で処理する。処理した結果を画面右のBitmapオブジェクトに表示して、ついでにぼかしフィルタ(blur)をかけた。<br /><br />
背景差分法は、単純に1度保存しておいたBitmapData(bgBmd)と現在の表示(nowBmd)を1ピクセルずつ比較して、差がある所だけ黒くしている。<a href="http://web.sfc.keio.ac.jp/~shokai/archives/2007/04/proce55ing-bg-sub.html">大体Processingの時</a>と同じ。</p>
</p>
<blockquote><p><p>varthreshold:int=30;//影化のしきい値<br /><br />
labelThreshold.text=&#8221;threshold:&#8221;+threshold.toString();</p>
<p>varcam:Camera=Camera.getCamera();<br /><br />
cam.setMode(640,480,24,true);//24fps<br /><br />
cam.setQuality(0,100);</p>
<p>varcamVideo:Video=newVideo(200,150);//bitmap計算用<br /><br />
camVideo.attachCamera(cam);<br /><br />
camDebug.attachCamera(cam);//デバッグ用の表示</p>
<p>varbgBmd:BitmapData=newBitmapData(camVideo.width,camVideo.height);<br /><br />
varnowBmd:BitmapData=newBitmapData(camVideo.width,camVideo.height);<br /><br />
varshadowBmd:BitmapData=newBitmapData(camVideo.width,camVideo.height);</p>
<p>//結果表示用<br /><br />
varshadowBmp:Bitmap=newBitmap(shadowBmd);//bmdを操作すると逐次bmpに反映される<br /><br />
shadowBmp.x=400;<br /><br />
shadowBmp.width=400;<br /><br />
shadowBmp.height=300;<br /><br />
this.addChild(shadowBmp);</p>
<p>varblur:BlurFilter=newBlurFilter();//ぼかしフィルタ<br /><br />
blur.blurX=5;<br /><br />
blur.blurY=5;<br /><br />
blur.quality=BitmapFilterQuality.MEDIUM;<br /><br />
shadowBmp.filters=[blur];</p>
<p>buttonSaveBg.addEventListener(MouseEvent.CLICK,saveBg);<br /><br />
functionsaveBg(e:Event){<br /><br />
trace(&#8220;saveBg()&#8221;);<br /><br />
bgBmd.draw(camVideo);//背景再取得<br /><br />
}</p>
<p>functioncomparePixels(a:int,b:int,threshold:int):Boolean{<br /><br />
vara_red:int=a>>16&0xFF;<br /><br />
varb_red:int=b>>16&0xFF;<br /><br />
vara_green:int=a>>8&0xFF;<br /><br />
varb_green:int=b>>8&0xFF;<br /><br />
vara_blue:int=a&0xFF;<br /><br />
varb_blue:int=b&0xFF;<br /><br />
if((a_red>b_red&#038;&#038;a_red-b_red>threshold)||(a_red<b_red&#038;&#038;b_red-a_red>threshold)||<br /><br />
(a_green>b_green&#038;&#038;a_green-b_green>threshold)||(a_green<b_green&#038;&#038;b_green-a_green>threshold)||<br /><br />
(a_blue>b_blue&#038;&#038;a_blue-b_blue>threshold)||(a_blue<b_blue&#038;&#038;b_blue-a_blue>threshold)<br /><br />
)returntrue;//色に差がある時<br /><br />
elsereturnfalse;//色に差が無い時<br /><br />
}</p>
<p>this.addEventListener(Event.ENTER_FRAME,reload);//毎フレーム実行イベント<br /><br />
functionreload(e:Event){<br /><br />
//背景差分法で変化のあったピクセルを検出、黒く塗りつぶす<br /><br />
nowBmd.draw(camVideo);<br /><br />
shadowBmd.lock();//bitmap操作中は表示に反映させない<br /><br />
for(vary:int=0;y<bgBmd.height;y++){<br /><br />
for(varx:int=0;x<bgBmd.width;x++){<br /><br />
if(comparePixels(bgBmd.getPixel(x,y),nowBmd.getPixel(x,y),threshold)){<br /><br />
shadowBmd.setPixel(x,y,0xFF000000);<br /><br />
}<br /><br />
else{<br /><br />
shadowBmd.setPixel(x,y,0xFFFFFF90);<br /><br />
}<br /><br />
}<br /><br />
}<br /><br />
shadowBmd.unlock();<br /><br />
}</p>
<p>buttonInc.addEventListener(MouseEvent.CLICK,<br /><br />
function(){<br /><br />
if(threshold<128)labelThreshold.text="threshold:"+(++threshold).toString();<br /><br />
});<br /><br />
buttonDec.addEventListener(MouseEvent.CLICK,<br /><br />
function(){<br /><br />
if(threshold>0)labelThreshold.text=&#8221;threshold:&#8221;+(&#8211;threshold).toString();<br /><br />
});</p></p></blockquote>
<p>
<p>あとMath.abs()の動作がおかしくて、comparePixels()の所で使えなかったので長いif文になってしまった。</p>
<p>■参考<br /><br />
・<a href="http://un-q.net/2007/08/actionscript30_01.html">ActionScript3.0で動体検知 01 (Unknown Quality)</a><br /><br />
・<a href="http://d.hatena.ne.jp/flashrod/20061015">flashrod &#8211; AS3で画像処理入門(1)</a><br /><br />
・<a href="http://d.hatena.ne.jp/flashrod/20061117">flashrod &#8211; 2006-11-17</a><br /><br />
・<a href="http://web.sfc.keio.ac.jp/~shokai/archives/2007/04/proce55ing-bg-sub.html">s.h.log: Proce55ingで背景差分法</a></p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1416/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

