USBカメラとJava

JavaでUSBカメラの映像のスナップショットを取得して,その映像をRMIを使って送信するようなプログラムを作りたい.


まず,JavaRMIを使って画像を送るようなプログラムが作れるかどうか試してみた.
最初はImageクラス(インタフェース?)のオブジェクトをそのまま送ろうとしたけど,シリアライズ化できないってことではじかれた.
次にイメージをバイト型の配列として送ってみることにした.
ImageInputStreamオブジェクトをImageIOのcreateImageInputStreamを使って作成して,そのreadメソッドによってバイト型の配列を取得し,それを送ってみたところちゃんと送れた.結構簡単だ.


今度はUSBカメラの映像のスナップショットを取得して,それを画像ファイルとして保存できるかを試してみた.
JavaからUSBカメラの映像をキャプチャするのに,JMF(Java Media Framework)を使ってみた.


ちゃんと動くのか謎だったけど,JMF取ってきてインストールしてみるとJMStudioなるものが勝手にインストールされた.おそらくデモプログラムなんだろうけど.
使い方が分からないので勝手にいろいろいじってみる.USBカメラを接続してJMStudioを起動して,[File]メニューの中に[Capture...]とかあったからとりあえずそれをクリックしてみた.明らかにAudio系の設定みたいなダイアログが出てきた.
今度は,[Preferences...]をクリック.
出てきたダイアログに[Capture Devices]という項目があったので,それを選択.[Detect Capture Devices]というボタンがあって,それをクリック.
[vfw:Microsoft WDM Image Capture (Win32):0]とかいうのが出現した.それを一番上に[Move Up]してから,再び最初の画面に戻って[Capture...]してみると,ちゃんと動いてUSBカメラからの映像がちゃんと見れた.


ということで,ちゃんと動いてくれたわけなので,これを使えばやりたいことができそう.後は適当にGoogleを使ってサンプルプログラムとかを検索.
そこら辺に転がっていたソースにチョビチョビと変更を加えて完成(赤と青が反転していたり映像が逆だったりいろいろと修正するのが大変だったけど・・・).


いったい何をやっているやら.