Quand Cortana parle à SARAH

C’était la sortie de Windows 10 le 29/07 et donc l’occasion de migrer toutes mes machines sur le nouvel OS. J’avais déjà ma table connectée en Windows 10 Insider pour valider que SARAH marchait…

Nicolas Popy m’a fait remarqué qu’il y avait le « Hey Cortana » de disponible pour ne pas avoir à appuyer sur un bouton. Et qui marche très bien !

La reconnaissance vocale de Cortana marche vraiment très bien je pense que c’est Microsoft Oxford qui est utilisé par en dessous …

En farfouillant dans la base de registre et le windows on peut voir qu’il y a des grammaires SAPI compilées classiques qui dans certains cas vont rediriger l’information vers Bing ou des services dédiés …

J’ai aussi trouvé une extension Chrome qui « magiquement » interrompt une requête Bing pour ouvrir un onglet Google ! Truc de fou ! (Je n’ai pas compris comment ça marchait par en dessous)

J’ai donc fait une extension Bing2SARAH sur le même principe 🙂

Pour l’installer il suffit de la déclarer dans Chrome. Si vous modifiez le JS il faut la recharger.

Enfin il ne reste plus qu’a créer un plugin « cortana » qui fera le code que vous souhaitez:

[crayon]
exports.action = function(data, next){

// Called by SARAH to perform main action
info(‘Plugin cortana is called …’, data);

var query = data.q
console.log(‘Cortana’, query);

next({ });
}
[/crayon]

Pour faire une redirections:
[crayon]
next({ ‘tts’: ‘<script>document.location = "http://meteofrance.com"</script>’ });
[/crayon]

Pour fermer l’onglet Chrome:
[crayon]
next({‘tts’: ‘<script>self.close();</script>’ });
[/crayon]

 

Vidéo !

[mom_video type= »youtube » id= »OJrUSycjY5M »]

Améliorations

Voici les pistes d’amélioration pour ce « code à l’arrache »

  • Extension: Peut-on fermer l’onglet ou ne pas l’ouvrir ?
  • Extension: Peut-on exécuter un programme ?
  • Extension: Rajouter un fichier option pour configurer l’URL du serveur SARAH
  • Plugin: faire une regexp pour parser les commandes
  • Plugin: jeter le texte dans un plugin RiverScript (chatter bot)
  • Plugin: renvoyer une balise script qui fera une redirection vers une page web du serveur SARAH

Enfin bref, … the sky the limit ! Cortana peut maintenant demander à SARAH d’allumer vos lampes !

Non je ne sais pas

  • comment Google hack Bing
  • comment changer « Hey Cortana » (certainement changer les grammaires compilées)
  • comment hacker les petit widget (comme la météo) de Cortana (il y a une sorte de template bing)

