2005年11月アーカイブ

flashでWEBCAMをつかった赤色の検出をやってみた。
flash_webcam_red_tracking.jpg
赤い折り紙を検出してる様子。赤色を検出して、その重心を割り出す。
ラベリング処理などは行っていないので複数の物体があるときはその複数の物体の重心が表示される。

swf -- flashplayer8以上,webcam必須 ※遅いパソコンだと固まるかも.......試してません。

赤色の検出なんか簡単だろうと素人考えで思っていたのだがそうではなかった.....
折り紙の赤を検出しようと思ったのだけれど普通に色域を指定してやろうとしたら
うまくいかなかったので我流で検出している。

以下その部分のソースコード
my_bd.draw(my_video);
green_bd.copyChannel(my_bd,my_rect,my_pt,2,1);
blue_bd.copyChannel(my_bd,my_rect,my_pt,3,1);
blue_bd.draw(green_bd, new Matrix(), new ColorTransform(), 'lighten');
//ブルーとグリーンを合成。明るい方の値が優先される。
my_bd.draw(blue_bd, new Matrix(), new ColorTransform(), 'subtract');
/*元の画像の赤色から他の色を合成した値を引く。
この際、赤-他の色がマイナスの値をとらないようにdifferenceではなく、subtractをつかう。
*/
my_bd.applyFilter(my_bd, my_rect, null, noiseReduction);
my_bd.threshold(my_bd, my_rect, my_pt, '>', 0xff500000,0xffffffff);
my_bd.threshold(my_bd, my_rect, my_pt, '!=', 0xffffffff, 0xff000000);
/*
ここで赤の値が高い物を白に置き換える。閾値は0xff500000としとく。
(環境によって変化させる必要あり)その後二値化処理(白以外は黒に)
*/

こんなので本当にいいのか?一応できているけどもっと簡単にできるはず。

重心の検出部分は
var x=0
var y=0
var count=0
//重心を求める際のx y と標本の数を入れるcountの定義
for(i=0 ; i < my_cam.width ; i=i+5){
	//5pixel刻みにカメラの画像の横の長さまで
	for(e=0 ; e < my_cam.height ; e=e+5){
				//5pixel刻みにカメラの画像の縦の高さまで
		if(0 != my_bd.getPixel(i,e)){
			//もし画素が黒じゃなかったら
			x+=i;
			//その画素のiをxに足す
			y+=e;
			//その画素のeをに足す
			count++;
			//標本した画素の数を記録
			}
		}
	}
/*
上のfor文のあとに
x/count
y/count
を求めることによって重心の座標が求まる。
*/

と適当に書いている。

今日はとりあえずここまででおしまい。
ノイズをとるためにmedian filterでも入れるかな。
喉がいたくて、おきてしまったので更新。 いつもお世話になっているFirefoxの最新版1.5が、日本時間で11月30日の午前5時~午後5時の間にリリースされるとのこと。

最近1.07がよく落ちて困るのでインストールしてみるか。

※追記 出ました。downloadサイト

 今日は調子を取り戻したので、久しぶりに物をつくってみようかなと思い立った。
せっかくだから、UML2.0の勉強もかねて。最近はUMLより模型の方が研究室では有効だけどね。

 何となく見せ所は想像できたので、シチュエーションとデザインのしっくり感をさぐりつつ、煮詰まったらUMLのお勉強。Judeで図を書こうと思ったのだが、どうやらJudeはUML2.0対応していないのでこまった。

 UML2.0が書けるツールはないものかとさくっと調べると最近はEnterprise Architectというモデリングツールが安くていいらしい。UML2.0に対応してる上にC#やJava、PHPのソースの入出力にも対応している。ここのAS2.0のテンプレートを追加すればAS2.0のコードも生成出来るのでFLASHの設計にも使えるらしい。(またまたFlaxCoderさんより)ソースコードの読み込みに対応しているアカデミックプロフェッショナル版のは13,650円か。買えそうで買えないなあ。

 とりあえず必要になるまで保留だなぁ。それまでは手書きで練習かな。そんなに大きな物は設計しないしね。それよりも模型の試行錯誤と製図だな。

ExternalInterface - Macromedia Flex 2.0 MXML and ActionScript Language Reference

