.NET Micro Framework + Windows Azure + Windows 7 + Windows Phoneでセンサークラウドプロトタイプ

最近、電力見える化や農業クラウドなど、センサークラウドが実用化の時期を迎えつつあります。タイトルに挙げたテクノロジーを使えば、センサークラウドのプロトタイプが廉価で手軽に実現できるのでは、ということで投稿してみました。想定としては、 このポストで説明した方法でプロトタイプを作成し実証実験 結果をもとに本格稼動に向けて、デバイスやサービス、アプリを構築 といった流れを考えています。 センサークラウドの基本構成要素は、 センサーデバイス+小型組込み機器   センサーノードとしてフィールドにばら撒かれる データ収集用ネットワークストレージ    ネットワーク上で稼動 データ分析・活用ネットワークサービス   ネットワーク上で稼動 システム管理者向けアプリ          PC等で稼動 ユーザー向けデータ活用アプリ       PC、タブレット、スマートフォンなどで稼動 になるかと思います。最初に挙げたセンサー機器で測定対象の各種データ(電力や温度、湿度、大気圧、照度、などなど)を収集し、2番目のストレージに格納、3番目のサービスで活用し、4番目でシステムを管理、5番目でユーザーが見たり指示したり、といった構成です。あい これらとタイトルに挙げた技術をそれぞれマップしていくと、 センサーデバイス+小型組込み機器 プロトタイプを作るなら、.NET Micro Frameworkデバイスが利用可能です。.NET Micro Frameworkが動く市販のデバイスは、GHI Electronics社のFezシリーズやNetduinoがあります。これらは、ボードだけなら4000円~1万円程度、接続可能なセンサーデバイスも多数売られている(数百円から数千円)ので、プロトタイプのレベルなら多額の投資がなくても利用可能です。アプリケーションはC#やVBを使って、.NET Framework系のネットワーク機能が豊富に揃ったライブラリを使えるので、デバイス上のプログラムも容易に作成できます。.NET Micro FrameworkはApache V2ライセンスで提供されるオープンソースなので、ライセンスフィーもいりません。 データ収集用ネットワークストレージ ネットワークストレージには、Windows Azureのストレージサービスや、SQL Azureが利用可能です。Webから申し込み手続きをしてすぐ使え、実験中だけ稼動し、終わったら、契約を終了可能です。実験環境としては最適でしょう。 データ分析・活用ネットワークサービス こちらは、Windows Azureが、データ分析・活用サービスのホスティングサイトとして利用可能です。こちらもSQL Azureと同様、使いたい時だけ使えるので、プロトタイプ向きといえるでしょう。また、Windows Azure上で作成したサービス向けクライアントアプリはWindows系アプリだけでなく、アンドロイドやiPhone向けのものが作成可能です。 システム管理者向けアプリ こちらは、Windows 7 PCが利用できます。Windows Azure上にRIAとして構築しても構いませんし、ネットワークサービスと連携するPC上で動くアプリを用意するのも良いでしょう。特に専用のPCを用意する必要もなく、通常のPCで十分です。もしゲートウェイや専用デバイスが必要であれば、Windows 7の組込み版OSであるWES7や、Windows Embedded Compact 7 デバイスが利用可能です。 ユーザー向けデータ活用アプリ こちらは、Windows 7 PC、Windows Phone 7を使って、RIAサービスや、それぞれのOS上で動くクライアントアプリを作るこことも出来ます。ブラウザ内で動くアプリだけでよいのではと思う方もいるかもしれませんが、画面の大きさや操作性、各デバイスが装備している機能との連携を考えると、今後はむしろネットワークサービスとして連携してデバイス二インストールされて動くアプリのほうが主流になるのではないかと私は予想してます。デバイス側もどんどん進化しますからね。 以上、ざっと紹介しました。上の組合せであれば、開発環境はVisual Studio 2010で全て開発可能ですし、同じ言語、同じ流儀のライブラリーを使える、つまり同一スキルセットでプロトタイプ作成が可能です。本格システムの場合は、認証や暗号化などセキュリティが必要になりますが、App Fabricを使えば、何とかなりそうです。 図にするとこんな感じ 以上、簡単ですが、今後も方々でこの話題は話したり、ブログ書いたりする予定なのでよろしくお願いします。ではまた…

