Hatena::ブログ(Diary)

Imaginable Reality

2013-05-14

PCに接続されているWebカメラの映像を表示するだけのソフトを作りました (ソースコード付き)

 メディアアート製作やインタラクション系の研究に携わっている人なら、一度はWebカメラをシステムの一部として使ったことがあるでしょう。それはノートPCに内蔵されたチャット用Webカメラだったり、USBカメラだったり、USBビデオキャプチャだったりするわけですが、不思議なことにそういうものをテストするためのまっとうな道具がろくにありません。

 Webカメラ付属のソフトウェアが使いにくいのはもはや常識で(Lで始まる会社を毎度呪ってる人も多いはず)、それ以外の候補としてSkypeみたいなビデオチャットツールを使ったり、「ふぬああ」みたいなビデオキャプチャツールを使ったり、はたまたWebカメラを使うFlashが埋め込まれたWebサイトを表示させたりと、各自が突貫工事的な方法でやりこなしてるのが実情でしょう。ええ、よくわかります。

 というわけで、Webカメラのテスト用のシンプルなツールを作ることにしました。


CameraViewer

f:id:kougaku-navi:20130514140110p:image:w350 f:id:kougaku-navi:20131125234245p:image:w200

できること:

  • 複数のWebカメラがあるときに選択できる
  • 解像度の選択ができる
  • FPSの選択ができる
  • 画像の上下・左右反転ができる
  • フルスクリーン表示できる(映像表示中にスペースキーで切り替え)
    • レターボックス表示(アスペクト比を保持する)
    • アスペクト比を保持せずにズーム
    • アスペクト比を保持してズーム(画面端が切れる)

  ※初公開時から地味に機能が追加されてます。


ダウンロード:


 まさにシンプル・イズ・ベスト。見る人が見れば「はいはい欲しいのはこういうのです」と首をガクガクさせながら言ってくれるはず。フルスクリーン表示が結構便利で、プレゼンのときに書画カメラ的に使っています。ちなみにこのソフトを複数起動して複数のカメラを同時にモニタすることもできます。


手抜き事項

 1つ手抜きがありまして、一覧に表示される解像度とFPSはデバイスから取得した情報ではなく、 設定ファイル(config.txt)であらかじめ用意されたパラメータです。なので、実際に設定可能かはデバイスごとに試してみる必要はありますが、実用上これでさほど問題ないと思うので今はご勘弁を。


コードについて

 中身はVisualC++でMFCベースで書かれています。キャプチャ部分はOpenCVに頼りっぱなし。デバイス名を列挙したり、S端子とかコンポジットみたいなピンを列挙したり、明るさや露出を制御したりというキャプチャ関係のもう少し立ち入った処理はDirectShowでうーにゃーする必要があるんですが、その辺は昔こってりやってシンドイのを知ってるので、今回はパスです(最新のOpenCVはその辺どうなのか知りませんが)。

 なお、さっきのダウンロードページの下のほうにある「ExImage Library」の中にはDirectShowのこってりしたコードが入ってるので興味のある人はそちらをご参照ください。