Macromediaによるflash.external.ExternalInterface とC# を使った連携のサンプルの情報

ソース元
FlexCoder - Flex 2.0 と C#の連携より


通信のシリアライズ化まで踏み込んだサンプルはプログラミング力が貧弱な僕にとってかなりうれしい。

Macromedia - Developer Center : Embedding and Communicating with the Macromedia Flash Player in C# Windows Applications

sappari.org - C#の中にFlashを埋め込む
にならぶためになる情報

1.Macromedia - Flash Media Server 2から本体をダウンロードしてインストールする。

2.Flash Media Server 2 ComponentsをMacromedia - Developer Center : Flash Media Server 2 Componentsからダウンロード

3.zipの中に入っているCommunicationComponents.flaをC:\Program Files\Macromedia\Flash 8\ja\Configuration\Componentsディレクトリ以下にコピー(win flash8 使用の場合)

4.zipの中に入っているscriptlibフォルダの中身をC:\Program Files\Macromedia\Flash Media Server 2\scriptlib内にコピー、元々あるファイルを上書きする。

まさか、あのガラスの仮面の「紅天女」が能として公開されるとは...
漫画原作のドラマが当たり前の時代になったけど、漫画が原作の「能」ってすごいな。

asahi.com: 「ガラスの仮面」の劇中劇、国立能楽堂の新作能に - 文化・芸能
-Asahi.comより

実装の苦労で苦い思い出ばかりが残る Flash Communication Serverですが、バージョンアップしてMacromedia Flash Media Server 2になったようです。発売日は2005年11月9日とプレスリリースされていましたが、どうやら11月24日に発売延期されていたみたいでした。
(2005/11/23日にMacromedia japanのページにて確認)

バックエンドシステムとの連携 new

Flash Media Server 2 は Remoting 、 ファイルオブジェクト、XML オブジェクト、ソケット、Jabber® XML スト リームを含む各種ストリームをサポート しているので、アプリケーションサーバーとさまざまな方法で連携できます。 また、メタデータの情報を取得するため にメディアアセット管理システムとも連 携できます。-Macromedia - Flash Media Server : 機能より引用

 新機能としては、On2 VP6 コーデックで録画できるようになったこともうれしいし、上記の引用内容のようにJabberにも対応したことが気になる。最近Google Talkにも採用されたしね。

 自分でおもしろいビデオを撮りながら、すぐに友達に公開したいときにはRssではなくてIMにブロードキャストした方がおもしろい気もする。最近のニュー速VIPもその傾向にはしってる(「今から~するから」とスレたてて、アンカー指定で命令実行系)からね。オンデマンド的なVideo配信ではなくて、トラジションとかも作れるようになったんだし、インタラクティブなオンラインvideo作成編集環境とかFLASHで出来るようになるといいなぁ。というかそのためのJabber対応なんだろうけど。

Flash Media Server コンポーネントはここからダウンロードできる。

FLASHでWEBCAMを使った動きの検出をしてみた。

参考はFLASH 8 : threshold() >> Motion detection... - jeanphiBlog

ここにあるソースを参考に、二値化処理に注目して勉強した。

Flash でwebcam を使った動きの検出 swf -- flashplayer8以上,webcam必須

flash_webcam_segmentation.jpg

今回のPointは


now_bd.draw(before_bd, new Matrix(), new ColorTransform(), 'difference');
now_bd.threshold(now_bd, my_rect, my_pt, '>', 0xff111111, 0xffffffff);

の処理。
drawメソッドを呼ぶ際にblendModeObjectをdifference指定してbefore_bdとnow_bdを合成する。diffrerenceは明るい色から暗い色を引くモードなので、差分がない部分は0x000000になる。その後に0xff111111(黒にちかい)を閾値とし0xffffffff (白) 差があるところを白くすることで二値化処理をしている。

二値化処理した後ノイズが乗るのでどうしたらいいのか勉強中。

 AVRマイコン をつかったロボット製作の本がついにCQ出版からでた。使っている言語はBASIC(コンパイラ-はBASCOM-AVR)気になったので本屋で立ち読みした。かなり初心者向けで詳しく書いてあって、ことBASCOM-AVRに関してはこれ以上日本語の書籍ではやさしく書いている本はないと思う。

