.NET Gadgeteer デモ ~ 簡易 監視カメラ(高速版)

.NET Gadgeteer のデモ、今回は監視カメラもどきです。前の記事では簡単ロジック版を紹介しましたが、今回はちょっとだけ(本当にちょっとだけ)コード量が増えますが、高速に動作するものを紹介します。
※前回のはコードがシンプルなんですが動作がもっさりなので、高速なのも見たいですよね。

 

モジュールの接続は前回と同じ。

image

 

コードは以下の通り。

  1. using System.Threading;
  2. using Microsoft.SPOT;
  3. using Microsoft.SPOT.Presentation;
  4. using Microsoft.SPOT.Presentation.Controls;
  5. using GTM = Gadgeteer.Modules;
  6.  
  7. namespace DistCameraDemo02
  8. {
  9.     public partial class Program
  10.     {
  11.         private Window _mainWindow;
  12.         private Image _capturedImage;
  13.         private Bitmap _streamBitmap;
  14.  
  15.         // This method is run when the mainboard is powered up or reset.   
  16.         void ProgramStarted()
  17.         {
  18.             camera.BitmapStreamed += camera_BitmapStreamed;
  19.  
  20.             InitWindow();
  21.  
  22.             new Thread(GetDisctance).Start();
  23.  
  24.             // Use Debug.Print to show messages in Visual Studio's "Output" window during debugging.
  25.             Debug.Print("Program Started");
  26.         }
  27.  
  28.         private void GetDisctance()
  29.         {
  30.             while (true)
  31.             {
  32.                 var dist = distance_US3.GetDistanceInCentimeters(3);
  33.                 Debug.Print(dist.ToString());
  34.                 if (dist > 10 && dist < 100)
  35.                     camera.StartStreamingBitmaps(_streamBitmap);
  36.  
  37.                 Thread.Sleep(500);
  38.             }
  39.         }
  40.  
  41.         void camera_BitmapStreamed(GTM.GHIElectronics.Camera sender, Bitmap bitmap)
  42.         {
  43.             _capturedImage.Bitmap = bitmap;
  44.             camera.StopStreamingBitmaps();
  45.         }
  46.  
  47.         private void InitWindow()
  48.         {
  49.             _mainWindow = display_T35.WPFWindow;
  50.             _capturedImage = new Image() { Bitmap = new Bitmap(320, 240) };
  51.             _mainWindow.Child = _capturedImage;
  52.  
  53.             _streamBitmap = new Bitmap(320, 240);
  54.             Thread.Sleep(5000);
  55.  
  56.             for (int i = 0; i < 5; i++)
  57.             {
  58.                 Mainboard.SetDebugLED(true);
  59.                 Thread.Sleep(200);
  60.                 Mainboard.SetDebugLED(false);
  61.                 Thread.Sleep(200);
  62.             }
  63.         }
  64.     }
  65. }

 

コード量が増える、といっても大したことないですね。かつ、増えている理由が、

  • カメラ撮影の画像をストリーミングで取得するための初期化コード
  • ディスプレイへの表示を WPF で組み立てているから(残念ながら XAML は解さないので、C#でやっています)

が大きいです。距離を測って撮影して表示する、という機能の本質ではない部分が増えるのでちょっと面倒に思えますが、よく見るとそんなに難しいコードというわけでもありません。

深度センサーで人 or モノまでの距離を 1秒単位に測定し、10cm から 100cm の間にあれば、カメラ撮影のストリーミングを開始します。
ストリーミングでデータが送られてきたら、ディスプレイに表示してストリーミングを終了します。

これだけで前回のデモに比べて高速化します。

なおコードの最後の部分で、メインボード上の LED を5回点滅させています。カメラの初期化には2~3秒かかるので念のため 5秒スリープしています。これが終わったよ、というのを教えるために LED を点滅させてみました。監視カメラの機能としては必要なコードではありません。

 

実際の実行結果はこうなります。
(例によって、友情出演はバリーさん。プラス、愛猫ロイドw)

 

 

こういったデバイスが簡単に作れるのが .NET Gadgeteer です。簡単すぎて拍子抜けするほどです。
非常に楽しい技術です。ぜひ皆さんもお試しを!興味を持った方は こちらのページ を参考にモジュールを買ってみるといいですよ。

広告
カテゴリー: .NET Micro Framework タグ: , パーマリンク

.NET Gadgeteer デモ ~ 簡易 監視カメラ(高速版) への1件のフィードバック

  1. ピンバック: .NET Gadgeteer デモ ~ 簡易 監視カメラ(簡単ロジック版) | 技術との戯れ

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中