DirectShow初心者が、VB.NET 2008からWebカメラにアクセスする為の7つのポイント : つねづね思ふこと

«« ブックマークレットPaste Titleで、ブログをちょびっとだけ素早く更新しよう! | RE) 飲み会等で好きなタイプの芸能人を聞かれたら? »»

DirectShow初心者が、VB.NET 2008からWebカメラにアクセスする為の7つのポイント

2010年11月21日

このエントリーをはてなブックマークに追加
VisualBasic.NET 2008からPCに搭載された(もしくは外付けされた)Webカメラにアクセスする為のポイントを紹介。肝心のソースコードは記載していないので、M.Oshikiri's HomePageさんのページ( http://www.geocities.jp/konbiki/ )を参考にするのがお勧め


先日、Visual Basic .NET 2008で構築しているシステムにWebカメラを組み込んでもらえないか?
という話になり、早速組み込んでみようとしたのですが、思いの外悪戦苦闘したのでメモ。

VB2008から、Webカメラを組み込むのは(初めてな人は)、なんて面倒なんだ!
(最新のVisualStudio2010では、もしかすると改善されているのかもしれないけど)。

1.VBはどこかのシリアルポート等とは違って、Webカメラは標準コンポーネントには含まれていない。

2.Windowsの標準的なAPIにも、Webカメラをアクセスする命令はないみたい。

3.でもDirectXのDirectShowから呼び出す事は可能。
その為、Webカメラアプリケーション開発者は事前にDirectXSDKをインストールする必要がある。
・・・というのはGeekなぺーじ : DirectShowプログラミング [VC++]によると昔の話で、2005年4月以降DirectShowはPlatform SDKに移行したらしい。
そのPlatform SDKですが、VS2008インストールでVC/PlatformSDKが存在しない - MSDN:VisualStudioフォーラムによると、VisualStudio2008では、Windows SDK6.0Aのサブセットがインストールされているので、そちらを使って開発していくものらしいです。

4.そのWindows SDK6.0AのサブセットにあるDirectShowですが、C#及びVBからのアクセスは整備されていないらしいです。
そこで、自分が根性で整備するか、もしくは外部のライブラリ(DLL)やモジュールを使用する必要があるとのこと。
ちなみに、根性で整備するのは、初期化するだけでも相当なコードと理解力が必要なようで、挫折。

5.そこで私が選んだのが「DirectShow関係 - M.Oshikiri's HomePage」で、紹介されている「3.2 サンプルグラバによる静止画取得」
ホームページに『ソースは自由に流用して頂いて結構です。』と記載されているので、遠慮なく解析させてもらいましょう。日本語万歳!ありがとう!!
なお、DirectShowDefine.vbとDirectShowUtility.vbは、どちらもDirectShowにアクセスする為のモジュールなので、ここにアクセスしている関連ファイル(FrmView.vbとFrmImage.vbあたり)を中心にアクセス方法を調べていくのが吉。
ちなみに、DirectShowLibやDShowNETというフリーDLLを使って開発していくのもいいらしいですが、私のVB2008からでは、なぜか"指定されたキャストは有効ではありません。"とかいう例外が発生しまくって、終電後自分のアパートで枕を涙で濡らすはめに。なんで動かへんねん!

6.で、肝心のプログラムの流れですが、以下のような流れらしい。

■グラフの初期化

■デバイス(Webカメラ)の認識

■グラフの作成
サンプルグラバフィルタの生成・設定
 ↓
サンプルグラバをグラフに追加
 ↓
サンプリング開始

■取得できた画像の出力先をpictureboxに割り当てて再生

■(終了時)グラフの解放

7.6番の中にいくつかDirectShow専門用語がでてきますが、その意味は大体以下の通り。

○グラフ
 次の項目で説明しているフィルタの集合体を指します。

○フィルタ
 DirectShowでは、Webカメラからの画像を、様々な処理を経由して一般に扱えるようになるのですが、その途中の処理の一つ一つをフィルタというそうです。
 フィルタの例
 ソースフィルタ・・・Webカメラからデータを取得する
 変換フィルタ・・・圧縮やエフェクトを行う
 レンダラフィルタ・・・ディスプレイやファイルに出力する

○サンプルグラバ
 取得した画像を無加工で出力する、ベーシックなグラフ

ってな感じに理解した。間違っていたらご指摘ください。
で、未経験だと解説ページの言っている意味やサンプルコードの意味不明な例外の山でなかなか理解が進まなかった。
初めてカメラの映像が自分のコードで動き出した時には、殆どM.Oshikiriさんのコードを模写していたとはいえ、ちょっと感激!

とはいえ、もう少しなんとか優しくしてもらえないことか。



■広告

VisualBasic2019パーフェクトマスター (Perfect Master)
金城俊哉
秀和システム
売り上げランキング: 54,683

 


■修正履歴

2020/03/07 Flash部分とお知らせを削除、広告『VisualBasic2019パーフェクトマスター (Perfect Master)』を追加

2010/11/21 初稿掲載


投稿者 kuze : 2010年11月21日 01:10


■このエントリーに関連した記事

■「実用ソフト&サイト」カテゴリの最新記事

«« ブックマークレットPaste Titleで、ブログをちょびっとだけ素早く更新しよう! | RE) 飲み会等で好きなタイプの芸能人を聞かれたら? »»


自己紹介
PHPやVBによるコーディングやシステムエンジニアを仕事にしています。
主にiPhoneアプリの紹介やWeb開発などのPC系の話題と、アニメやゲームなどのサブカルな話題を取り扱っています。

[PR]

instagram

カテゴリ

最近のエントリー

最近掲載した画像
  • 映画『ゴジラ-1.0』レビュー(ネタばれあり)
  • Three-up HC-T2206WHで狭い部屋も快適に
  • 「君たちはどう生きるか」は父親を気にするかで評価が別れそう(ネタバレあり)
  • 画像生成AIソフトでしばらく毎日SNSに画像を上げてみたけどネタ出しについて
  • ホットクックを使えば一人で並行して色々作りやすくなるのでオススメ
  • ホットクックを使えば一人で並行して色々作りやすくなるのでオススメ
  • ホットクックを使えば一人で並行して色々作りやすくなるのでオススメ
  • Python3.4向けにつくったAPIが、Python3.6では動かなくなったので直してみた

RSS
更新情報はRSSをご利用下さい