マイコン搭載ロボット製作入門―AVRで魚型ロボットのメカを動かす
4789837335平田 宏一

CQ出版 2005-11
売り上げランキング :


Amazonで詳しく見る
by G-Tools

 使っているマイコンはAT90S2313で、紹介されている部品がほとんど全て秋月と千石で手に入るのも初心者には優しいと思う。製作記事が魚型ロボットのメカの製作なので、サーボモーターやDCモーター、ステッピングモーターの回路、プログラミング、さらにそれらの動力源をつかったメカの設計の仕方までかいてあるので、アクチュエーター関連をこれからやろうって人にもおすすめ。

ColorMatrixFilter()とConvolutionFilter()が難解で明日起きたら忘れそうなので覚え書き。

ColorMatrixFilter()について

カラーモデル変換式 RGB to YMC・YMCK・HSV・HLS・YCbCr(YUV,YCC)・XYZ・YUV・YIQ

色の変更

ConvolutionFilter()について
コンボリューション行列

エッジ検出のためのフィルタは下のマトリックスを使う。
-1-1-1
-1 8 -1
-1-1-1

flashを使ってwebcamで映像を入力するといつも汚くなって困ってしまっていた。
いろいろしらべていたら Camera オブジェクトの .setMode()メソッドで入力解像度を操作できることを知った。

メソッドの使い方は

public setMode([width:Number], [height:Number], [fps:Number], [favorArea:Boolean]) : Void

パラメータ

width:Number (オプション) - 必要なキャプチャの幅 (ピクセル単位)。デフォルト値は 160 です。

height:Number (オプション) - 必要なキャプチャの高さ (ピクセル単位)。デフォルト値は 120 です。

fps:Number (オプション) - 必要なデータキャプチャレート (1 秒あたりのフレーム数)。デフォルト値は 15 です。

favorArea:Boolean (オプション) - 指定要件に合うネイティブモードがカメラにない場合に、幅、高さ、フレームレートをどのように操作するかを指定するブール値。デフォルト値は true で、キャプチャサイズを維持することを示します。このパラメータを使用すると、width 値と height 値に最も近いモードが選択されます。ただし、これによりフレームレートが低下し、パフォーマンスに悪影響を及ぼすことがあります。カメラの高さと幅よりも最大フレームレートを優先するには、favorArea パラメータに false を指定します。

-setMode (Camera.setMode メソッド) より引用。

とあったので、.setMode()メソッドを使った簡単なサンプルをつくって、早速実験してみた。

.setMode()メソッド検証用SWF -- flashplayer8以上,webcam必須
※使用しているWEBCAMによっては最大解像度がそれぞれ違うので、640 x 480 以上は表示できない場合あり。

.setMode()メソッドをつかって、それぞれ 160 x 120 、1280 x 960 の解像度でキャプチャーしてみた。画面の出力は640 x 480 で固定。

webcam_flash_160_120.jpg
flashのデフォルト入力値である160 x 120の解像度のキャプチャー画像。かなり画像が荒い。

webcam_flash_1280_960.jpg
1280 x 960の解像度のキャプチャー画像 画像はきれいになっているがfpsが8まで落ちている。

いろいろ実験してみると、帯域の問題が結構顕著に表れた。
1280 x 960 ではfpsが8までおちてしまいすこしかくかくした感じになってしまう。
960 x 720だと 15fpsくらいで再生できるのでローカルでwebcamの入力を使うときはこのくらいの解像度がベストという気がした。

詳しいメソッドのつかいかたやサンプルソースなどはMacromediaのサイト

 僕のOlympusのデジカメは古いので内蔵電池が切れてデジカメの内部時計がリセットされてしまう。
そのせいで、デジカメの写真に埋め込まれる、Exifの日付情報が2000年1月1日になってしまうことがよくある。そこで問題となるのがpicasaやflickrは写真を登録する際に写真の撮影日時に合わせて分類されるので、おかしい日時のせいでpicasaやflickrの写真自動振り分けの便利さがなくなってしまうこと。思い出は正確に残したい。

 exif情報の修正は、ソフトをつかわないといけないのだが、修正ツールで僕が使っているのは、「De4Exif」というフリーソフトだ。日時の復元機能に特化していてかなり便利。正確な時間は復元することはできないが、撮影日は思い出して入力すればいい。

 また、windowsのエクスプローラでもexif情報は表示できるが、とてもみにくいので、それを拡張するツールもある。「ExifReader」だ。インストールすると写真のプロパティが拡張されてとても見やすくなる。

