PCに搭載されているカメラの映像を取得して、解析等を行いたいと思ったことはないでしょうか?
今回、PCカメラの映像を加工して表示させるアプリケーションを作成しましたので紹介します。
【ソースコードはこちら】
2020/4/14追記
ソースコードをダウンロードして、Visual Studio からソリューションファイルを開くと参照部分にエラーが発生する場合があります。Nugetパッケージをインストールして下さい。
概要
PCに内蔵されているカメラと画像処理モードを選択することで、対応した映像をアプリケーションに表示します。
【画像処理モード】
- なし
- グレー : 映像がグレーになります。
- 顔認識 : 顔を認識した部分に赤の矩形を表示します。
パッケージ構成
今回のアプリケーションはVisual Studioで作成しています。プロジェクトフォルダ内には多くのファイルが含まれておりますので、主なファイルのみ説明します。
こちらは、上でダウンロード可能なソースコードと対応しています。
ファイル名 | 機能 |
---|
MainForm.cs | アプリの操作に対する各種処理 |
OpenCVSharpBitmap.cs | 映像を加工してBitmapで返すクラス |
haarcascade_frontalface_default.xml | 顔を検出するカスケードファイル |
製作手順
Visual Studio を用いたアプリケーションの製作手順について説明していきます。
①プロジェクトの作成
プロジェクトの作成に関して、詳細の説明は省略させて頂きます。
下記リンクを参考にしてプロジェクト作成まで進めてください。
Visual Studio での新しいプロジェクトの作成
②OpenCVSharpインストール
画像処理の機能を扱えるように OpenCVSharp を使用できるようにします。
「プロジェクト」→「NuGet パッケージの管理」を開きます。
参照をクリックし、「opencv」を入力します。
表示された一覧から、「OpenCvSharp3-AnyCPU」を選択してインストールします。
③AForge.NETダウンロード
PC付随のカメラを利用する際には、AForge.NETという外部ライブラリで一通りの処理がまかなえます。
ここで、カメラの映像取得用ライブラリを準備します。
AFroge.netの配布サイト
「Download Libraries Only 」を選択しダウンロードを行います。
④AForge.NET モジュール参照設定
ダウンロードしたフォルダ(AForge.NET Framework-2.2.5-(libs only).zip)の中に「Relese」というフォルダがあります。
この「Relese」フォルダから、今回必要な下記の2点のファイルをVisual Studioの参照設定に追加します。
- AForge.Video.dll
- AForge.Video.DirecrtShow.dll
⑤アプリケーションのデザイン製作
今回のアプリケーションはシンプルです。
フォームアプリケーションのデザイン側で、ツールボックスより、必要な数のComboBox、Button、Label、PictureBox、Timerを配置します。
ここで、PictureBox はカメラ映像を映す部分ですが、映像が大きい場合は、準備した PictureBox 内に映像が収まりません。
そのため、PictureBox の SizeMode を StreachImage に変更しておきましょう。
⑥ソースコードの埋め込み
ここからはソースコードについてです。まずは、フォームのコード側です。
▼ MainForm.cs
描画処理部分で、クラス「OpenCVSharpBitmap 」を使っています。
このクラスで、映像を加工してBitmapのデータを返す処理を行います。
▼OpenCVSharpBitmap .cs
⑦顔認識の方法
顔認識した矩形を映像に加える処理は、補足で説明しておきます。
まず、今回の顔認識では 「カスケード分類」 と呼ばれる方法を用いています。
予め、特定のモノを区別する設定値が含まれるXMLファイル(カスケードファイル)をダウンロードしておき、そのファイルを OpenCvSharp の関数から読み込みます。
顔認識に必要なXMLファイル「haarcascade_frontalface_default.xml」は、下記のgithubからダウンロードできます。
xmlダウンロード
今回のアプリケーションでは、カスケードファイルを同プロジェクトの実行フォルダに保存して扱うようにしています。
MainForm.cs
OpenCVSharpBitmap.cs
このように、カスケードファイルは実行ファイルと同じフォルダのファイルを参照しますので、ビルドする際にはカスケードファイルを一緒に出力させる必要があります。
これで説明は終了です。
今回はあくまでシンプルなアプリケーションです。
画像処理の実装方法などは流用できますので、自分好みのアプリケーションを開発していく参考になれば幸いです。
以上です。