24 réflexions sur “Quand Cortana parle à SARAH

  • 30 juillet 2015 à 17 h 44 min
    Permalien

    Bonjour Jean-Philippe, le temps passe vite! 😉

    C’est une excellente nouvelle, car de mon côté la reconnaissance vocale est très très difficile avec sarah… Par contre là qu’est-ce qu’on récupère dans le plugin? Peut-on dire « Hey Cortana Quelle est la météo? » tout comme on dirait « Sarah quelle est la météo? » en dupliquant le code du plugin météo dans le plugin cortana? Ce serait sympa d’avoir ce genre d’exemple, ça aiderait bcp!

    Un grand merci d’avance, à bientôt!

    Philippe

    Répondre
    • 5 août 2015 à 21 h 33 min
      Permalien

      La question est, est-ce que SARAH possède la même voix que Cortana ? Ce que je veux faire c’est détourner les requêtes bing vers cleverbot afin que Cortana réponde toujours quelque chose. J’imagine qu’au fil du temps, elle va s’améliorer et intéragir un peu plus avec l’utilisateur (la version anglaise est déja pas mal) mais en attendant, je voudrais utiliser cleverbot pour le «  »reliquat » envoyé à bing et ça, même le sdk de cortana ne le permet pas.

      J’ai déja joué avec le sdk cortana (y compris avec des web apps – voir UWA en javascript) car j’utilise windows 10 depuis un petit moment mais pour forwarder une interaction à sa propre application il faut déclarer un ou un phrase clé. Je ne me vois pas dire « Cortana demande à Cleverbot si tu vas bien »…UX = 0/20

      Pourquoi la voix est importante ? et bien imaginons que je dise « Bonjour comment vas tu ? ». Cortana est capable de répondre à cette question. Si j’enchaine avec une question ou une phrase qui elle n’est pas reconnue, alors Cleverbot pourrait être interogé mais si la voix pour dicter la réponse n’est plus la même c’est pas super.
      Sinon, Cleverbot est poliglot. Plus des gens parlant français discuterons avec lui, plus la qualité des réponses sera bonne (une bonne raison de l’intégrer à Cortana et ou Sarah).

      Il est évident qu’encore une fois, les discussions en anglais sont meilleures mais, ayant redécouvert cleverbot il y a 3 semaines, je m’amuse bien depuis.

      J’ai créer un userscript afin d’optimiser la page web par défaut en activant au passage le TTS et the speech to text chrome est c’est pas mal.

      Par contre, je voudrais un point d’entré unique pour tout et plus utiliser cortana pour 3 ou 4 choses, mon plugin cleverbot que je dois déclancher sous chrome pour autre chose , voir SARAH pour tout le reste.
      En gros:
      – Tout ce que Cortana s’est faire par défaut (et j’imagine que la liste va s’agrandir – voir cortana analytics par exemple) et bien je veux la laisser faire.
      – Pour tout ce qui est spécifique genre la domotique, je passe par le sdk cortana (encore une fois, je veux une cohérence des voix et j’ai pas vérifié si c’est le cas..je sais j’insiste)
      – Pour tout le reste qui lance bing ou bien chrome actuellement, je demande à cleverbot.

      …et si vraiment je veux lancer une requête google, il me suffirait de dire « Recherche sur internet blablabla » et dans le plugin chrome, j’évite la redirection
      si le texte commence par ça mais sinon, cortana aurait réponse à tout.

      L’idée c’est que l’interaction – peu importe la cible – paraisse le plus transparent possible.

      Ex-Machicha ou HER à la maison 🙂 oui je suis un peu torturé de l’esprit.

      Répondre
      • 5 août 2015 à 21 h 59 min
        Permalien

        > Ce que je veux faire c’est détourner les requêtes bing vers cleverbot afin que Cortana réponde

        Ce n’est pas possible, c’est ce que j’explique dans mon article, Cortana balance une requête sans écouter de réponse. Et il n’y a pas de moyen de hacker les widgets Cortana (pour le moment).

        > Pourquoi la voix est importante ? …

        Oui c’est évident que si la voix change c’est pourri. Si tu cherches dans le répertoire de windows et dans la base de registre il y a la voix de Cortana qui doit s’appeler de mémoire Julie. Et je ne crois pas qu’on puisse la changer. Pour SARAH, si tu connais un peu ? Tout le monde change la voix. Les gens pendant des années ont demandé à mettre Jarvis (donc un homme). Voxygen propose des voix sympa d’ailleurs mais payantes.

        > Je passe par le sdk cortana

        Tu as un pointeur vers le SDK de Cortana ? Pour le moment SARAH utilise simplement le SpeechRecognitionEngine de Windows (qui n’est pas lié à Cortana) pour les commandes. Donc j’ai Cortana pour le Speech2Text et SARAH pour tout le reste.

        > Extension

        Oui j’ai fais un truc à l’arrache on pourrait imaginer des tonnes de choses … (Je pensais même ne pas ouvrir d’onglet mais lancer un process pour que ce soit plus propre)

        Répondre
    • 5 août 2015 à 22 h 17 min
      Permalien

      Bon premièrement mes excuses car je suis un peu une quiche….j’ai répondu sur le mauvais post…

      Pour info, il est possible d’intéragir avec le canvas de cortana en c# et en principe js (mais la doc n’est pas à jour). Tout est expliqué dans la doc suivante : https://msdn.microsoft.com/en-us/library/windows/apps/xaml/dn974230.aspx

      J’ai aussi regardé les vidéo dans channel 9 qui expliquent comment créer des intéractions en backgound ou foreground.

      https://channel9.msdn.com/Search?term=cortana#ch9Search

      En principe Cortana est basé sur SAPI donc il devrait y avoir une cohérence des voix entre un programme C# ou SARAH et cortana mais j’ai pas essayé de faire parler mon application une fois lié à cortana via le sdk.

      Si c’est le cas, j’ai résolu mon problème mais d’après ta réponse il semble que cette cohérence n’existe pas. Je vais creuser

      Répondre
      • 5 août 2015 à 23 h 22 min
        Permalien

        Techniquement il y a une voix et du SAPI donc tu dois peut etre pouvoir parler en précisant la voix de Cortana (l’API permets de les lister) mais tu ne peux pas a ma connaissance faire parler Cortana (juste peut etre utiliser sa voix)

        Merci pour les liens faut que je regarde, a une époque j’avais vu un truc mais c’était très « web » et pas desktop

        Répondre
  • 30 juillet 2015 à 18 h 08 min
    Permalien

    Si tu as des problèmes de reconnaissance vocale c’est que tu dois avoir des soucis avec ton micro et donc tu risques d’avoir les même avec Cortana.

    Cortana ne sait presque rien faire, donc elle fait du Speech2Text vers Bing et t’affiche des résutlats de recherche. Je ne fais que forwarder le Speech2Text vers un plugins spécifique SARAH.

    MAIS le problème est toujours le même il faut interpréter de texte … donc faire une RegExp pour matcher « meteo » par exemple puis faire un SARAH.call(‘meteo’).

    Donc si la personne dit « Hey cortana je voudrais la météo le lendemain du jour ou je pars en vacance » SARAH recevra le texte mais bonne chance pour le comprendre 🙂

    Répondre
  • 30 juillet 2015 à 18 h 46 min
    Permalien

    Hello Jean-Philippe, ne pourrait-on envisager avec ton extension Chrome qu’elle strippe le « Hey Cortana », le remplace par « Sarah » et appelle le client Sarah en emulate avec le texte que Cortana a transcrit ? De cette manière on utiliserait les plugins existants ? C’est en gros ce que je fais avec le speech recognition de Chrome ..

    Répondre
    • 30 juillet 2015 à 18 h 50 min
      Permalien

      Oui c’est possible, le plugin Chrome est très bête il fait une simple redirection. Le « Hey Cortana » n’est pas toujours présent, il faut aussi virer les ‘.’ à la fin des phrases.

      Répondre
    • 30 juillet 2015 à 18 h 55 min
      Permalien

      L’idée que j’avais dans un premier temps était de faire chatterbot (même si c’est naze de devoir a chaque fois dire « Hey Cortana ») !

      Répondre
    • 5 août 2015 à 18 h 05 min
      Permalien

      Bonjour,

      En ce qui concerne le fait d’avoir à dire « Hey cortana » à chaque fois peut facilement être contouné via un petit bouton bluetooth qui permet de lancer cortana (http://www.zone-numerique.com/bt-cortana-button-un-bouton-physique-bluetooth-pour-lassistant-de-microsoft.html)
      Moi aussi je voudrais pouvoir utiliser un chatterbot à la place de la recherche google. Cleverbot est vraiment super marant même en français et en plus il dispose d’une api (cleberbot.io).
      Ce serait assez simple d’appeler une url en passant le texte et cleverbot retournerait une phrase mais comment faire répéter cette phrase à cortana ? Il est possible d’utiliser SARAH au milieux (voir de créer un pluging cleverbot pour SARAH) mais dans ce cas la voix sera differente non ? Niveau UX c’est pas top….quelqu’un à une solution ?

      Répondre
      • 5 août 2015 à 18 h 24 min
        Permalien

        Fast Simple Accurate picks two 🙂

        La version Fast et Simple c’est Cortana + le Plugin Chrome qui attaque SARAH qui requête CleverBot qui fait SARAH.speak() de la réponse. Si tu utilise un bouton tu n’entendra même pas la voix de Cortana.

        Si tu passes plus de temps il faut développer une appli C# autour de Oxford qui interroge directement CleverBot et la tu as une applis standalone.

        Il y a une API ? Française ? sur CleverBot ?

        Tu peux aussi installer RiverScript (plugin ChatterBot de SARAH je crois) et lui balancer la phrase de Cortana mais le pb de RiverScript c’est que je n’ai pas de brain français complet

        Répondre
  • 30 juillet 2015 à 18 h 54 min
    Permalien

    J’espère que Microsoft va nous expliquer comment rajouter des services ou être serveur de widget

    Enfin un petit Intel Stick Window 10 + un Microphone et ca devrait le faire ?

    Répondre
  • 2 août 2015 à 20 h 20 min
    Permalien

    Le module qui « hacke » bing via chrome se base sur le fait que chrome est nécessaire en navigateur par défaut.
    Il rajoute ensuite un listener global dans chrome demandant de lui envoyer toute URL à destination de bing, et opère un remplacement de texte de bing.com/search par un autre moteur pour laisser ensuite chrome chercher la page finale.
    Plus d’infos sur l’api webrequest de chrome, qui permet de manipuler le traffic à la volée : https://developer.chrome.com/extensions/webRequest

    Mais ce n’est faisable que si chrome est le navigateur par défaut, ça ne fonctionnera plus si c’est un autre (à moins de mettre un module similaire)

    Répondre
    • 2 août 2015 à 21 h 03 min
      Permalien

      Merci pour l’info ! Je ne pensais pas que Chrome pouvait intercepter comme ça des requêtes pour Bing mais qui passe par lui. C’est bien pratique !

      Répondre
    • 17 octobre 2015 à 10 h 56 min
      Permalien

      Oui mais du coup, on peut choisir le trigger (« Sarah » ou autre…) et ensuite rediriger les STT vers Sarah (comme dans l’article ci-dessus)…

      Répondre
      • 18 octobre 2015 à 10 h 26 min
        Permalien

        Tu peux déjà dans SARAH faire une grammaire qui dit « SARAH » et déclenche le raccourcis clavier. Puis le texte partira vers SARAH via l’extension.

        Mais j’ai l’intuition que détecter un mot n’est pas top. Idéalement il faudrait plutôt balancer l’audio pas compris à Oxford après coup

        Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.