Vous avez toujours rêvé de manipuler vos données de manière interactive et naturelle. Venez découvrir comment développer des applications interactives en exploitant conjointement Kinect et Office 365. Vous ferez un bon geste en faveur de votre SI ! Au travers d’un exemple concret, cette session vous permettra de découvrir les fonctionnalités clés des deux plateformes et de suivre en pas à pas la naissance d’une application professionnelle « kinectée »… Session co-animée par Julien LO PRESTI, Samuel BLANCHARD et Fabrice BARBIN
3. Kinect + Office365 : Un
bon geste en faveur de
votre SI !
Mardi 7 février
Julien LO PRESTI
Samuel BLANCHARD
Fabrice BARBIN
4. Samuel BLANCHARD
Au niveau communautaire
Rédacteur/Modérateur chez
Développez
Rédacteur pour Programmez!
A remplacer
par une
Fondateur Club SP et .NET Ouest
photo
Créateur d’applications Windows
Phone
Outil : isoStoreSpy
Apps: Wario’s Jewels, Sonic’s
Jewels
Au niveau professionnel
Responsable Développement &
Innovation chez Naviso
5. Julien LO PRESTI
Au niveau communautaire
Contributeur Club SP et .NET Ouest
MSP
A remplacer
Développement Apps WP7 par une
Don du sang, IC12, Flickr Explorer photo
Au niveau professionnel
Etudiant SUPINFO Rennes
Stagiaire chez SYNERGIZ
6. Fabrice BARBIN
Au niveau communautaire
Fondateur Club SP et .NET Ouest
MVP SharePoint Workspace
A remplacer
Fondateur de la Communauté
par une
SPW
photo
Auteur d’un ouvrage dédié à SPW
Contributeur Club SharePoint FR
(UGSF)
Au niveau professionnel
Dirigeant de SYNERGIZ, centre de
compétences et de R&D sur
technologies Microsoft
(www.synergiz.com)
7. Contenu de cette session
Kinect + Office365 : Quel usage en entreprise ?
Kinect
Comment ça marche ?
Du code et de la démo…
Zoom : Création d’un Framework Kinect
Office365
Comment ça marche ?
Du code et de la démo
Démonstration du cas d’usage complet
Quizz et Goodies !
8. Kinect + Office 365
Quel usage en entreprise ?
De nombreuses suggestions !
Minority Reports – Droits réservés - http://fr.wikipedia.org/wiki/Minority_Report
9. Kinect + Office 365
Quel usage en entreprise ?
De nombreux champs d’application !
10. Kinect + Office 365 : Cas
d’usage
Communication interne
(Information, sensibilisation, culture
d’entreprise, management)
Accueil d’un visiteur
(Information, recherche de personnes, …)
Via une « borne » placée dans un endroit public
Pilotée par le geste via Kinect
Dont le contenu et les fonctionnalités reposent sur Office365
13. Kinect + Office 365 : Cas
d’usage
Les contraintes spécifiques du projet
Environnement sonore
Public non formé
Données
« impersonnelles »
14. Kinect : Comment ca marche ?
Contenu (de la « V1 »)
Un projecteur infrarouge
Une caméra infrarouge
Une caméra vidéo
Des micros
Une motorisation
Principe
Reconnaissance de la profondeur et suivi de
« joueurs »
Reconnaissance de 20 points par
squelette
Reconnaissance vocale
Possibilité (par code) de détecter des
postures et des gestes
En savoir+ : http://fr.wikipedia.org/wiki/Kinect
16. Code : Une souris dans la
Kinect ?
Une position pour la souris
// on parcourt tous les squelettes disponibles
foreach (SkeletonData skeleton in skeletonFrame.Skeletons)
{
// Le squelette est-il bien repéré ?
if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
{
// on prend la main droite
Joint jointHandRight = skeleton.Joints[JointID.HandRight];
// Qualité trop médiocre on passe son tour
// (main non affectée par son environnement)
if (jointHandRight.Position.W < 0.8f)
continue;
// on en a trouvé une main ! joie !
return jointHandRight.Position;
}
}
17. Code : Une souris dans la
Kinect ?
Affichage du curseur
// Affichage du curseur
float x, y;
// Normalisation dans un range de 0 à 1
kinect.SkeletonEngine.SkeletonToDepthImage(hand.Value.Position, out x,
out y);
double winX = this.ActualWidth * (double)x;
double winY = this.ActualHeight * (double)y;
// deplacement par RenderTransform (Translation)
this.TranslateCursor.X = winX;
this.TranslateCursor.Y = winY;
19. De la souris aux contrôles :
solution 1 Curseur
• Position Curseur
• Diffusion
Contrôle 1 Contrôle 2
20. De la souris aux contrôles :
solution 2 Curseur
• Position Curseur
• InputHitTest
• Ancetre IKinectCursorControl
Contrôle
Enfant
Contrôle 2
Contrôle 1
21. Code : Des events pour un
contrôle control = this.InputHitTest(point) as DependencyObject;
DependencyObject
var kinectControl = control as IKinectControl;
// on cherche si un papa n'est pas un KinectControl
while (kinectControl == null && control != null) {
control = VisualTreeHelper.GetParent(control);
kinectControl = control as IKinectControl;
}
if (this.LastKinectControl != kinectControl) {
// on quitte l'ancien control !
if (this.LastKinectControl != null) {
this.LastKinectControl.OnKinectLeave();
}
this.LastKinectControl = kinectControl;
if (kinectControl != null) {
// on entre pour la première fois !
kinectControl.OnKinectEnter();
}
}
if( kinectControl != null ){
// on se deplace car on est déjà rentré
kinectControl.OnKinectMove(point);
}
23. Code : Détection de posture
// on recherche le point de l'épaule
Point epaule = e.GetSkeletonPositionsWithoutDepth(this)[JointID.ShoulderLeft];
// puis la main
Point main = e.GetHandPositionWithoutDepth(this);
// Obtenir l'angle entre deux points grace à pythagore ! AB2=AC2+BC2
double angleInRadian = KinectDevice.GetAngle(main, epaule, AngleUnity.Radian);
double angleInDegree = KinectDevice.RadianToDegree(angleInRadian);
this.Line.X1 = epaule.X;
this.Line.Y1 = epaule.Y;
this.Line.X2 = main.X;
this.Line.Y2 = main.Y;
// Detection : verifier que l'angle est bien de 140° à + ou - 10° près
if (KinectDevice.IsAngleInRange(angleInDegree, 140, 10)){
this.Line.Stroke = new SolidColorBrush(Colors.Red);
}
Else {
this.Line.Stroke = new SolidColorBrush(Colors.White);
}
this.TextAngle.Text = ((int)angleInDegree).ToString() + "°";
27. Code : Authentification
//Helper pour injecter le cookie avec le COM SP
MsOnlineClaimsHelper claimsHelper = new MsOnlineClaimsHelper(siteUrl, login,
password);
context = new ClientContext(siteUrl);
context.ExecutingWebRequest += claimsHelper.clientContext_ExecutingWebRequest;
//Webclient injectant le cookie
var wb = new ClaimsWebClient(new Uri(this.SiteUrl, UriKind.Absolute),
this.Login, this.Password);
//Parse document apres le download
wb.DownloadDataCompleted += (s, args) =>
{
...
}
32. Code : Lync
//Connection
Service.SignIn("login", "mdp",
() =>
{
//Obtention des contacts de l’utilisateur
foreach (var contact in Service.GetContacts())
{
...
}
});
service = new LyncService();
//Evènements sur le début et fin de la conversation
service.ConversationStarted += new EventHandler(service_ConversationStarted);
service.ConversationStopped += new EventHandler(service_ConversationStopped);
Personne personne = this.ContactView.DataContext as Personne;
//Début de la conversation
service.StartConversation(personne.Email);
34. Conclusion
Kinect
Oui : Bonne réponse aux attentes
Mais :
Ergonomie des applications à ré-imaginer
Nécessité d’un framework (Dev Haut Niveau)
Office365
Oui : Solution pérenne, bien outillée pour répondre aux besoins
Mais :
Disponibilité des données à optimiser (Cache)
Lync : Nécessité d’avoir le client installé
Kinect+Office365, en entreprise ?
Oui : Concept démontré
Mais : Nécessité d’éprouver dans « la vraie vie »
35. Merci de votre attention
Autres sessions sur Office365
Jusqu'à 10 fois plus de
performance pour Sharepoint et
Exchange!
Jeudi 9 Février | 14h30-15h30
Tout ce que vous avez toujours
voulu savoir sur Office 365!
Mercredi 8 Février | 14h30-15h30
La gouvernance du Cloud : Retour
d'expériences des clients Office
365
Mercredi 8 Février | 13h00-14h00
36. Merci de votre attention
Autres sessions sur KINECT
Au coeur d'un projet Kinect Kinect Effect - user experience
innovant revolution
Mardi 7 Février | 16h00-17h00 Mardi 7 Février | 13h00-14h00
La kinect à l'écoute des nouveaux Tout sur Microsoft Speech
usages métiers et interactions Mercr. 8 Février | 17h30-18h30
avec les solutions Microsoft
Mercredi 8 Février | 14h30-15h30
Jeux multi-écrans : envolez-
vous avec Kinect, Silverlight et
Applications robotiques avec WP7
Kinect et Robotics Dev Studio Mardi 7 Février | 13h00-14h00
Mercredi 8 Février | 13h00-14h00 …
37. Merci de votre attention
Quizz
Questions ? ?
Fabrice BARBIN Julien LO PRESTI Samuel BLANCHARD
fbarbin@synergiz.com jlopresti@synergiz.com samuel.blanchard@naviso.fr