0

Windows PhoneからSkyDriveにファイルをアップロードする方法

既にMarketplaceから公開されているSensor Checkerを見ながら思った。計測結果をファイル化したいと。都合よくLive SDK v5.0が公開され思った。SkyDriveに計測結果をアップしたら便利だよなと、無料で25GBだし…ということで、計測結果をファイル化してSkyDriveにアップする機能拡張を行いました。既に機能追加版はMarketplaceにアップロードしたので、Rejectされなければ直ぐアップデートされるはずです。 SkyDriveへのファイルアップロードは、意外と簡単。方法を順番に説明していきます。 1. 最新版のLive SDKをダウンロード&インストール http://www.microsoft.com/download/en/confirmation.aspx?id=28195 からファイルをダウンロードして、ダブルクリック&インストールします。 2. Windows Phone向けのアプリケーションプロジェクトを作成し、参照設定にLiveのコンポーネントを追加 Microsoft.Live Microsoft.Live.Controls を追加します。 3. Appクラスに、LiveConnectSession型のスタティックなプロパティを追加する Appクラスは、App.xaml.csにあります。 using Microsoft.Live; を先頭に加え、     public LiveConnectSession LiveSession { get; set; } を定義しておきます。 これで準備は万端です。 4. Windows Liveへのサイン用ページを作成 プロジェクトにページを一枚追加します。そのページの先頭のほうに、名前空間を以下の様に追加します。 <phone:PhoneApplicationPage     …    xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″    xmlns:live=”clr-namespace:Microsoft.Live.Controls;assembly=Microsoft.Live.Controls”    FontFamily=”{StaticResource PhoneFontFamilyNormal}”    … そして、Windows Liveのサインインページにナビゲートする為のボタンを追加します。             <StackPanel Name=”SigninPanel” Grid.Row=”0″>                <TextBlock Text=”Signin to SkyDrive” FontSize=”24″ HorizontalAlignment=”Center”/>               …

0

Windows Phone FMラジオを操作するアプリの注意点(バックグラウンドの音楽演奏)

というわけで、またFM Radio Wave Level CheckerがRejectされてしまいました。「音楽を演奏した状態でこのアプリを起動して、端末のボリュームスイッチ(IS12Tの場合は、電源ボタンの下)を押し、表示されたPlayerメニューバーで音楽を止めると、例外発生するよ」と、フィードバックには英語で書いてあり、実際やってみると、あ本当だ!!。 発生したExceptionをじっと見ると、どうやらXna FrameworkのFrameworkDispatcherのUpdate()がコールされていないのが原因と判明。前に、マイクロフォンからの音を録音する方法をこのブログで紹介した時紹介した、FrameworkDispatcher、どうもアプリでPlayer系を弄る時には、回さないと駄目らしい。 ということで、ページのクラスに、OnNavigatedTo()メソッドを加え、         private DispatcherTimer loopTimer;        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)        {            loopTimer = new DispatcherTimer();            loopTimer.Interval = TimeSpan.FromMilliseconds(50);            loopTimer.Tick += delegate { try { Microsoft.Xna.Framework.FrameworkDispatcher.Update(); } catch { } };            loopTimer.Start();             base.OnNavigatedTo(e);        } とコーディングし、OnNavigatedFrom()メソッドで、このloopTimerのStop()メソッドをコールするルーチンを追加しました。 これでやってみると、音楽の演奏を止めた時の例外が発生しなくなったので、これでOKなのだろうなぁ…ということで、また懲りずにMarketplaceに登録。幾らなんでももう大丈夫かな?結果は多分クリスマスイブ辺り。プレゼントになるかどうか、お楽しみ。 教訓:Microsoft.Xna.Framework.Media.MediaPlayerを弄るアプリを作る場合は、FrameworkDispatcherのUpdate()コールループを入れるべし!! …SilverlightプロジェクトよりXnaプロジェクトで最初からやったほうが良いかも。 FM Radio Wave Level Checkerに関する過去の投稿は以下のとおり FM Radio Wave Level Checkerの最初の投稿…

