Azure Cognitive Services : Starter Kit en JavaScript et Python
L’Intelligence artificielle dans l’informatique ?
L’intelligence artificielle est un sujet incontournable de nos jours dans le domaine de l’informatique. On distingue généralement 2 manières d’en rajouter à nos applications :
- Soit en faisant appel à des data scientist pour exploiter ses propres données (en grande quantité, et de qualité idéalement😊),
- Soit en faisant appel à des services mis à disposition dans le Cloud Azure, permettant de bénéficier de modèles entraînés sur les données et par les experts de Microsoft.
La seconde solution est un moyen vraiment très simple de rajouter quelques fonctionnalités « intelligentes » à votre application, et il en existe un vaste panel, comme décrit par Aurélie dans son article L’intelligence artificielle avec les Microsoft Cognitive Services
Comme il aurait été trop simple de faire l’exercice en C#, je vous propose de voir quelques exemples concrets d’implémentation en JavaScript et en Python :
- Reconnaissance du texte depuis une image (OCR) via la Computer Vision API (en Node.js)
- Génération d’une voix à partir d’un texte via le Speech Service (en Node.js)
- Compréhension des intentions d’une personne via LUIS (Language Understanding Intelligent Service) (en Python)
L’ensemble du code source ainsi que le pas à pas détaillé est disponible sur Github
Création des services sur le portail Azure
S’il est possible de tester les services gratuitement sans souscription Azure (ici et là), il est préférable de s’appuyer sur des services créés à partir du portail Azure. D’ailleurs il existe aussi un pricing gratuit sur les Cognitives Services, de l’ordre de plusieurs milliers de requêtes par mois, de quoi commencer à intégrer ces services dans une application sereinement 😊.
Sur le portail, il existe une catégorie « AI + Machine Learning » qui permet d’afficher les principaux Cognitive Services
exemple de création d’un service de Computer Vision
Une fois le service créé, une paire de clés est mise à disposition. L’utilisation de n’importe laquelle de ces deux clés permettra de s’authentifier sur le service et pouvoir interagir avec.
exemple de récupération des clés d’authentification du Speech Service
Connexion aux services : SDK ou API rest?
S’il est plus simple d’utiliser un SDK pour communiquer avec les Cognitive Services (liste des API et SDK disponibles sur la documentation officielle), certains services ne sont pas encore intégrés dans les SDKs de chaque langage (C# restant le langage de prédilection de l’éco-système Microsoft).
Dans ce cas, l’utilisation des API rest devient le moyen standard pour accéder à ces services. Fort heureusement, leur utilisation reste vraiment très simple (comme montré dans les exemples sur les Speech Services et sur LUIS)
Authentification et accès aux services
L’accès aux Cognitives Services se passe généralement en deux temps :
- L’authentification sur la plateforme AZURE_REGION.api.cognitive.microsoft.com, permettant de récupérer un jeton d’authentification,
- Attention à bien s'assurer de s’authentifier sur la plateforme correspondant à la région où se trouvent les services auxquels on souhaite accéder.
- Le passage de ce jeton d’authentification aux requêtes d’utilisations du service.
Note : Dans le cas d’un accès aux services de LUIS via API rest, le process de connexion est un peu différent et permet de passer la clé en URL parameter directement dans la requête http.
Récupération du texte depuis une image (Node.js)
Le package azure-cognitiveservices-computervision fournit un ComputerVisionAPIClient, qui possède deux méthodes :
- recognizePrintedTextInStreamWithHttpOperationResponse pour envoyer un fileStream
- recognizePrintedTextWithHttpOperationResponse pour utiliser une url publique
Ainsi depuis l’image suivante :
Le service nous retourne le résultat suivant :
Code source complet de l’exemple disponible sur Github
Génération de la voix à partir d’un texte (Node.js)
Pas de SDK encore disponible pour l’utilisation du tout nouveau service de Speech unifié (qui regroupe text-to-speech, speech-to-text et translation-api en une seule API, chacune de ces apis étant actuellement disponible individuellement)
Un premier appel sur l’url « https://${azureRegion}.api.cognitive.microsoft.com/sts/v1.0/issueToken » est nécessaire pour récupérer un jeton d’identification, en précisant la clé d’identification (récupérée depuis le portail Azure) via le header « Ocp-Apim-Subscription-Key »
Puis un second appel sur le service de Speech « https://${azureRegion}.tts.speech.microsoft.com/cognitiveservices/v1 » , en passant le jeton d’authentification précédemment récupéré dans un header d’Authorization, mais surtout en envoyant le texte à lire décrit dans le format ssml (un dérivé du format xml)
Exemple :
<speak version="1.0" xml:lang="en-us"> <voice xml:lang="en-us" xml:gender="Female" name="Microsoft Server Speech Text to Speech Voice (en-US, ZiraRUS)"> <!-- Other voices available at https://docs.microsoft.com/en-us/azure/cognitive-services/speech/api-reference-rest/bingvoiceoutput#SupLocales --> This is a demo to call Microsoft text to speech service. </voice> </speak>
Le service renvoie alors un fichier .wav contenant la lecture du texte, qu’il ne reste plus qu’à lire via un lecteur audio propre à votre système d’exploitation
Code source complet de l’exemple disponible sur Github
Identifier une intention contenue dans une phrase
Après avoir créé, entrainé et déployé un modèle sur LUIS (par exemple en suivant l'article de M. Lebrun, Thomas de son prénom), l’analyse d’une phrase pourra se faire en un appel sur « https://{0}.api.cognitive.microsoft.com/luis/v2.0/apps/{1} », en précisant :
- {0} correspondant à la région Azure,
- {1} correspondant à l’id de l’application LUIS,
- La clé de connexion au service, passée par header « Ocp-Apim-Subscription-Key»
- Un objet json dans le corps de la requête, avec une propriété « q », correspondant à la phrase à analyser
Exemple de body envoyé à l’api LUIS :
params = { 'q': 'Je cherche un poste de développeur front' }
Le service renvoie alors l’intention qu’il a reconnu dans la phrase avec son pourcentage de confiance, ainsi que les différentes entités associées à l’intention :
Code source complet de l’exemple disponible sur Github
Conclusion
Grâce aux Cognitive Services, il est vraiment très simple de rajouter de l’intelligence dans son application : Quel que soit le langage utilisé, il est possible de mettre en place un accès à ces services en quelques lignes de code.
J’ai personnellement vraiment hâte de voir de plus en plus d’applications s’appuyer sur ces services pour proposer une meilleure expérience aux utilisateurs.
L’interface qui tire efficacement parti de ces services et qui vient naturellement à l’esprit étant souvent le « ChatBot », et il s’avère qu’il est dorénavant très simple à mettre en place comme expliqué par Papus dans son article Azure Bot Service - Créer son premier Bot
Commentaires