Video4Linuxによる画像の取り込み - Computer Vision を始めてみませんか?

 画像をコンピュータに取り込むことは、ビジョンを使ったシステムの構成の第一歩です。画像の取り込みには、ビデオキャプチャボード、USB、IEEE1394等を使ったいろいろな方法があります。ここでは、キャプチャボードとLinux上でビデオをキャプチャするためのAPI仕様であるVideo4Linux(V4L)を使った画像の取り込みについて概略を示します。サンプルプログラムがありますので、それを見て頂けるとビデオの処理が比較的容易に始められると思います。なお、V4Lは多くの人の努力の結果生まれたもので、ここで紹介していることは単にそれを借りているに過ぎません。

  【必要なもの】

  V4Lを使ったビデオキャプチャに必要な物は、

LinuxをインストールしたPC

Bt848やBt878を使用したキャプチャボード(Bt8x8はキャプチャチップです)

ビデオ機器

です。

  【機器の選定】

  具体的にどういう機器を使うかというのは頭の痛い問題です。ここでは出来るだけ安価で、かつ、家庭にもありそうなものを使った一例を示します。

 PC:Pentium850MHz,Memory512MB、Linux: Vine Linux 2.1CR

 キャプチャボード: IO-DATA GV-VCP2M/PCI

 ビデオ機器:Sony HandyCam DCR-PC100

PCのスペックは処理速度に関係しますが、もっと昔のPCでメモリも少なくても動きます。上記のキャプチャボードは数千円で買えると思います。ビデオカメラも今や広く普及しているものだと思いますし、ビデオ出力さえあれば何でも構いません。カメラがなければビデオデッキやPlayStation2のようなDVDプレイヤーでもOKですが、その場合すでに録画されている素材しか取り扱えません。

  【デバイスドライバの組み込み】

  キャプチャボードをPCのPCIバスに差します。そして、ソフトから制御するためにデバイスドライバを組み込みます。手順の一例は次の通りです。

 (1) ドライバモジュールi2c.o, videodev.o, bttv.oを探す。例えば、/lib/modules/2.2.x/mics等(2.2.xはカーネルのバージョン)にあります。ルートディレクトリからfindコマンド等を使えば見つかります。

 (2) デバイスファイルの確認。例えば/dev/videoがあるか。なければ、mknodで作りましょう。

 (3) /sbin/insmodで上記のモジュールを組み込みます。

 (4) dmesgによりボードの認識を確認。

IO-DATA GV-VCP2M/PCIでは、bttv.oの組み込みの際、insmod bttv.o card=2としてオプションを加えHauppauge oldとして認識させないと、2つあるコンポジット入力の2番目が使えません。また、カーネル2.4以降ではi2c.oが分割されてi2c-core.o, i2c-dev.o, i2c-algo-bit.oのようになっています。再起動したときに上記のモジュールが自動的に組み込まれるように、/etc/rc.d/rc.local等にモジュール追加のコマンドを加えておくと便利です。

  【キャプチャテスト】

  テストはxawtv等のソフトを使って行うことができます。ここではキャプチャした画像を使ってビジョンシステムを構築することを考えて、次のサンプルを置いておきます。 

 show_video_v4l.tar.gz

上記のファイルをダウンロードして、適当なディレクトリ内で展開してください。デフォルトのデバイスファイル名がcapture_v4l.hに指定してあります。/dev/videoになっていますので、必要に応じて変更して下さい。リンクにはMesaおよびglutが必要です。最近のディストリビューションなら含まれていますが、なければ末尾のリンクを見てください。正常にMake出来ればshow_video_v4lが出来ます。show_video_v4lに-v0(コンポジット1) -v1(コンポジット2) -v2(S入力)のオプションをビデオを入力している端子に応じて指定し、動作させるとX Window上に現在キャプチャされている画像が320x240の大きさで表示されます(左図)。デフォルトはS入力です。さらに、-sオプションをつけると、簡単なしきい値処理により画像内で赤みのある部分を緑で表示します。だいたいですが、肌色に対応した部分が抽出されていることがわかると思います(右図)。終了させるにはウインドウを左ボタンでクリックして下さい。

  V4LやMesa, glutを使ったプログラミングについては、下でリンクされているサイトや上記のファイルのソースを参考にしてもらえば、概略はわかると思います。このファイルの色抽出部分をあなたの望む処理に置き換えることによって、ビジョンシステムへの第一歩は踏み出せると思います。単眼での動画処理はもちろん、静止している物体のモデリング等が目的ならば、上記のキャプチャボード1枚だけでも3つのカメラを切り替えて使用できるので多眼システムとして使うことも出来ます。

  【リンク】

 以下に参考にさせて頂いたサイトやキャプチャ関連サイトをリンクします。 

   Video for Linux resources page

   かんたん Video4Linux プログラミング

   The Mesa 3D Graphics Library
   GLUT - OpenGL Utility Toolkit

   IEEE1394 on Linux