0

Windows Phoneページ遷移には色々あるよね

Sensor Checkerのダウンロードがもう直ぐ400を超えそうな勢いで、非常に嬉しいな…ということで、機能追加アップデートを開始しました。グラフ化された計測値のデータを、別のアプリで活用できるように、 E-Mailで送る SkyDriveにアップロードする の二つを予定していてE-Mail送付の機能は既に完成済み。このポストでは、先ずはE-Mail送付の機能を追加した時に気がついた、ページ遷移ロジックを作る時の注意点をメモります。 E-Mailを送付する画面としては、こんな感じのものをよういしました。 測定したデータをContentに表示し、一番上のテキストボックスにE-Mailアドレスを入力します。Memo欄に、測った時の状況(例えば、「100メートルダッシュ!」とか「素振り100本!」とか「力いっぱいトゥ!」とか)を入力、Sendボタンをタッチすれば、E-Mailアドレス送付タスクが起動して、メールの本文にXML形式で記述された計測値が格納されて送付される寸法。E-Mail送信は、 var task = new Microsoft.Phone.Tasks.EmailComposeTask();task.To = address;task.Subject = “sensor”;task.Body = “…”;task.Show(); で、Windows Phoneが提供するE-Mail送信機構が起動して簡単に送付できる。ここまではよかった。だが、しかし… このページの色々な表示は、OnNavigateTo()メソッドの中で作っています。で、E-Mail送信用ページが表示されて、送信が終わると、このページに戻ってくるわけですね。で、当然OnNavigatedTo()メソッドがまたコールされるわけです。まぁ当たり前だね。しかし、センサーページでやっていることをひっくるめた処理の流れを書くと、 センサーページでStartボタンをタッチ→Stopボタンがタッチされるまでセンサーで計測した値をメモリに保持 センサーページでSendボタンをタッチ→メモリに保持した内容をXML形式でIsolatedStorageにファイルとして保存 保存したファイル名を付加して、このページに遷移 ※ここまでがセンサー計測ページ側の処理 このページのOnNavigatedTo()メソッドがコールされる センサーページから渡されたデータのファイル名を、NavigationContextから取り出す ファイルを開き、Contentに書き込む ファイルはもういらないので、IsolatedStorageから削除 となっていて、センサーページからこのページに遷移した時は全く問題ないけれど、E-Mail送信ページから戻ってきた時にOnNavigatedTo()メソッドを実行しようとすると、4番のステップから実行されるので、既に削除してしまったファイルを開く破目になる。当然エラー発生。センサー計測のページからの遷移の時と、E-Mail送信ページからの戻りの時は区別するコードが必要って訳です。 まぁ、「単なる設計不足醬!!」といわれればそれまでですが、人間、あるページから能動的に遷移を書いているときは注意が向いても、終わって自動的に戻ってくる時は案外抜けがちなので、設計時にご注意。   ついでに、メールアドレスを手入力するのはとっても面倒なので、Microsoft.Phone.Tasks名前空間のEmailAddressChooserTaskを使って、アドレス帳から選択可能にする機能を加え多野で紹介しておく。 var task = new Microsoft.Phone.Tasks.EmailAddressChooserTask();task.Completed += new EventHandler<Microsoft.Phone.Tasks.EmailResult>(task_EMailAddrSelectCompleted);task.Show(); とやればこちらも簡単にアドレス選択用のデフォルト機能を使え、登録したハンドラがコールされると、選択結果が返ってくるので、それをアドレス用テキストボックスに代入すればよろし。 更に、センサー計測値なんてものは、多分自分にしか送信しない(筈)なので、ころころ変えるもんじゃない。だから、Sendボタンをタッチした時のハンドラで、 var appSettings = System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings;appSettings[“address”] = textBoxAddres.Text; と書いておけば、アプリの設定として保存される。それで、OnNavigatedTo()内で、 var appSettings = System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings;if (!appSettings.Contains(“address”)){    appSettings.Add(“address”,””);}textBoxAddress.Tex…