exifreader.jpg
「exifreaderによって追加されたタブ」

 この二つのツールはなぜかいつも名前をわすれてしまってWEBを探し回ることになるので覚え書き。

人と人が力を合わせると足し算ではなくかけ算になるとはよく言いますが、まじめに考えるとどうなるのだろうという疑問がふと湧いた。(そんな物、言葉のレトリックなのだから厳密に意味を求めても無意味というのはおいておいて...)

さて、中学生で止まっている僕の頭はどこまで考えられるのだろうか?

Aさん と Bさんの力を a,bとおくと 合わさった力は
a x b で求めることができる。
a = 2
b = 3
だったら、その積は6ですね。

しかし、ここでいう求めた力はスカラー(量)なので、重さとかとおんなじ概念。
人の力というとどちらかというとスカラーではなくベクトルに近い気がするので
前述の式はちょっと違う気がする。

では、ベクトルで考えてみるか....でも、ちょっとまてよ、ベクトルって外積とか内積とかあるけど単純に"積"って存在するのか?

google先生に聞いてみるとどうやら積という物は存在しないっぽい。

ベクトルには和,差,実数倍はありますが,積や商はありません。(注→定義は可能です) 内積は交換法則,結合法則,分配法則といった基本的な性質を満たすので,ベクトルの和に対して「まるで積のような」働きができます。内積を定義することで,ベクトルに対しての代数計算を,あたかも文字式の計算のように行うことができるのです。
-内積の意味より引用

引用文より積や商はないが定義は可能とかいてあるのでそのリンク先(複素数のベクトル的な解釈における研究)を読んでみることに...

え..複素数??ちょっと勉強しないとわからなそうだ。

そういえば、なるさんも「虚数が..虚数が...」と前に熱く語ってくれたけれどもそれと関係あるのかな?

ちょっと勉強してでなおしてみる。

WEBCAMをつかった映像処理という物を結構するのだが、画像が汚くて困っている。
DVカメラをIEEE1394でつないで処理してもいいのだけれども持ち歩けない。

 今つかっているWEBCAMはちょうど一年前くらいに購入したQcam® Pro 4000なのだが
去年のORF展示の際に粘土でかためられたり、ガワを取り外して改造されたりした結果、ブルースクリーン連発の困った子になってしまっていた。

 そこで、新しいWEBCAMを購入しようと調べていたら、130万画素のQcamの新しいバージョン(Qcam® Pro 4000は30万画素)が今日発売することを知った。30万画素→130万画素は結構でかいんじゃないか?ピクセルサイズで言うと、640 x 480 が 1280x960 だからね。

QVX-13 Qcam Fusion
B000BWYKQM
ロジクール 2005-11-18
売り上げランキング :


Amazonで詳しく見る
by G-Tools

併せてノートブック用のラインナップにも130万画素のWEBCAMがでてる。
こっちの方がちいさいのかな?

Qcam for Notebooks Pro
B000C29J0S
ロジクール 2005-11-25
売り上げランキング :


Amazonで詳しく見る
by G-Tools

実際の画質はどうなのかがすごく気になるが、値段が少し高いのが難点。改造用途には惜しくて使えないな。ただ、ふだん使うためのWEBCAMとしてはすごくいいんじゃないかと思う。実機の展示をみて買うか検討してみようと思う。

Engadget Japaneseより

アップルのJobs聖下、100ドルPCにOS Xの提供を申し出>断られる
生産開始に向けて着々と進んでいる$100PC計画に対して、寛大なること海の如きJobs聖下がOS Xの“無償”提供を申し出られました。が、オープンソースではないためあっさり断られたとのこと。

この記事をよんで思い出すのはitunesを無料で提供したAppleの戦略。itunesは便利ですごくいいソフト。その出来は言うまでもない。でも残念ながら、そのソースコードはopenではない。だから勝手にitunesを解析して改良することはいけないことなのだ。それが何を意味するかというと、ある日突然itunesが有料になっても僕らは何もできないししてはいけないということ。そういった"たぐい"の問題があるために、教育用のプラットフォームをオープンソースではない物に依存するということはすごく怖いことである。とくに$100PCにとっては。


