骨喰わば骨髄までと言うことで、ここまで来たら Cygwin (cygwin.com) をインストールしてみることに。あ、ネットワークから必要なものだけダウンロード出来るんだ。すごいな。とりあえずデフォルトでいろいろ入ってるんだろうと楽観してそのまま先に進む。
インストール後にさっそく ruby -v として Ruby inside で cygwin すごいじゃない! と思ったのも束の間、よく見たら [i386-mswin32] ってそっちかい。notepad と打ったらメモ帳起動するし。いままでに遊んだエミュレータは Basilisk II や QEMU なので、cygwin にもそのイメージがあったからちょっとビックリ。ファイルシステムもイメージじゃないんだね。
何度か setup.exe をクリックしては、ruby やら cvs やら make やらいろいろ入れる。
Ruby/OpenCV 開発室 (blueruby.mydns.jp) によると、まず ffcall (fsf.org) をインストールするとのことなんだけど、./configure が終わらない。延々とループしてるような気がしないでもないけど、そんなもの?・・・あ、5 分くらいしたら正常終了した。Makefile と config.h が出来たらしい。make、make install で /usr/local/lib や /usr/local/include にいろいろと出来る。
※ 『まぁ ffcall は option らしいので』 とか甘くみてるとあとあとトンでもないことになる (OpenCV::GUI まわりで compile error 出まくり)。当たり前だけど Ruby/ffcall じゃダメ。callback.h が必要。ソースに入ってる callback.h.in をリネームしてもダメっぽかった。
次、いよいよ Ruby/OpenCV。予め Windows 側で OpenCV (sourceforge.net) をインストールしておく。
※ OpenCV 1.0rc をインストールしないとダメ。最新版の 1.0 には一部 .h ファイルがはいってない!ここ落とし穴。
そして cvs で Ruby/OpenCV の最新版のソースコードをダウンロード。みんなが c・v・s! c・v・s! 言ってるのはこれか。最近は svn だっけ?
cvs -d :pserver:anonymous@rubyforge.org:/var/cvs/opencv checkout CVSROOT
でもって下準備スクリプトを実行。
./misc/setup.cygwin.sh
で、Windows (C:\Program Files\OpenCV) にインストールした OpenCV ファイルが /usr/local/bin やら /usr/local/lib やら /usr/local/include/opencv にコピーされる。
※ Ruby/OpenCV 開発室 で配布してる昔のバージョン (0.0.5) には misc フォルダがない、というか別モノなので注意。
ruby extconf.rb --with-opencv-include=/usr/local/include/opencv
--with-opencv〜 指定しないと ckeck require headers... で no 出て終わる。
make
make install
で /usr/lib/ruby/site_ruby/1.8/i386-cygwin に opencv.so 出来る。
さていよいよサンプルファイルを実行、といきたいところだが、cvs 版の sample フォルダはカラッポ。そして 0.0.5 版に含まれてるサンプルファイルは、なんと cvs 版の Ruby/OpenCV と API が非互換!!
う、ウゴカネぇ。
しょうがないので、一番基本的なとこだけ抑えてみる。
#!/usr/local/bin/ruby
$: << "../"
require "opencv"
include OpenCV
capture = CvCapture.open(-1)
window = GUI::Window.new("camshift demo")
frame = nil
while true
frame = capture.query
window.show(frame)
end
なんかグレーなウィンドウがポツンと出てきた。あれ、白くなって・・・うわー応答なしだ。webcam 側の LED はスクリプト開始とともに点灯するので、画面に表示されてないだけかな。SDL で横取りすれば ok?
あーやれば出来る子だと思ってたけど絶望した。生粋の窓っ子の自分に絶望した。続きはまた明日。
・・・と思ったけど、未練がましくリファレンス見ながらちょびちょびいじってみたら、絵、撮れたよ!

while ループの中に
frame.to_CvMat().save_image( "test.bmp" )
と書いたらなんか保存された。赤いのは webcam の LED のせいです。
でも
window.show(frame.to_CvMat())
はダメみたい。転送が追いついてないのかな。まぁよかろう。OpenCV::GUI がダメなら Ruby/SDL があるじゃない。
あーでも、この opencv.so は cygwin 用なんだよなぁ。でも一歩くらい前進した。
OpenCV::GUI::wait_keyを実行しないと絵が表示されません
これはOpenCV付属のHighGUIの仕様っぽいです
引数に待ち時間(ミリ秒)を取るので動画ならばOpenCV::GUI::wait_key(1)とすれば多分表示できます
そうだったんですか。Ruby の方で sleep を入れてはみたんですけど全然ダメでした。OpenCV ライブラリの仕様だったんですね。