0

Windows Phone FM Radio Level CheckerがMarketplaceでまたReject?

あ~あ、またRejectされちまったい…て事で、現在Windows Phone 7のMarketplaceに申請中のFM Radio Wave Level Checker(まぁ…なんちゃってアプリ系ですが)、2回目のRejectを食らいました。前回は、「フレームカウンター表示されとんでぇ」でしたが、今回は、何でRejectされたか紹介しておきます。多分Radio系をいぢるアプリを作る時の参考ぐらいにはなるでしょう。 アプリケーションへのRequirementsに、「ユーザーがバックグラウンドで音楽聞いてるとき、邪魔しちゃ駄目ん」という項目があります。FM Radio Wave Level Checkerは、ラジオをONにしてある周波数の電波の強度を測る為、バックグラウンドで演奏されている音楽が必然的に止まってしまいます。そこんとこ意識してなかったので、2度目のRejectを食らったわけですわ。 音楽がPlay中かどうかは、次のコードで簡単にわかります。 if (Microsoft.Xna.Framework.Media.MediaPlayer.State == Microsoft.Xna.Framework.Media.MediaState.Playing){    … この条件式がtrueなら、ユーザーに「You 止める?」というメッセージを出して、ユーザーの同意を得て止める操作が必要なんですね。演奏終了は、MediaPlayer.Stop()をコールすれば良いのですが、MediaPlayerの状態を変えるメソッドをコールするには、マイクの使い方で説明した、処理ループを用意しないといけないらしいので、今回は時間もなく、「止めてん」という表示を出すに留めました。 これで、Marketplace通るといいなぁ・・・

0

Windows Phone 7 Emulatorのフレームレートカウンター

※内容に微妙な部分があるので補足しておくと、「フレームレートカウンターが写っていると、Marketplaceでその画像を使った場合、リジェクトされる可能性あり」ということですので、念のため。 が~ん、またReject…今度は何?アプリケーション画面にフレームレートカウンターが写ってるから駄目?…ってことで、調べてみました。他のエバのブログにも特に説明がないようなので、ここで解説しておきます。 英語の説明は、こちらhttp://msdn.microsoft.com/en-us/library/gg588380(v=VS.92).aspx フレームレートカウンターは、図の通り この意味するところは、上から、 Composition Render Thread FPSComposition Render スレッドの更新レート User Interface Thread FPSUIスレッドの実行レート Texture Memory Usageアプリケーションで使用されているテクスチャに関するビデオメモリとシステムメモリのコピー量 Surface Counter明確に表面に描画するためにGPU処理に渡される数 Intermediate Surface Counterキャッシュされた表面用に暗黙的に生成された数 Screen Fill Rate Counterスクリーンの一フレームあたりで描画されたピクセル数。480X800ピクセルを1として表現 という意味だそうです。要はアプリケーションのパフォーマンスがどうかってことですね。作ったアプリがもっさり動いとるなぁ…という場合には、この値が参考になるかもしれません。で、プロジェクトを作成した直後はデフォルトで表示される設定になっています。…が、このままスクリーンショットを撮ってMarketplaceに登録すると駄目なんだねぇこれが。 なので、Marketplaceに登録する画像をスクリーンショットする前に、App.xaml.csを開き、         public App()        {            // キャッチできない例外のグローバル ハンドラーです。             UnhandledException += Application_UnhandledException;             // Silverlight の標準初期化            InitializeComponent();             // Phone 固有の初期化            InitializePhoneApplication();             // デバッグ中にグラフィックスのプロファイル情報を表示します。            if (System.Diagnostics.Debugger.IsAttached)            {               …

0

Robotics Developer StudioのCCR/DSS紹介

そういえば、このブログで説明していなかったなと気づき、解説しようかなと。Robotics Developer StudioのCCRとDSSを紹介します。 先ず、Robotics Developer Studio自体知らないという方にちょっとだけ解説。 Robotics Developer Studioは、マイクロソフトが提供する、ロボット制御向けミドルウェアと開発環境一式です。ロボット制御向けというか、沢山のコンピュータノードがネットワークで繋がって連携して分散動作する為の基盤として位置づけられています。最初のバージョンがリリースされてから既に4年以上たっていて、今一番新しいのはRDS 4.0のBeta版です。最新版はKinectやSilverlightにも対応しています。 以下長いのでRDSと約します。 RDSは、主に3つの要素から成り立っています。 ネットワークで繋がっている分散並行処理を行う為の基盤ミドルウェア - CCR/DSS 各ノードに配置されて動作する単位(サービス)を組合わせ&ノードの配置を記述するオーサリングツール – Visual Modeling ToolとDSS Editor ロボットの動作をしミューレートする為の物理シミュレーター RDSを試すには、 http://www.microsoft.com/robotics (※全て英語でごめんなさい)からSDKをダウンロード&インストールすればOKです。SDKには、上の3つと、各種ドキュメント、サンプルコード、チュートリアルなどが入っています。 さて、CCR/DSSの説明に移ります。この二つの用語はそれぞれ、 Concurrency and Coordination Runtime Decentralized Software Services の略です。実はETロボコンの計測システムのミドルウェアとして2年前まで実際に使っていたりします。 Robotics Studioは、ネットワーク上に分散して配置された状態を持ったサービス(コンポーネントと考えてよい)群が、必要な他のサービスとメッセージを非同期に送受信しあってシステムの動作を実現することを想定しています。メッセージを受信したサービスは、そのメッセージと自分の状態に応じて処理を行い、必要に応じて他のサービスにメッセージを送ります。全てが非同期かつ並行に動作し、各サービスが協調してシステムの責務を達成していきます。 CCRは、その基盤となる非同期メッセージの送受信を.NET上で実現する為のManaged Code ライブラリです。http://msdn.microsoft.com/en-us/library/bb905457.aspxこのランタイムを使えば、それぞれのサービスは、送信したメッセージの状態や、送られてきたメッセージの順序や複数サービスから送信されてくるメッセージを受信する為のスレッド制御などを一切関知することなく、状態モデルとして、そのサービスが行うべきことに注力して開発することが可能です。CCRライブラリを使ってRDSで動作可能なサービス(コンポーネント)部品を、C#やVBでVisual Studioを使って開発することができます。 ※RDSが昔初めてリリースされた直後は、まだマルチコアは珍しく、並行処理に関するプログラミング言語の進歩も未熟だった為、かなり面白いテクノロジーではあったのですが、現在はC#やVC++でもParallel & Concurrentに関する技術が追加されたため、ちょっと特殊かなと思われますが、RDS全体としては完成度が上がってきたので、RDSの機能を使いたい場合にはそれなりに便利なライブラリセットではあります。 - う~ん微妙な説明 DSSは、CCRのライブラリ群の上に構築された、複数のサービス間でメッセージを非同期に送受信する状態を持ったサービスを、ネットワーク上で連動させるシステム基盤です。http://msdn.microsoft.com/en-us/library/bb905470.aspxサービスのインスタンスを所望のノードに配置したり、サービスインスタンスの状態を監視したり、ノードに配置されたサービスインスタンスを連携させたりするシステムです。サービスの配置や状態監視もまたCCRで記述されたサービスとして用意されています。サービス間の通信には、DSS Protocolと呼ばれる、SOAPの上に今クラウド系で流行のRESTスタイルのAPIを定義したプロトコルを使います。 ※既にここ2、3年でクラウド技術の進展により、HTTP上でのRESTスタイルのAPIが主流になったのと、加えてWorkflow Foundationも成熟してきたので、こちらも現時点ではちょっと特殊かなと。※DSSPの仕様書は、http://download.microsoft.com/download/5/6/B/56B49917-65E8-494A-BB8C-3D49850DAAC1/DSSP.pdf からダウンロード可能です。RESTとは何かの理解にもつながるので、ご一読を。ちなみにこのドキュメントの作者のHenrik Frystyk Nielsen は、Wikipediaにも載っていて、1pp6年に出版されたHTTP仕様書の著者の一人らしい 説明は以上にしておきますが、多分「何のことやらさっぱりわからん」という方のほうが多いかなと思います。論より証拠、Robotics StudioのサイトからSDKをダウンロードしてインストールし、実際に使ってみて見てください。サンプルも豊富にあるので、RDSのインストールディレクトリ(ユーザーディレクトリ直下)のDocumentation Folderに用意されている、RDSUserGuideのTutorialを参考に色々試してみてください。とても綺麗な物理シミュレーターや、DFDに近いモデルエディター上でメッセージの流れとサービスの実行状況をステップ実行できるVisual Programming…

0

Windows Phone FM Radioの電波強度測定 – 数値計算は誤差が憑き物だよね

私にとって実世界の情報を取り込むものは全てセンサーだ…って訳でWindows Phone 7のFM Radioの電波強度測定を試してみた。 Windows Phone 7のFM Radioをアプリから操作するのは凄く簡単。Microsoft.Devices.Radio名前空間のFMRadioクラスを使います。このクラスはシングルトンで、インスタンスは、 FMRadio.Instance で取り出せます。そして、このクラスのFrequencyというプロパティが周波数を、SignalStrengthというプロパティが電波強度を意味しています。※MSDNのSignalStrengthプロパティの説明には、”Retrieves the received signal strength indicator (RSSI) value for the currently tuned frequency.”とあるので、Frequencyに指定した周波数の強度であることは間違いない模様なので、 FMRadio.Instance.PowerMode = RadioPowerMode.On; // ラジオのスイッチをオンFMRadio.Instance.Frequency = 81.3var strength = FMRadio.Instance.SignalStrength; と書けば、直ぐ特定の周波数の電波強度を測れるわけです。あ、イヤホンのコードがアンテナなので、レィディオを使う場合にはイヤフォンをぶっさしておくことを忘れずに。 色々試してみた結果を以下に列記しますね。 Frequencyプロパティに設定できる値の範囲:Frequencyに代入できる値は、FMRadioのCurrentRegionプロパティに設定されている値で変わります。CurrentRegionにはRagioRegion列挙子で定義された、Europe、UnitedStates、Japanの三つを指定できます。日本では当然Japanであり、指定できるのは76.0~90.0の範囲です。この範囲より小さかったり、大きかったりする値を代入しようとすると、例外が発生するのでご注意。私がアプリを作った時には、何故か?CurrentRegionがUnitedStatesになっていたので、アプリの初期化時に確認してJapanを代入するコードを入れておくと良いでしょう。 Frequencyプロパティに設定できる値の制限:更に、Frequencyには、小数点第2位以下が0の値しか代入できません。これも中途半端な値を入れると例外が発生してしまうのでご注意。なので、Sliderで周波数を指定しようとすると一発で嵌ります。Sliderを使う場合には、0.1単位で丸める処理を入れないと正しく動きません。これに関連して、例えば以下のようなコード、 double freq = 76.0;double delta = 0.1;while (freq <= 90.0){    ….    freq += delta;} と書いて順次周波数を変えて、全周波数を舐めよう…なんてコードを書くと上手く動きません。なぜなら、doubleというデータ型には誤差があるからです。.NETのdoubleはIEEE754フォーマットを採用しています。浮動少数の有効桁が15桁~16桁しかなく、単純に足し算すると誤差が出てしまいます。ためしにWPFアプリで、以下のコードを書いて試してみてください。             double x =…

3

Robotics Developer Studio 4.0 Beta + Kinect for Windows SDK 1.0 Beta 2

Microsoft Researchから、Robotics Developer Studioの最新バージョン4.0のベータ版が公開されています。しかしこのバージョン、2011/11/25現在ではKinect for Windows SDK 1.0 Beta 2に未対応です。 え?RDSってKinectに関係してたっけ・・・ですって?RDS4からセンサーの一種としてKinectセンサーが仲間入りして、Kinectセンサーのシミュレーションサービス、実Kinectセンサー向けサービスが追加されています。Kinectを使ったシミュレーションもサンプルとして用意されています。 しかし、RDS(Robotics Developer Studio)4.0 Betaが公開されて直ぐに、K4W(Kinect for Windows) SDKが1.0 Beta 2にアップデートされてしまったので、そのままでは動きません。また、K4W SDK 1.0 Beta 2をインストールした状態で、RDS4.0 Betaをインストールすると、KinectセンサーをWindows PCが認識しなくなってしまうので、注意が必要です。 以下、RDS4.0 BetaとK4W SDK 1.0 Beta 2を共存させる方法を説明します。※多分、RDSも対応版がそのうちに出ると思うので、このポストの日から随分経った後にこのブログを呼んでいる方は、http://www.microsoft.com/robotics をチェックしてみてください。 既にRDSもK4W SDKもインストール済みの場合は、両方をアンインストール RDS4.0 Betaをインストール K4W SDK 1.0 Beta 2をインストール※ここで一旦Kinectが動くかK4W SDKのサンプルアプリで動作を確認しておきましょう。 http://mrdssamples.codeplex.com/releases/view/76620 からKinectFix.zipをダウンロード KinectFix.zipのブロックを外し、RDSがインストールされたフォルダーに中身(KinectFix.exe)をコピー※RDSのインストール先は、デフォルトで、c:\Users\{UserName}\Microsoft Robotics Dev Studio 4 Beta KinectFix.exeを実行 スタートメニュー→Microsoft Robotics Developer Studio 4…

0

Windows Phone PhotoCameraの画像取得と編集

UX-TVに対する質問(On Twitter)を見ていて、そういえばMSCのセッションのフォローが中途半端に終わっていたなと思い出し、急遽ポスト。PhotoCameraの画像データを保存したり、画像を編集したりする辺りの基本コードを紹介します。 PhotoCameraを使う場合には、以下のコードで先ず初期化しておきます。 using Microsoft.Devices; ・・・ // クラスメンバー変数としてカメラのインスタンスを宣言private PhotoCamera photoCamera; ・・・       // カメラインスタンス作成      photoCamera = new PhotoCamera(CameraType.Primary);      // カメラ初期化完了時にコールされるメソッドを登録      photoCamera.Initialized += new EventHandler<CameraOperationCompletedEventArgs>(photoCamera_Initialized);      // イメージキャプチャ時にコールされるメソッドを登録      photoCamera.CaptureImageAvailable += new EventHandler<ContentReadyEventArgs>(photoCamera_CaptureImageAvailable); 他にサムネイルイメージキャプチャ完了を知らせるイベントもありますが、ここでは省略します。それからフラッシュ(というかライトというか)の点灯は、Initializedイベントが発火した後(つまり初期化完了以降)でしか制御できないというTipsをはさみながら、次にイメージキャプチャ時の説明に移ります。 ボタンのクリックイベントハンドラやスクリーンのタップイベントハンドラなどで、       photoCamera.CaptureImage(); とCaptureImage()メソッドをコールすると、画像キャプチャー機能が働き、終わったら、photoCamera_CaptureImageAvailableがコールされます。 void photoCamera_CaptureImageAvailable(object sender, ContentReadyEventArgs e){    // このハンドラをコールするスレッドは外部スレッドなので、UIを操作する場合は、以下の様にDispatcherにデレゲート    Deployment.Current.Dispatcher.BeginInvoke(delegate()    {           BitmapImage photoImage = new BitmapImage();        photoImage.SetSource(e.ImageStream); 上の図のように、BitmapImageインスタンスを一つ作り、SetSourceメソッドでイベント引数eで渡されたImageStreamをソースとして登録します。これで、プログラム上で、PhotoCameraが撮った画像を、BitmapImageとして扱うことが出来るようになります。 更に、画像にテキストや図形を重ねたい場合は、         Image image =…

1