kinect et office365 : un bon geste en faveur de votre si
DESCRIPTION
Présentation utilisée lors de la session "Kinect + Office365 : un bon geste en faveur de votre SI", co-animée avec Julien LO PRESTI et Samuel BLANCHARD lors des Microsoft TechDays 2012 à Paris.TRANSCRIPT
palais des congrès Paris
7, 8 et 9 février 2012
Vous êtes dans la salle 352A
Kinect + Office365 : Un bon geste en faveur de votre SI !Mardi 7 févrierJulien LO PRESTISamuel BLANCHARDFabrice BARBIN
Samuel BLANCHARD
Au niveau communautaire Rédacteur/Modérateur chez
Développez Rédacteur pour Programmez! Fondateur Club SP et .NET Ouest Créateur d’applications Windows
Phone Outil : isoStoreSpy Apps: Wario’s Jewels, Sonic’s
Jewels
Au niveau professionnel Responsable Développement &
Innovation chez Naviso (www.naviso.fr)
A remplacer par une photo
Julien LO PRESTI
Au niveau communautaire Contributeur Club SP et .NET
Ouest MSP Développement Apps WP7
Don du sang, IC12, Flickr Explorer
Au niveau professionnel Etudiant SUPINFO Rennes Stagiaire chez SYNERGIZ
A remplacer par une photo
Fabrice BARBIN
Au niveau communautaire Fondateur Club SP et .NET Ouest MVP SharePoint Workspace
Fondateur de la Communauté SPW 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
)
A remplacer par une photo
Kinect + Office365 : Quel usage en entreprise ?Kinect Comment ça marche ? Du code et de la démo…
Zoom : Création d’un Framework KinectOffice365 Comment ça marche ? Du code et de la démo
Démonstration du cas d’usage completQuizz et Goodies !
Contenu de cette session
De nombreuses suggestions !
Kinect + Office 365Quel usage en entreprise ?
Minority Reports – Droits réservés - http://fr.wikipedia.org/wiki/Minority_Report
Kinect + Office 365Quel usage en entreprise ?
De nombreux champs d’application !
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
Kinect + Office 365 : Cas d’usage
Communication interne(Information, sensibilisation, culture d’entreprise, management)
Accueil d’un visiteur(Information, recherche de personnes, …)
Pourquoi Kinect ?
Kinect + Office 365 : Cas d’usage
Pourquoi Office365 ?
Kinect + Office 365 : Cas d’usage
Les contraintes spécifiques du projet
Kinect + Office 365 : Cas d’usage
Environnement sonore
Public non formé
Données « impersonnelles »
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 gestesEn savoir+ : http://fr.wikipedia.org/wiki/Kinect
CODE & DEMO
Une souris dans la Kinect ?
Code : Une souris dans la Kinect ?
// on parcourt tous les squelettes disponiblesforeach (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; }}
Une position pour la souris
Code : Une souris dans la Kinect ?
// Affichage du curseurfloat x, y; // Normalisation dans un range de 0 à 1kinect.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;
Affichage du curseur
CODE & DEMO
Une souris sur mes contrôles !
Contrôle 2Contrôle 1
De la souris aux contrôles : solution 1 Curseur
• Position Curseur• Diffusion
De la souris aux contrôles : solution 2
Contrôle 2
Contrôle 1
Curseur
• Position Curseur• InputHitTest• Ancetre
IKinectCursorControl
Contrôle
Enfant
Code : Des events pour un contrôle DependencyObject control = this.InputHitTest(point) as 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); }
CODE & DEMO
Qu’est-ce qu’elle a ma posture ?
Code : Détection de posture// on recherche le point de l'épaulePoint epaule = e.GetSkeletonPositionsWithoutDepth(this)[JointID.ShoulderLeft]; // puis la mainPoint 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èsif (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() + "°";
CODE & DEMO
Zoom : Framework KINECT
Office 365 : Comment ca marche ?
CODE & DEMO
Authentification
Exploitation du projet CodePlex de Wictor Wilén (MVP SharePoint)http://www.wictorwilen.se/
Code : Authentification
//Helper pour injecter le cookie avec le COM SPMsOnlineClaimsHelper claimsHelper = new MsOnlineClaimsHelper(siteUrl, login, password); context = new ClientContext(siteUrl);context.ExecutingWebRequest += claimsHelper.clientContext_ExecutingWebRequest;
//Webclient injectant le cookievar wb = new ClaimsWebClient(new Uri(this.SiteUrl, UriKind.Absolute), this.Login, this.Password); //Parse document apres le downloadwb.DownloadDataCompleted += (s, args) =>{
...}
CODE & DEMO
SharePoint : lecture de listes
Code : Liste SharePoint
//Creation url liste SPstring url = this.CreateSharepointListUrl( listId, subUrl, viewId );
//Webclient avec injection du cookievar wb = new ClaimsWebClient(new Uri(this.SiteUrl, UriKind.Absolute), this.Login, this.Password); //Parse document apres le downloadwb.DownloadDataCompleted += (s, args) =>{ var result = new SharepointListResultEventArgs<T>(){ Cancelled = args.Cancelled, Error = args.Error };
if (args.Cancelled == false && args.Error == null) { byte[] data = args.Result;
result.Result = ParseDocument<T>(data); }};
CODE & DEMO
Lync : Contacts
CODE & DEMO
Lync : Communication
Code : Lync
//ConnectionService.SignIn("login", "mdp", () => {
//Obtention des contacts de l’utilisateurforeach (var contact in Service.GetContacts())
{ ... }});
service = new LyncService();//Evènements sur le début et fin de la conversationservice.ConversationStarted += new EventHandler(service_ConversationStarted);service.ConversationStopped += new EventHandler(service_ConversationStopped);
Personne personne = this.ContactView.DataContext as Personne;//Début de la conversationservice.StartConversation(personne.Email);
DEMO, the big one !
OBOX 365
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 »
Conclusion
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
Merci de votre attention
Autres sessions sur Office365
Au coeur d'un projet Kinect innovant
Mardi 7 Février | 16h00-17h00
La kinect à l'écoute des nouveaux usages métiers et interactions avec les solutions MicrosoftMercredi 8 Février | 14h30-15h30
Applications robotiques avec Kinect et Robotics Dev Studio
Mercredi 8 Février | 13h00-14h00
Kinect Effect - user experience revolution
Mardi 7 Février | 13h00-14h00
Tout sur Microsoft Speech Mercr. 8 Février | 17h30-18h30
Jeux multi-écrans : envolez-vous avec Kinect, Silverlight et WP7
Mardi 7 Février | 13h00-14h00
…
Merci de votre attention
Autres sessions sur KINECT
Merci de votre attention
Quizz
Questions ? ?
Fabrice [email protected]
Julien LO [email protected]
Samuel [email protected]
Vous êtes dans la salle 352A