ゲーム画面をキャプチャしながらゲームするプログラム http://www.moonmile.net/blog/?p=252 の続き。
WEBカメラからの入力をUSBで受けて、動画として保存するには色々手段があるのだが、今回の場合はリアルタイム(できれば10フレーム/秒単位)で画像解析をしたい。すると、直接WEBカメラの画像を個々の静止画に落とす必要がある。
DirectShow キャプチャ – Google 検索
http://www.google.com/search?q=DirectShow+%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3&rls=com.microsoft:ja:IE-SearchBox&ie=UTF-8&oe=UTF-8&sourceid=ie7&rlz=1I7SNYL
DirectShow Capture
http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/directshow.html
DirectShow でビデオキャプチャ(前編) – 大阪府立大学 総合教育研究機構 第3教室 青木茂樹
http://www.las.osakafu-u.ac.jp/~aoki/cgi-bin/wiki.cgi?page=DirectShow+%A4%C7%A5%D3%A5%C7%A5%AA%A5%AD%A5%E3%A5%D7%A5%C1%A5%E3(%C1%B0%CA%D4)
PCカメラからのキャプチャ – C++&DirectShow
http://www.hyuki.com/yukiwiki/wiki.cgi?PC%A5%AB%A5%E1%A5%E9%A4%AB%A4%E9%A4%CE%A5%AD%A5%E3%A5%D7%A5%C1%A5%E3
Geekなぺーじ : DirectShowプログラミング [VC++]
http://www.geekpage.jp/programming/directshow/
DirectShow を使えば画面の描画/キャプチャができるようだ。
C++ での解説が多いが、今だと DirectX の .NET 版もあるので、C#から扱えると思う。まぁ、高速な画像解析をC#でやろうとするのはどうか、という問題はあるけど。C++/CLIで解析部分はラップするのがいいかもしれない。対戦アルゴリズム自体は C# や Lua で作るのでもよいし。
さて、WEBカメラだと画質が悪いので、ゲーム機のビデオ出力をパソコンで表示してそこから取り込むという方法もある(ただし、今回の目的は「画質が悪くても」のところに焦点を当てるので、画質にはこだわらない。というか、画質は多少悪くても「できる」ようにしないと。スペック的には 320×200 のような 低解像度のTV出力と同じレベルを考えている)。
PS2やPSPの場合はビデオ出力の端子があるので(残念ながら手持ちのDSiには無い…)、ビデオ出力をパソコンに取り込めれば良い。普通はVHSのビデオをDVDに変換するのが目的なのであるが、今回の場合はリアルタイム入力なので、取り込み画像を画面に出力させているものが望ましい。
ビデオカードを入れるっていう手もあるけど、最近は USB に変換してくれる出物がある。
PCA-DAV2
http://www.princeton.co.jp/product/multimedia/pcadav2.html
(amazonの評判では)画質的にはあまりよくないそうだが、これで十分だと思う。ArcSoft ShowBiz が付属しているからビデオ編集には持ってこい。って、ビデオ出力はできるよね?
ArcSoft ShowBiz DVD のマニュアル
http://www.princeton.co.jp/product/multimedia/img/pcadav2/ArcSoft%20ShowBiz%20DVD%202.2%20Manual%20Japanese.PDF
マニュアルを読むと「プレビューウィンドウの下に表示されている赤いボタンを~」となっているので、リアルタイムに表示はできる模様。となると、先のDirectShowを使って画面をキャプチャすることは可能なはず。
で、肝心のWEBカメラのほうは手持ちがないので、どうでもいい安物を物色中
価格.com WEBカメラ
http://kakaku.com/camera/web-camera/
Qcam Connect
http://www.logicool.co.jp/index.cfm/webcam_communications/webcams/devices/222&cl=jp,ja
なんて投げやりな値段と「ファン・フィルター」でいいじゃないでしょうか?…って、ロジクールストアで買うと在庫がないって言われるし。
DirectShow で操作可能な機種に限るので、Windows Driver Modle に従ったドライバーが出てないといけないんだが、まぁ、この時期に対応していないとは思われないので、どれでもいいのかな。
画像処理に関しては、DirectXのフィルタを直接使ってもいいのだが、手持ちの
実践画像処理入門
http://www.amazon.co.jp/dp/4563015725
を見ると、
3.濃度値変換による画像の強調
6.6 LOGフィルタとゼロ交差によるエッジの検出
12.色変換
14.テンプレートマッチングによる対象物の検出
15.ブロックマッチングによる差分画像の生成
が参考になると思う。
OpenCV プログラミングブック
http://www.amazon.co.jp/dp/483992354X
OpenCV http://opencv.jp/ のほうも調べてみるといいのかしらん?