Linux上でカメラを使ったプログラムを作るために、カメラを認識させてみました。そのときの状況を参考までに以下にまとめておきます。
なお、使用した環境は次のとおりです。
ホスト:Windows 7 Home Premire (64bit)
VMware:VMware Player 3.0.1, 3.1.0
ゲスト:Ubuntu 9.04 日本語Remix (32bit), Ubuntu 10.04 日本語Remix (32bit)
Webカメラ:Buffalo BSW20KM01 (UVC), Logitech C300 (UVC)
1.Webカメラの選定
Webカメラを持っていなかったので、Linux上で使えるWebカメラを調べてみました。
UVC (USB Video Class) という規格にのっとっていれば、2.6.26以降のLinuxカーネルにUVCドライバが組み込まれているようなので、多くのディストリビューションでこの組み込み済みのドライバを使ってカメラを利用できそうです。
http://en.wikipedia.org/wiki/USB_video_device_class
ということで、WebカメラとしてはUVCのカメラを選びました。
ただ、後述するように機種によって動作が異なるようです。
2.Ubuntu上で認識
今の開発環境は基本的に、VMware Player上にインストールしたUbuntuです。
VMware Playerの仮想マシン(ゲストOS)にUSBコントローラが含まれており、有効になっていれば問題なくゲストOS側でも認識できるはずです。しかし、いろいろ試した結果、結論としてはうまくいかない場合もありました。
今回試した状況をまとめておくと、
カメラ | VMware Player |
Ubuntu 9.04 | Ubuntu 10.04 |
Buffalo BSW20KM01 |
3.0.1 |
ゲストで認識:× |
-(試さず) |
luvcview:-(試せず) | |||
3.1.0 |
ゲストで認識:○ | ゲストで認識:○ |
|
luvcview:? (遅すぎて試せず) |
luvcview:△ (遅すぎて試せない場合あり) |
||
Logitech C300 |
3.1.0 |
ゲストで認識:○ |
ゲストで認識:○ |
luvcview:○ | luvcview:○ |
となりました。
上記表は、基本的に、カメラ、VMware Playerのバージョン、ゲストOSのバージョンの組み合わせで構成されています。 さらにゲストOSが認識できたこと(ゲストOS側にカメラを切り替え後、lsusbでデバイスが表示される)を表す『ゲストで認識』と、実際にluvcviewで表示をさせて成功するか、を確認しました。
Buffalo カメラ + VMware Player 3.0.1 + Ubuntu 9.04 の場合はなぜかうまくWebカメラが認識できませんでした。
Logitechのカメラを入手したタイミングもあり、Logitechカメラ + VMware Player 3.0.1 + Ubuntu 9.04 が試せなかったので、Buffaloカメラ固有の問題なのか、VMware Player の問題なのかは切り分けられていません。
Buffalo カメラ + VMware Player 3.1.0 + Ubuntu 9.04 または Ubuntu 10.04 の場合、ゲストOSの動作が異常に遅くなるという現象が見られました。これも原因は不明です。
Ubuntu 10.04の場合は、topで観察していると、カメラ接続後、ロードアベレージが急上昇し、数分たつと元のロードアベレージに戻るという現象が見られました。負荷が下がった後は普通に使うことができました。ただ、常にこうなったわけではなく、何度かカメラの接続をきったりつないだりすると、常に負荷が高くて作業に入れない場合もありました。
9.04の場合は、ロードアベレージはさほど上昇しないのですが、コマンド入力もできないほど応答が悪くなりました。
一方、Logitechのカメラの場合は、ゲストOSに関係なく、どちらも問題なく動作しました。
どちらのカメラもUVCという規格に準拠しているはずなのに、意外と動作に差があることに驚きました。
当面、Linuxでカメラを使ったコーディングは、Logitechのカメラを使うことにしようと思います。
なお、念のため、Buffaloのカメラについて補足しておきますと、Windows(ホストOS)での動作は全く問題ありませんでした。
また、上記の結果はあくまでも私の環境で得られたものですし、常に同じ結果となることを保障するものではありません。あくまでも参考情報としてください。