Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ゼロからはじめるWindows Phone、Kinect連携
Search
Takuya Shibata
PRO
September 17, 2011
Technology
340
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ゼロからはじめるWindows Phone、Kinect連携
第62回CLR/H勉強会で発表した資料です。
Takuya Shibata
PRO
September 17, 2011
More Decks by Takuya Shibata
See All by Takuya Shibata
意外とあった SQL Server 関連アップデート + Database Savings Plans
stknohg
PRO
0
570
AWSのProductのLifecycleについて
stknohg
PRO
0
640
アップデート紹介:AWS Data Transfer Terminal
stknohg
PRO
0
710
CloudFrontの継続的デプロイを試してみたはなし
stknohg
PRO
0
1.6k
Snapshot & Backup
stknohg
PRO
0
4.2k
AWSエンジニアのためのActive Directory入門
stknohg
PRO
1
3.6k
EC2 Image Builder
stknohg
PRO
0
550
Windows on AWS の “基礎”
stknohg
PRO
0
950
Azure Dedicated Host と2019年10月1日からのライセンス改定のはなし
stknohg
PRO
0
620
Other Decks in Technology
See All in Technology
20260619 私の日常業務での生成 AI 活用
masaruogura
1
210
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
失敗を資産に変えるClaude Code
shinyasaita
0
660
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
200
【NRUG vol.18】なぜ多くのオブザーバビリティ導入は失敗するのか
nrug_member
0
130
Claude Codeとのおしゃべりでセマンティックモデルの定義からダッシュボード作成まで完成させる
nic_sugiyama
0
110
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
150
Bedrock AgentCore RuntimeでAuth0 Changelog調査AIをアップグレードした話
t5u8a5a
1
150
AIエージェントが名古屋の猛暑からあなたを守る
happysamurai294
0
120
新しいVibe Codingと”自走”について
watany
6
330
MCP Appsを作ってみよう
iwamot
PRO
4
650
脆弱性対応、どこで線を引くか
rymiyamoto
1
390
Featured
See All Featured
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
380
Building an army of robots
kneath
306
46k
Code Reviewing Like a Champion
maltzj
528
40k
KATA
mclloyd
PRO
35
15k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Odyssey Design
rkendrick25
PRO
2
700
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
230
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
54k
ラッコキーワード サービス紹介資料
rakko
1
3.6M
My Coaching Mixtape
mlcsv
0
150
Transcript
ゼロから始める Windows Phone、Kinect連携 2011/09/17 第62回 CLR/H勉強会 素敵なおひげ
自己紹介 H/N:シバタ(素敵なおひげ) Twitter: @stknohg Blog : http://d.hatena.ne.jp/stknohg/
札幌で働くSIerです。 2010年よりCLR/Hスタッフとして活動しています。 Windows Phoneを現在進行形で勉強中。 WPArchにも一応登録してます
はじめに
ゼロから始めるって? 本セッションのタイトルは 「ゼロから始めるWindows Phone、Kinect連携」 ですが、これはスピーカーである私自身が予備 知識ゼロから始めて今日ここで発表しています。 なので、難しいことはやりません。 Windows
Phone、Kinect開発の敷居の低さを知っても らいつつ基本を学んでもらうのが今日の目的です。 Kinect2割、Windows Phone8割程度の内容です。
今日のお題
Kinectで電話をかけよう! Kinect Call
None
わかります…よね?
Kinect Call Kinectで画面のボタンに触れる Windows Phoneに内容が伝わる!
デモ
いかがでしたか?
Kinect開発の基本
開発環境の構築 SDKのインストール Microsoft Research http://research.microsoft.com/en- us/um/redmond/projects/kinectsdk/download.aspx
インストーラーの指示に従ってインストールするだけ
Kinectを接続 KinectはXBOXに付属しているものではなく単体で 購入 XBOXに付属しているKinectはUSBポートが独自の形 状をしている Xbox カスタマーサポートに問い合わせればUSB電源
ケーブルを追加購入可能 Kinectの電源を入れてからPCのUSBポートに接続 SDK付属のサンプルプログラムで動作確認 一部サンプルは Microsoft Speech Platform - Server Runtimeが必要
Kinect開発の基本 参照設定 Microsoft.Research.Kinect (GAC) アプリケーションの初期化と終了 using Microsoft.Research.Kinect.Nui;
private Runtime m_NUI; //ランタイムの初期化 m_NUI = new Runtime(0); //index = 接続されたKinectのインデックス // m_NUI.Initialize(RuntimeOptions.UseDepthAndPlayerIndex | //深度とプレイヤー RuntimeOptions.UseSkeletalTracking | //スケルトントラッキング RuntimeOptions.UseColor); //色情報 //ラインタイムの終了処理 if (m_NUI != null) { m_NUI.Uninitialize(); }
ビデオイメージの取得 VideoStreamのオープン //VideoStreamをオープン m_NUI.VideoStream.Open(ImageStreamType.Video, //ストリームの種類 2, //先読みバッファ数 ImageResolution.Resolution640x480, //解像度
ImageType.Color); //色情報のフォーマット VideoFrameReadyイベントでイメージを更新 ポーリングする場合はVideoStream.GetNextFrame() m_NUI.VideoFrameReady += new EventHandler<ImageFrameReadyEventArgs>(Nui_VideoFrameReady); private void Nui_VideoFrameReady(object sender, ImageFrameReadyEventArgs e) { //PlanarImageで画像データを保持 PlanarImage PI = e.ImageFrame.Image; //ImageオブジェクトにBitmap変換して表示 this.imgVideo.Source = BitmapSource.Create(PI.Width,PI.Height, 96,96,PixelFormats.Bgr32, null,PI.Bits,PI.Width * PI.BytesPerPixel); }
スケルトントラッキング SkeletonFrameReadyイベントでデータ更新 ポーリングする場合はSkeletonEngine.GetNextFrame() トラッキングするデータは2人まで同時認識可能 m_NUI.SkeletonFrameReady += new
EventHandler<SkeletonFrameReadyEventArgs>(Nui_SkeletonFrameReady); private void Nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { SkeletonData FirstSkelton = null; //トラッキングデータは複数認識可能 foreach (SkeletonData s in e.SkeletonFrame.Skeletons) { if (s.TrackingState == SkeletonTrackingState.Tracked) { …中略… } } }
ジョイント情報 20ヶ所のジョイント情報を取得可能 SkeltonData. Jointsプロパティ(JointID列挙型のCollecton) JointID 位置 JointID 位置
Head 頭 Spine 胴 ShoulderCenter 首元 HipCenter 腰 HandRight 右手 HandLeft 左手 WristRight 右手首 WristLeft 左手首 ElbowRIght 右肘 ElbowLeft 左肘 ShoulderRight 右肩 ShoulderLeft 左肩 HipRight 右尻 HipLeft 左尻 KneeRIght 右膝 KneeLeft 左膝 AnkleRIght 右足首 AnkleLeft 左足首 FootRIght 右足 FootLeft 左足 ※図は「 Programming Guide: Getting Started with the Kinect for Windows SDK Beta 」より引用
Coding4Fun Kinect Toolkit Coding4Fun TeamによるToolkit 深度データ、SkeltonData計算の拡張メソッド HoverButtonコントロール
WPF、Windows Form用 CodePlexで公開中 http://c4fkinect.codeplex.com/ Microsoft Public License (Ms-PL)
Windows Phone 7開発の基本
開発環境の構築 APP HUB http://create.msdn.com/ja-JP Windows Phone SDK
7.1 RC インストーラの指示に従いインストールするだけ
Windows Phone開発の基本 Microsoft Visual Studio 2010 Express for Windows
Phone Windows Phone開発用のVisual Studio Visual Studio Professional以上がすでにインストールされている 場合は統合インストールとなる SilverlightまたはXNAベースのアプリケーションを作成
デザイン Microsoft Expression Blend 4 XAMLのデザインツール VisualStudioとの連携
Blendでデザイン、VisualStudioでコーディング
デバッグ、デプロイ Windows Phone Emulator(JA) 加速度計 GPSエミュレータ
スクリーンショット Windows Phone Developer Registration デバイスをアンロックし実機デバックを可能にする 開発者登録(後述)が必要
開発者登録 実機へのデプロイには開発者登録が必要 ¥9800/年 個人はクレジットカード認証のみ 以前はGeoTrustによる本人認証が必要だった
法人の場合は現在もGeoTrustによる認証が必要 APP HUBに詳しい手順あり http://create.msdn.com/ja-jp/home/about/registration_walkthrough
LauncherとChooser OSの標準機能(ビルトインアプリケーション) を呼び出す機能 Microsoft.Phone.Tasks 名前空間 LauncherとChooserの違い
Launcher プリケーションを呼び出して終了 Chooser アプリケーションを呼び出してアプリケーションの終了/キャンセル イベントを取得できる 注意点 アプリケーションを呼び出した時点で呼び出し元はDeactivateさ れる Chooserを呼び出した場合は状態復帰のコードが必要になる
PhoneCallTask 電話をかける PhoneNumberプロパティ DisplayNameプロパティ Showメソッドで電話をかける
必ず確認ダイアログが出現する サンプルコード PhoneCallTask phoneCallTask = new PhoneCallTask(); //電話番号をセット phoneCallTask.PhoneNumber = "1234567890123"; //表示名をセット phoneCallTask.DisplayName = "素敵なおひげ"; //電話をかける phoneCallTask.Show();
EmailComposeTask Emailを送信する Toプロパティ Subjectプロパティ Bodyプロパティ
Showメソッドでメールを送信する 実際にはメーラーが起動される サンプルコード EmailComposeTask emailComposeTask = new EmailComposeTask(); //送信先アドレス emailComposeTask.To = "
[email protected]
"; //件名 emailComposeTask.Subject = "件名"; //本文 emailComposeTask.Body = "本文"; //メーラーを起動 emailComposeTask.Show();
その他のLauncher クラス名 機能 BingmapTask Bingマップを起動 BingmapDicrectionsTask Bingマップを起動(経路検索) ConnectionSettingsTask 接続設定を起動 MarketplaceHubTask
Marketplaceを起動(ハブ) MarketplaceDetailTask Marketplaceを起動(詳細) MarketplaceReviewTask Marketplaceを起動(レビュー) MarketplaceSearchTask Marketplaceを起動(検索) MediaPlayerLauncher MediaPlayerを起動 SearchTask Bing検索を起動 ShareLinkTask リンクの共有を起動 ShareStatusTask ステータスの共有を起動 SmsComposeTask SMSを起動 WebBrowserTask WEBブラウザを起動
その他のChooser クラス名 機能 AddressChooserTask アドレス帳を取得する CameraCaputureTask カメラを起動し撮った写真を取得する EmailAddressChooserTask メールアドレスを取得する GameInviteTask
ゲームへ招待する PhoneNumberChooserTask 電話番号を取得する PhotoChooserTask 画像を取得する SaveContactTask 連絡先を登録する SaveEmailTask Emailアドレスを登録する SavePhoneNumberTask 電話番号を登録する SaveRingtoneTask 着信音を登録する Launcher/Chooserの詳細はMSDNで http://msdn.microsoft.com/en-us/library/ff769556(v=VS.92).aspx
Push Notification概要
Push Notificationとは 登録したサービスからWindows Phoneへ対する プッシュ配信による通知機能 通知方法は3種類 Toast
Notification Tile Notification Raw Notification Microsoft Push Notification Service(MPNS)を介して 通知を行う MSDN http://msdn.microsoft.com/en-us/library/ff402558(v=vs.92).aspx
処理シーケンス Windows Phone MPNS Service Application(Kinect) 1. MPNSに対してPushChannelの 登録 2.
通知URIを返す 3. サービスに通知URIを登録 4. 通知URIに対して 通知メッセージを送信 5. 通知メッセージに応じた 通知を実行
PushChannelについて Push Notificationを使用するアプリはMPNSに対し てチャネルを登録する必要がある チャネルは1アプリケーション1つのみ登録可能で デバイス内で重複しない名前を付ける必要がある 1つのチャネルで3種類全ての通知が利用可能
1デバイスに対して30チャネルまで登録可能 30チャネルを超えた場合は例外発生
PushChannelの登録方法 HttpNotificationChannelクラス Microsoft.Phone.Notification名前空間 コードサンプル HttpNotificationChannel PushChannel; //登録済みチャネルがないか検索
PushChannel = HttpNotificationChannel.Find("KinectCall"); // if (PushChannel == null) { //チャネルが見つからない場合は新規登録する PushChannel = new HttpNotificationChannel("KinectCall"); //通知URIが更新された時に発生するイベント PushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated); //チャネル登録時やプッシュ通知時にエラーが発生した時に発生するイベント PushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred); //チャネルをオープン PushChannel.Open(); //Toastをバインドする ※Toast Notificatonを使う場合のみ PushChannel.BindToShellToast(); //Tileをバインドする ※Tile Notificatonを使う場合のみ PushChannel.BindToShellTile(); }
通知URIについて PushChannelを登録したアプリケーションに対して 専用のURIが発行される このURIをプッシュ通知を行うサービスに登録する 通常はクラウドサービスなどを想定 このURIは丌定期に更新される
ChannelUriUpdatedイベント 更新頻度に関するドキュメントは無い?
通知メッセージの送信方法 通知URIに対してHTTPでPOSTするだけ メッセージの形式は通知方法によって異なる 詳細は後述 送信結果はレスポンスのヘッダから取得
X-NotificationStatus - 通知結果 X-SubscriptionStatus - チャネルの購読状態 X-DeviceConnectionStatus - デバイスの接続状態 詳細はMSDNで http://msdn.microsoft.com/en-us/library/ff941100(v=vs.92).aspx
通知メッセージの送信方法 //通知URIに対するHTTPリクエストを発行 HttpWebRequest NotificationRequest = (HttpWebRequest)WebRequest.Create("http://sn1.notify.live.net/throttledthirdparty/01.00/xxxxxx...xxxxxxx" ); //POST NotificationRequest.Method =
"POST"; //メッセージの作成(Tile Notificationの場合) string Message = "<?xml version=¥"1.0¥" encoding=¥"utf-8¥"?>" + "<wp:Notification xmlns:wp=¥"WPNotification¥">" + "<wp:Tile>" + "<wp:BackgroundImage>Background.png</wp:BackgroundImage>" + "<wp:Count>0</wp:Count>" + "<wp:Title >KinectCall</wp:Title>" + "<wp:BackBackgroundImage action=¥"clear¥"></wp:BackBackgroundImage>" + "<wp:BackTitle action=¥"clear¥"></wp:BackTitle>" + "<wp:BackContent action=¥"clear¥"></wp:BackContent>" + "</wp:Tile> " + "</wp:Notification>"; //バイト配列にエンコード byte[] notificationMessage = Encoding.UTF8.GetBytes(Message); //Content設定 NotificationRequest.ContentLength = notificationMessage.Length; NotificationRequest.ContentType = "text/xml"; NotificationRequest.Headers.Add("X-WindowsPhone-Target", "token"); NotificationRequest.Headers.Add("X-NotificationClass", "1"); //メッセージ送信 using (Stream requestStream = NotificationRequest.GetRequestStream()) { requestStream.Write(notificationMessage, 0, notificationMessage.Length); }
Toast Notification 画面上部にメッセージ(Toast)を表示する通知 アプリケーションが終了している時に有効 HttpNotificationChannel.BindToShellToast() クリックするとアプリケーションを起動
遷移先のページ指定も可能
設定可能な項目 Title 太字のタイトル。約40文字表示可能 Sub Title 細字のサブタイトル。約47文字表示可能
Parameter クリック時に遷移するページを指定 未指定の場合はMainPageが起動
Toast Notificationの注意点 アプリケーションの初回起動時にToast通知を行う 旨の確認メッセージを出す必要がある 他の通知では丌要 Application Certification
Requirements 6.2.2 – Toast Notification Opt-In http://msdn.microsoft.com/en-us/library/hh184838(v=vs.92).aspx
メッセージ形式 Header Payload X-WindowsPhone-Target toast X-NotificationClass 2 –
ただちに通知 12 – 450秒以内に通知 22 – 900秒以内に通知 <?xml version="1.0" encoding="utf-8"?> <wp:Notification xmlns:wp="WPNotification"> <wp:Toast> <wp:Text1>たいとる</wp:Text1> <wp:Text2>さぶたいとる</wp:Text2> <wp:Param>/MainPage.xaml</wp:Param> </wp:Toast> </wp:Notification>
Tile Notification ホーム画面のTileを変更する通知 アプリケーション実行中、終了時に有効 HttpNotificationChannel.BindToShellTile() クリックするとアプリケーションを起動
遷移先のページは指定できない
設定可能な項目(表面) Title Tile左下に表示するタイトル。約15文字表示可能 BackGroundImage 背景画像。JPEGまたはPNGファイルを指定
画像サイズは173*173ピクセル固定 ファイルはXAP内のリソースかWEB上のイメージを使用可能 (HTTPのみHTTPSは未サポート) WEB上のイメージを使用する場合、サイズは80KB以下にする 必要があり、30秒でタイムアウトする。 Count Tile右上に表示する数値。いわゆるBadge 1~99まで設定可能
設定可能な項目(裏面) BackTitle Tile左下のタイトル約15文字表示可能 BackBackGroundImage 背景画像
画像の仕様はBackgroundImageと同様 BackContent Tile上部に表示する文字列。約40文字表示可能
Tile Notificationで出来ないこと 表裏の切り替えタイミングの設定 アニメーションする画像 People、Gamesの様なTileは作れない
メッセージ形式 Header Payload X-WindowsPhone-Target token X-NotificationClass 1 –
ただちに通知 11 – 450秒以内に通知 21 – 900秒以内に通知 <?xml version="1.0" encoding="utf-8"?> <wp:Notification xmlns:wp="WPNotification"> <wp:Tile> <wp:BackgroundImage>Red.Jpg</wp:BackgroundImage> <wp:Count>1</wp:Count> <wp:Title>おもて</wp:Title> <wp:BackBackgroundImage>Blue.jpg</wp:BackBackgroundImage> <wp:BackTitle>うら</wp:BackTitle> <wp:BackContent>こんてんつ</wp:BackContent> </wp:Tile> </wp:Notification>
Tileを元に戻すには? Clear属性を付けたメッセージを通知 <?xml version="1.0" encoding="utf-8"?> <wp:Notification xmlns:wp="WPNotification"> <wp:Tile> <wp:BackgroundImage>Background.png</wp:BackgroundImage>
<wp:Count action="clear"></wp:Count> <wp:Title >KinectCall</wp:Title> <wp:BackBackgroundImage action="clear"></wp:BackBackgroundImage> <wp:BackTitle action="clear"></wp:BackTitle> <wp:BackContent action="clear"></wp:BackContent> </wp:Tile> </wp:Notification> ShellTile.Update()メソッドを実行 StandardTileData
Raw Notification ユーザー定義のデータ(Raw Data)を通知 定義内容は自由 アプリケーション実行中のみ有効
HttpNotificationChannel.HttpNotificationReceived イベントで通知データを受信 HttpNotificationEventArgs.Notification.Body
メッセージ形式 Header Payload ユーザーが独自に定義 XMLである必要もない
通知の受信側でメッセージの解析が必要 X-WindowsPhone-Target 指定丌要 X-NotificationClass 3 – ただちに通知 13 – 450秒以内に通知 23 – 900秒以内に通知
補足
Winodows Phone 7→ Kinectへの通信 Push NotificationではKinectからWindows Phone 7 への通信のみ
リアルタイムな処理には当然向かない Windows Phone OS 7.1からSocket通信がサポート される様になったので、Windows Phone 7から Kinectへの通信が実装可能 よりリアルタイムな処理もできると思われる 誰か試してください…
ご静聴ありがとうございました