Ignorer les commandes du Ruban
Passer au contenu principal
myTIC > Make a Sign

 
myTIC > Make a Sign
mai 29
En route pour l’Australie

Comme vous l’avez peut-être vu sur notre page facebook (https://www.facebook.com/MakeASign), notre projet a été sélectionné pour la finale internationale. Cela signifie que nous irons le présenter à Sydney en Australie du 6 au 10 juillet.

Nous aimerions également remercier encore une fois tous ceux qui nous ont aidés dans cette aventure, nos professeurs, Neomytic, le CMAP, M. Sandront et son fils.

 

Australia.png


mai 02
Notre de vidéo de présentation est enfin terminée

Après 2 semaines de tournage et de montage, la vidéo est prête et a déjà été envoyée sur le site Imagine Cup.

Voici un lien la visionner sur Youtube:

http://www.youtube.com/watch?v=ky0l_LpTRU8

avril 20
Dernière semaine de préparation avant la finale belge et la sélection online
 
Déjà 10 semaines que nous nous sommes lancé dans l’aventure « Imagine Cup 2012 », organisé par Microsoft, dans laquelle nous avions le désire de développer un ou plusieurs programmes permettant de faciliter l’apprentissage du signage au travers d’outils de reconnaissance gestuelles.
Nous avons finalement réussi à réaliser 2 programmes WPF : « Sign Managment Software » et « Learning Software » fonctionnant tout deux sur un environnement Windows, ainsi qu’une application phone développée pour fonctionner sur un Windows Phone 7.
Maintenant place aux finales : le mercredi 2 mai nous participerons à Bruxelles à la finale locale organisée par Microsoft représenté par Lieve Goedhuys où nous défendrons via une présentation de 20 minutes notre projet en effectuant une démonstration, en diffusant quelques vidéos mais également en défendant bien sûr l’aspect business de notre projet.
De plus, nous devons également rendre à Microsoft avant le 2 mai une vidéo d’une durée de +/- 15 minutes. Celle-ci doit être « promotionnelle » et explicative de notre projet et contiendra aussi bien des prises de vue d’utilisation réelle de nos programmes mais également des explications sommaires du développement de nos applications.
Enfin, si vous désirez nous suivre d’avantage et connaître la progression de notre projet. Nous avons décidez de créer une adresse mail de contact mais également de nous lancer dans les chaînes vidéo et réseaux sociaux. Ainsi un compte Youtube, Twitter et Facebook ont étés créés dont voici les liens :
blog
Mail
Youtube
Twitter
Facebook
avril 16
Utilisation d’Azure

Introduction:

L’utilisation du cloud et de mettre en ligne notre base de données ainsi que nos web services nous a paru indispensable, tel une évidence. Grâce à l’utilisation d’Azure notre application pourras donc être accessible n’importe où dans le monde du moment où il y a une connexion wifi ou 3G et toutes nos données seront donc facilement accessibles tout en restant bien entendu correctement protégées.
windows_azure_small21-10-2011_17.03.55 

Création serveur:

Par le biais de notre école, nous nous sommes procurerez des “pass student” afin de pouvoir créer notre propre serveur Azure et utiliser toutes les fonctionnalités proposées.
 
  • Pour créer ce serveur, lorsque vous êtes connecté grâce à votre compte Live ID et sur la page d’accueil “WindowsAzurePlatform” via http://windows.azure.com, cliquer sur “database”, sélectionner l’abonnement et cliquer sur “Create” dans le ruban.
  • Ensuite, choisissez la bonne région (dans notre cas “North Europe”).
  • Après cette étape, définissez un nom de compte et un mot de passe qui seront votre compte admin du serveur SQL Azure (sysadmin) que vous êtes en train de créer.
  • Il faut également ajouter des règles de pare-feu à votre serveur. Attention car par défaut, même Windows Azure lui-même ne peut pas accéder à votre serveur SQL Azure en train de voir le jour. Cela devient facilement possible en ajoutant la simple règle avec l’adresse IP 0.0.0.0.
  • Enfin, vous disposez d’un serveur SQL Azure, physiquement hébergé dans la région que l’on a choisie de type : nomserveur.database.windows.net
 

Création/Migration de la base:

Avant toute chose, nous pourrons accéder à notre base SQL Azure de la même façon qu’une base SQL Server via “Microsoft SQL Server Management Studio”. Ayant déjà une base SQL pour notre programme, nous nous sommes donc intéresser au faite de migrer celle-ci sur notre serveur Azure. Pour se faire, un outil est mis à notre disposition : “SQL Azure Migration Wizard” qui permettre donc de migrer aussi bien les données que les tables sur notre serveur. Cet outil permet d’analyser et ensuite, si tout est correctement configurer, de migrer tout sur le cloud.
 
  • Nous avons donc utilisé cette façon de procéder, tout d’abord il faut mettre le nom du serveur SQL en local ainsi que le nom de la base de données.
  • Un nouvel écran apparait nous demandant si on veut migrer tous les objets ou seulement certains, en fonction de votre travail, il faudra choisir la bonne méthode.
  • Par la suite, un script et un fichier .psp pour remonter les données sur Azure sont créés.
  • Après cela, il faut spécifier les informations de connexion de notre serveur Azure, précédemment créer (voir le point ci-dessus).
  • Ci-cela n’est déjà fait sur votre platform Azure, il faut créer votre base de données qui sera hébergée sur votre serveur en précisant sa capacité.
  • Enfin, dans le dernier menu, le moment d’uploader les scripts et les données sur votre base de données apparait.
 
L’on peut facilement vérifier que l’upload à bien fonctionner en nous connectant sur serveur Azure via “Microsoft SQL Server Management Studio” et en interrogeant notre base de données ainsi que ces tables fraichement mise sur le cloud.
 
 

Création/Migration des web services:

Pour cette partie, voir le post ci-dessous…
 
 
avril 16
Migration des web services vers Azure

Nous avons actuellement 3 web services:

  • Le premier dédié aux utilisateurs qui leur permet de s'identifier
  • Le second dédié aux signes, qui permet donc de récupérer la liste de signes ainsi que la liste des langues actuellement disponible
  • Le dernier est particulier car il s'agit d'un web service REST (Voir ici) qui permet de récupérer des vidéos via un simple browser
Bien évidemment, transférer la base de données sans les web services ne servirait à rien. Afin d'effectuer la migration de ces derniers, nous avons créé un nouveau "Windows Azure Project" que nous avons ajouté à notre solution.
Un projet Azure nous permet d'ajouter des "rôles". Chaque rôle que nous avons ajouté est en fait un projet contenant la BLL visée par la migration.
Solution Database 
Une fois le projet de déploiement fini, il suffit de faire un clic droit sur Publier.
Ici, le wizard nous demande nos informations de connexion. Afin de faciliter la publication, un lien nous permet de directement télécharger un fichier "*.publishSettings" à partir d'un browser, où il suffit de rentrer nos identifiants. On peut alors importer ces informations de connexion.
Une fois connecté, on peut alors rentrer le label utilisé pour identifier notre service, l'environnement utilisé (Production ou Intermédiaire), la configuration de build (Généralement Release ou Debug) et le type de service (Cloud ou local)
Lors de la publication, un fichier *.cspkg et *.cscfg sont générés. Ils seront uploadés vers Azure lors de la publication. On pourra aussi générer la solution, et faire l’upload manuellement via la page de gestion d’Azure (“Managment Portal”)
Il nous a fallu un peu plus d'1h40 après avoir cliqué sur "Publish" afin que notre service soit prêt à l'utilisation. Ce temps représente le temps d'upload des fichiers, le démarrage des 3 machines virtuelles qui vont faire tourner notre solution, le déploiement,etc. Toutes ces étapes sont visibles dans le Managment Portal.
Les upload qui suivent sont plus rapide car il n'est plus nécessaire de préparer les machines virtuelles, il suffit de faire l'upload et de déployer les web services.
avril 02
Ajout et reconnaissance de signes via notre application
Première reconnaissance de signes via notre programme. Il s'agit d'un projet destiné à l'Image Cup 2012 et qui à pour but d'analyser et de comprendre la langue des signes via une Kinect ou un Webcam (http://www.mytic.be/IC2012/default.aspx) Musique: Circus Marcus - Les Accouplements Répétitifs
mars 30
WPF - Storyboard

Concept:

Nos applications WPF avancent à grand pas et pour améliorer l’aspect visuel de celles-ci, nous avons décidé d’implémenter quelques storyboards qui permettront d’effectuer diverses animations durant par exemple un chargement, un jeu, ... pour ne pas que nos applications paraissent “gelées”.

MSDN défini le stroyboard comme étant une chronologie de conteneurs qui fournit des informations de ciblage sur l'objet et la propriété pour ses animations enfants. 

 

Réalisation:

Pour la réalisation de nos différents storyboards nous avons utilisé l’outil “Microsoft Expression Blend 4”.

Premièrement, nous déclarons et positionons correctement notre contrôle WPF (label, rectangle, image, etc.) dans notre page xaml via “Microsoft Visual Studio”.

<Label Style="{StaticResource ResourceKey=labelContent}" Grid.Row="3" Grid.ColumnSpan="4" HorizontalAlignment="Center" VerticalAlignment="Center" Name="labelStart" FontSize="100" />

 

Ensuite après compilation, “Microsoft Expression Blend 4” se met à jour automatiquement et l’on peut créer facilement notre storyboard en jouant par exemple sur l’opacité, la position, le content, ... de notre contrôle dans le temps. Nous définissons donc les propriétés des objets désirés à un instant voulu et de ce fait, une animation se créera au cours du temps comme pour la réalisation d’un dessin animé.

Il est donc possible de jouer sur de nombreuses propriétés de notre contrôle pour que ce dernier s’anime au cours du temps. 

 

Mise en place:

Après avoir joué sur nos contrôle et enregistrement de notre stroyboard, notre code dans “Microsoft Visual Studio” se met à son tour à jour et nous pouvons remarquer l’ajout de notre stroyboard venant d’être créé en haut de notre page xaml dans le <Page.Resources> … </Page.Resources>.

Par défaut, notre storyboard se lancera au démarrage de notre page car un évènement est automatiquement mis en place par “Microsoft Expression Blend 4” via :

<Page.Triggers>
        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
            <BeginStoryboard Storyboard="{StaticResource StoryboardStartSign}"/>
        </EventTrigger> 
</Page.Triggers>

 

Cependant, si nous désirons créer un stroyboard qui sera utilisé sur plusieurs de nos pages (dans notre cas un stroyboard de chargement), il suffira de déclarer celui-ci dans un dictionnaire de ressources (StoryboardDictionary.xaml) et ensuite dans notre App.xaml. Nous pourrons par conséquent réutiliser ceux-ci où bon nous semble.

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary>
        <ResourceDictionary Source="StoryboardDictionary.xaml" ></ResourceDictionary>
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

 

 

Utilisation:

Toutefois, pour pourvoir démarrer notre storyboard à un moment désiré, nous allons devoir procéder par étape. Imaginons que notre storyboard démarre après le clic sur un bouton :

  • Si notre storyboard doit s’animer une seule fois, nous utiliserons :

Dispatcher.BeginInvoke(new Action<Image>(UpdateStoryboardLS), Rotation);

Dans ce cas, nous passons au BeginInvoke la fonction à lancer (UpdateStoryboardLS) et sur quel élément le réaliser (Rotation). On démarrera juste notre storyboard via :

App.sbdLoadingStart.Begin(this);

 

 

  • Si notre storyboard doit s’animer plusieurs fois (exemple d’un chargement), nous passerons par un thread et utiliserons donc :

App.tLoadingRotation = new Thread(new ThreadStart(AnimateLoadingRotation));
App.tLoadingRotation.Start();

 

Ce thread animera notre storyboard tant que il est en en vie (IsAlive):

void AnimateLoadingRotation()
        {
            Thread.Sleep(500);
            while (App.tLoadingRotation.IsAlive)
            {
                Dispatcher.BeginInvoke(new Action<Image>((Image i)=>
                {App.sbdLoadingRotation.Begin(this);}),
                Rotation);

                Thread.Sleep(1000);
            }
        }

mars 28
Accès à une vidéo présente en base de données à partir de Windows Phone 7

Comme expliqué ici, lorsqu’une vidéo est présente en base de données, il est très facile de la récupérer dans un programme WPF, et de l’afficher dans un mediaElement, le plus facile étant d’enregistrer la vidéo sur disque pour ensuite utiliser l’uri du fichier en tant que source du mediaElement.

Cette facilité disparait malheureusement avec Windows Phone 7. Les possesseurs de Windows Phone le savent, le système de fichier est assez contraignant. Lorsque vous programmez une application, les accès aux fichiers de l’utilisateur se font via des “choosers”, qui sont en quelque sorte des boites de dialogues que vous pouvez afficher pour que l’utilisateur choisissez une photo/vidéo/musique/… Vous pouvez aussi utiliser l’isolated storage, il s’agit d’un espace mémoire uniquement accessible par votre application où vous pouvez stocker ce que bon vous semble.

Afin de faciliter la lecture de vidéo nous sommes partit sur l’objectif d’éviter les accès disques, et faire en sorte que la solution soit aussi utilisable avec le composant mediaElement que l’on trouve en WPF. Il a suffi de se rappeler nos cours de systèmes distribués afin de penser au web service REST. Un web service REST va nous permettre d’exposer les méthodes de notre web service via de simples opérations CRUD. Pour résumer, une tel configuration nous permettra d’accéder à notre vidéo via une url, du style: http://julien-pc:64672/ServiceVideo.svc/getVideo/1 où le ‘1’ représente l’identifiant de notre vidéo.

 

Comment cela fonctionne-t-il?

Par défaut, les web services WCF fonctionnent sur SOAP, et ne sont pas accessible via une opération CRUD. Il faut donc configurer un certain nombre de choses afin de permettre l’accès à nos vidéos:

  1. Le contrat WPF doit être modifié afin de préciser le chemin à utiliser pour accéder à une méthode

  2. [OperationContract] [WebGet(UriTemplate = "getVideo/Id}")] Stream GetVideo(String Id);

  3. La méthode doit bien entendu être déclarée dans le code du service. Elle renverra un Stream. L’avantage d’utiliser un Stream à la place d’un tableau de byte est que le mediaElement va gérer le buffering, et permettre de démarrer la vidéo même si l’entièreté de la vidéo n’est pas encore chargée sur le client. La méthode va simplement charger un tableau de byte à partir de la base de données pour le copier dans un Stream.
  4. Modifier le fichier de configuration afin d’utiliser un webHttpBinding. La modification du binding est nécessaire notamment pour prévenir le serveur gérant le web service qu’il ne doit pas exposer le service via SOAP, mais bien HTTP

Le web service est maintenant accessible avec un simple navigateur. Lorsque l’on essaye d’accéder à l’url précédente, le navigateur proposera d’enregistrer la vidéo sur disque, qui pourra être lue comme n’importe quelle autre vidéo.

L’url peut alors être utilisée en temps de source du mediaElement, autant sur Windows Phone qu’en WPF

mars 28
Make A Sign : Démonstration

 

Voici donc une vidéo de démonstration d’une première ébauche du programme, utilisant le traitement d’image OpenCV et les possibilités de la Kinect PC.

Ce n’est bien entendu qu’un premier test affichant le squelette de la main.

 

mars 28
Conversion d’une vidéo en C#

Cet article fait suite à mon précédent, expliquant comment créer un fichier vidéo à partir d’une suite d’image. À la fin de cet article, nous étions capable de créer un fichier AVI, utilisant le codec Intel Indeo 4.5, et de l’enregistrer en base de données. Tout fonctionnait sans problème, mis à part la lecture sur Windows Phone 7, car le nombre de codec supporté est limité.

Afin de remédier à cela, nous avons mis en place un mécanisme de conversion lors de l’ajout afin d’utiliser un container MP4, utilisant le codec h.264. Ce format à de nombreux avantages, notamment un faible encombrement, mais aussi la possibilité d’être lu sur de nombreux systèmes, Windows Phone 7 en faisant partie.

Pour effectuer la conversion, nous utilisons le programme FFmpeg. C’est un utilitaire en ligne de commande, qui nous permet notamment de convertir des fichiers vidéo. Bien que l’on puisse l’utiliser comme DLL, il est bien plus simple de le démarrer en ligne de commande. L’utilisation de la ligne de commande en C# peut se faire facilement via ces quelques lignes de code:

Process Convert = new Process();
Convert.StartInfo =
new ProcessStartInfo("FFmpeg.exe", "-i Source.avi -f mp4 Destination.mp4"
);
Convert.Start();

Une fois le fichier enregistré sur disque, l’enregistrement en base de données se fait de la même manière que le fichier .AVI que l’on utilisait précédemment.
1 - 10Suivante
 

 À propos de ce blog

 
À propos de ce blog
Bienvenue dans les blogs SharePoint. Utilisez cet espace pour fournir un message bref concernant ce blog ou ses auteurs. Pour modifier ce contenu, cliquez sur « Modifier la page » dans le menu « Actions du site ».