そもそも教材なのにソースを読んで学ぶことが出来ないブラックボックスだったり、改良ひとつするにもライセンス違反を心配しなければならないようなものが採用されるわけはないのですが、はなから絶対に懐が痛まないと分かったうえでの懐の広さの演出はさすが聖下です。

最後のくだり、一瞬なんでこんな嫌みな言い方をこの記事はしているのかなと思った。しかし、そもそもOSの歴史にはUNIXがライセンス問題から教育機関で使いにくくなり、LINUXがGNUによって開発されてたという過去がある。GNUが"GNU is not unix"と自らを命名し"GPL( General Public License)"という仕組みをつくった理由をJobsが忘れているはずがない。なのになぜjobsは、FreeBSDをオープンソースではない商用OSにわざわざ改造したOS X を$100 PCに無償提供する言ったのか?と考え直して納得。

一見いい話でもふたを開けるとそこは大人の世界。

ずいぶん前に友達と、なぜipod video にリモコン端子がなくなったのかを話していた。
・薄いデザインになったために端子が邪魔になった。
・リモコンを使う人がそんなにいないからだ。
といった説が出てきていた。
でもどれも納得するにはほど遠い意見だった。
なぜなら、ipodの現在発売されている周辺機器はリモコン端子をつかって機器を接続するタイプの物がほとんどだからだ。僕もつい最近こんなことをしていた。

そして、そんな話をしたのを忘れていた頃に先日こんなWEBをみた。
アップル、iPodアクセサリメーカーへの「課税」を強化へ
 

Appleは今回、iPodの底部にある「ドックコネクタ」に接続するデバイスに関して、それらを販売するメーカーにもこのプログラムを適用することにしたと、同社シニアバイスプレジデントのPhil Schillerが先週CNET News.comに対して認めた。

なるほど、一番の理由はこれらしい。
周辺機器メーカーからロイヤリティーを徴収するためにリモコン端子がなくなったのか。

利権を守るのも大事だが、もう少しイノベーションのある解決方法を見つけてほしかった。
普通に考えて不便になるようなことを利権のために正当化して実行するってことは、CCCDなどで自分の利権を守ろうとした日本レコード協会と一緒じゃないかと僕は思う。

結局ipodのユーザーに使いやすいようにデザインされた譲歩した著作権管理機構も、信念の元にではなく、自分の会社の利益のためにそうしただけだったというわけだ。

べつにAppleは悪いわけではないのだが、なんかこういう社会の仕組みをみると嫌悪感がわく。

flickrで人を探す、プログラムにエラーが起きたときに変な写真を拾ってくる意味がわかった。
flickrにundefinedってユーザーがいるからだ。
http://www.flickr.com/photos/undefined/

先日のに続いてついでに発掘up。
なぜかAnd検索がうまくいかなかったが、理由はいまだにわからない。




ちょっと前にflickr apiをいじって作ったFLASHがあったので、バグを少しなおして公開
下のテキストエリアにFlickrのusernameを入れるとその人の画像がランダムで表示される。




FLickrはアマゾンや他のwebサービスとちがって、FLashのクロスドメイン問題に対応している。

このページでFlickr API Keysを登録する際に

Domain For Flash applications:
の蘭に自分のFLASHをおきたいドメインを入力することで、そのドメインにおいたswfファイルがflickr.comへ通信することが可能になる。

Flickr APIのページで公開されているflickr_api (doc)を使って使ったのだがバージョンが古いのかAPI自体にバグが多かったので、ソースのASファイルに潜って直して使った。

話は変わるが、ActionScriptでなぜかときどきloadMovieが効かない時があるのはなぜ?
ロードした容量をみてもロードは完了しているはずなのに表示されないことがある。
なぜだろう。




DSC01310


Originally uploaded by hatayanorg.



かなり前に注文していたWiring I/O boardが届いた。

Movable Type 3.2-ja-2にアップグレードしつつ、復旧しました。

test

| | コメント(1) | トラックバック(0)

testテスト