PR

センサーの範囲内にいる人間を見つけて撮影・保存するKinectサンプル

2012年8月27日(月)
薬師寺 国安

今回紹介するサンプルは、Kinectセンサーの視界内に人間が存在する場合に、人間の画像を保存し続けるサンプルです。

部屋にKinectセンサーを設置し、部屋に誰かが侵入してくると、その侵入者を認識して記録を始めます。防犯対策にも一役立てるのではないでしょうか(笑)。

画像は「マイピクチャ」内にKinectというフォルダを作って、その中に保存します(図1)。データを削除したい場合は、「マイピクチャ」内のKinectフォルダごと削除してください。Kinectフォルダは自動的に作成されるようにしています。[データ一覧]ボタンで保存したデータを一覧できます。実際の動作は図2および動画を参照してください。

図1:マイピクチャのKinectフォルダに保存された画像(クリックで拡大)

図2:人を認識している図と動画(クリックで拡大)

サンプル一式は、会員限定特典としてダウンロードできます。記事末尾をご確認ください。

プロジェクトの作成

VS 2010のメニューから[ファイル(F)/新規作成(N)/プロジェクト(P)]と選択します。

次に、「WPF アプリケーション」を選択して、「名前(N)」に任意のプロジェクト名を指定します。ここでは「KINECT_CheckPersonInRoom」という名前を付けています。

ツールボックスからデザイン画面上にImageコントロール1個、TextBlockコントロールを3個、ListBoxコントロールを1個、Buttonコントロールを1個配置します。

書き出されるXAMLはリスト1、レイアウトは図3になります。最終的なレイアウトは図4になります。

リスト1  (MainWindow.xaml)

  • (1)Kinectセンサーの前に人がいると「記録中」と表示するTextBlockです。
  • (2)Kinectセンサーの前に人がいる時はTrue、そうでない時はFalseを表示するTextBlockです。このTextBlockは最終的に非表示とします。
  • (3)Kinectセンサーの視界内に人がいる時の日時を表示するListBoxです。
  • (4)Kinectセンサーの視界内に人が現れた時の日時を表示するTextBlockです。最終的には非表示とします。
  • (5)初期の状態ではButton1の使用は不可となっています。
<Window x:Class="MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="MainWindow" Height="612" Width="474">
  <Grid>
    <Image Height="336" HorizontalAlignment="Left" Name="Image1" Stretch="Fill" VerticalAlignment="Top" Width="448" Margin="-1,-1,0,0" />
    <TextBlock Height="49" HorizontalAlignment="Left" Margin="72,404,0,0" Name="TextBlock1" Text="" VerticalAlignment="Top" Width="295" FontSize="28" FontWeight="Bold" Foreground="Red" />■(1)
    <TextBlock Height="48" HorizontalAlignment="Left" Margin="377,404,0,0" Name="TextBlock2" Text="" VerticalAlignment="Top" Width="63" FontSize="32" FontWeight="Bold" Visibility="Visible" />■(2)
    <ListBox Height="58" HorizontalAlignment="Left" Margin="24,459,0,0" Name="ListBox1" VerticalAlignment="Top" Width="416" FontSize="22" FontWeight="Bold" />■(3)
    <TextBlock Height="39" HorizontalAlignment="Left" Margin="24,522,0,0" Name="inTextBlock"  VerticalAlignment="Top" Width="409" FontSize="26" FontWeight="Bold" Visibility="Visible" />■(4)
    <Button Content="データ表示" Height="58" HorizontalAlignment="Left" Margin="12,341,0,0" Name="Button1" VerticalAlignment="Top" Width="428" FontSize="32" FontWeight="Bold" IsEnabled="False" />■(5)
  </Grid>
</Window>
図3:リスト1の内容でレイアウトされた画面(クリックで拡大)

図3の画面から、TextBlock2とinTextBlocのVisibilityプロパティにCollaspedを指定して非表示にします(図4)。

図4:最終的な、各コントロールを配置した画面。図3と比べるとTextBlock2とinTextBlockが非表示になっている(クリックで拡大)

参照の追加

VS2010のメニューから「プロジェクト(P)/参照の追加(R)」と選択して、各種コンポーネントを追加しておきます。今回追加するのは、Microsoft.KinectとCoding4Fun.Kinect.Wpfの2つです。「.NET」タブ内に表示されていないDLLファイルは「参照」タブからDLLファイルを指定します。

Microsoft.Kinect.dllは、C:\Program Files\Microsoft SDKs\Kinect\v1.5\Assemblies内に存在しますので、これを指定します。

CodingFun4.Kinect.Wpf.dllは「基本編」でCoding4Fun.Kinect.Toolkitをダウンロードして解凍したフォルダ内に存在していますので、それを指定してください。

Coding4Fun.Kinect.Toolkitは下記のURLよりダウンロードできます。
→ Coding4Fun Kinect Toolkit(CodePlex)

解凍したファイルの中からCoding4Fun.Kinect.Wpf.dllを使用します。

Think IT会員限定特典
  • センサーの範囲内にいる人間を見つけて撮影・保存するKinectサンプル

薬師寺国安事務所

薬師寺国安事務所代表。Visual Basic プログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。1997年に薬師寺聖とコラボレーション・ユニット PROJECT KySS を結成。2003年よりフリーになり、PROJECT KySS の活動に本格的に参加、.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。Windows Phoneアプリ開発を経て、現在はWindows ストア アプリを多数公開中

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。

連載バックナンバー

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています