Recherche
Renseignez vos critères :

Revue de Presse
Publicité

pawPAW : reconnaissance vocale sous Android et intégration domotique

par Hervé
Publiés le: 11 janvier 2013
Commentaires: 8 Commentaires
Catégories: Android, Développement

Le dernier exercice de la semaine lié à PAW consiste a programmer la fonctionnalité de reconnaissance vocale et de l’intégrer à un système domotique.  Le principe est similaire aux autres scripts de la semaine.  Le serveur domotique déclenche la reconnaissance vocale sur le téléphone Android. Nous parlons, le résultat est analysé par PAW puis communiqué éventuellement au système domotique – la box eedomus dans notre exemple. Voyons comment procéder.

Le script du jour apporte les spécificités suivantes:

  • Pouvoir être appelé par une simple requête HTTP
  • Annoncer par synthèse vocale que le système est prêt à écouter
  • Écouter l’ordre
  • Décoder l’ordre puis le communiquer au système domotique

Pour obtenir le service attendu encore une fois il suffit de placer le script sur le serveur PAW sur votre téléphone Android.

Voici le script que je vous propose comme base de travail.  N’hésitez pas à le retravailler et à l’améliorer car il demande à être optimisé:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Reconnaissance vocale</title>

<bsh>

// pour la reconnaissance vocale
import android.speech.RecognizerIntent;

// pour l'appel d'url
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.*;
import org.apache.http.client.methods.*;
import org.apache.http.util.*;

//on annonce que l'on est prêt
speak ("Parlez. Je vous écoutes.", Locale.getDefault());

//on laisse le temps de parler
Thread.sleep(2000);

//lancement de la reconnaissance vocale
if(isIntentAvailable(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)) {
  resultat = speechToText("Que puis-je pour vous?");
}
else {
  resultat = "SpeechToText n'est pas possible sur cet appareil";
}

reponse="";
getURL="";

// déterminataion de l'action à lancer
if (resultat.equals("allume la lumière du salon")) {
//identifiants pour l'API eedomus ainsi que le periph_id à remplacer par les vôtres
	getURL="http://api.eedomus.com/set?action=periph.value&api_user=XXXXX&api_secret=YYYYYYYYYYYYY&periph_id=123456&value=100";
	retour = "la lumière du salon est allumée.";
}
if (resultat.equals("éteint la lumière du salon")) {
//identifiants pour l'API eedomus ainsi que le periph_id à remplacer par les vôtres
	getURL="http://api.eedomus.com/set?action=periph.value&api_user=XXXXX&api_secret=YYYYYYYYYYYYY&periph_id=17791&value=0";
	retour = "la lumière du salon est éteinte.";
}

//lancement de l'action
if (getURL.equals("")) {
	speak ("désolé mais je n'ai pas compris", Locale.getDefault());	
}
else {
	client = new DefaultHttpClient(); 

	get = new HttpGet(getURL);
	responseGet = client.execute(get); 
	resEntityGet = responseGet.getEntity();

	if (resEntityGet != null) {
		reponse = EntityUtils.toString(resEntityGet);
		speak (retour, Locale.getDefault());
	}
}

</bsh>
</head>
<body>
<h1>Reconnaissance vocale</h1>

<h3>Paramètres :</h3>
<p>
Aucun!<br>
</p>

<h3>Fonctionnement :</h3>
<p>
Reprenant le principe du répondeur téléphonique qui vous incite à "parler après le bip sonore", vous allez être invités à parler afin de commander votre système domotique.<br>
Enoncez alors votre ordre de manière claire et distincte.<br>
</p>

<h3>Paramètres :</h3>
<p>
Ce que j'ai compris : <bsh>$$.print(resultat); </bsh><br>
Réponse de la eedomus: <bsh>$$.print(reponse); </bsh><br>
url: <bsh>$$.print(getURL); </bsh><br>
</p>
</body>
</hmtl>

L’installation se fait de la même manière que pour le script concernant la reconnaissance vocale.  Le prérequis est bien entendu d’avoir installé au préalable le serveur PAW sur votre téléphone Android comme présenté dans le précédent article:

  • Télécharger le code précédent et le sauvegarder le sur votre disque dur dans un fichier appelé : « speech_to_text.xhtml »
  • Se connecter au serveur PAW.
  • Accéder au gestionnaire de fichiers : Menu Media->File manager
  • Dans le répertoire /sdcard/paw/html de votre téléphone créer le répertoire « actions » s’il n’existe pas encore

  • Indiquer l’endroit de votre disque dur où se trouve le script à uploader sur le serveur PAW en cliquant sur « Parcourir ».
  • Sélectionner le fichier « speech_to_text.xhtml » et cliquer sur « Open ».
  • Effectuer l’upload en cliquant sur « Upload ».
  • Le message suivant vous confirme le chargement du script sur le serveur.

Il ne vous reste plus qu’à renseigner l’URL adéquate dans un scénario pour une Zibase ou bien dans un périphérique HTTP sur un serveur eedomus.

L’URL à renseigner sera de la forme:

http://192.168.0.10:8080/actions/speech_to_text.xhtml

Pensez à modifier « 192.168.0.10 » par l’adresse IP de votre serveur PAW.  Il n’y a pas de paramètres!

Afin de pouvoir le lancer j’ai créé un périphérique actionneur HTTP sur la box eedomus.  N’ayant qu’une valeur il permet de lancer la reconnaissance vocale.

Comme le montre la vidéo ci dessous voici le résultat de l’association de PAW et d’une box domotique eedomus pour permettre l’utilisation de la synthèse vocale.  Le tout est piloté par l’application dédiée de l’eedomus.

Image de prévisualisation YouTube

Cet article termine la semaine de présentation de ce serveur HTTP sous Android.  N’hésiter pas à partager vos scripts ou idées de scripts dans les commentaires ou sur le forum.

Si vous avez apprécié, n'hésitez pas à laisser votre commentaire ou à souscrire au flus RSS .

Ceci pourrait vous intéresser:


Publicité

8 Commentaires - Laisser un commentaire
  1. pikat dit :

    Bonjour, super tuto !!!!
    Par contre je rencontre un problème, j’ai suivi le tuto mais lorsque je rentre mes identifiants zibase, rien ne se passe ????
    Auriez-vous une idée ?
    Merci.

    // déterminataion de l’action à lancer
    if (resultat.equals(« allume la lumière du salon »)) {
    //identifiants pour l’API eedomus ainsi que le periph_id à remplacer par les vôtres
    getURL= »http://zibase.net/m/set_iphone.php?login=xxxxxx&password=xxxxxx&action=comfort&actionComfort=module&idModule=A1&actionModule=1
    « ;
    retour = « la lumière du salon est allumée. »;
    }

    • Hervé dit :

      Bonsoir,
      Avez-vous essayé de prendre juste la partie située entre les balises et le jouer dans l’interpréteur de commandes (sous PAW: Developpent=>BeanShell Console). Le symptôme « rien ne se passe est tout à fait à relier à une erreur de syntaxe. Si il y a une erreur dans le code, le script ne s’exécute plus. Le fait de le jouer dans la « BeanShell Console » permet d’avoir un retour pour débugger.

  2. pikat dit :

    J’ai aussi essayé avec ça mais ça ne marche toujours pas…. ça coince après avoir dit allume la lumière du salon, rien ne se passe même pas le retour vocal ???

    // détermination de l’action à lancer
    if (resultat.equals(« allume la lumière du salon »)) {
    //identifiants pour l’API eedomus ainsi que le periph_id à remplacer par les vôtres
    getURL= »http://http://192.168.x.xx/cgi-bin/domo.cgi?cmd=ON%20A1
    « ;
    retour = « la lumière du salon est allumée. »;
    }

  3. pikat dit :

    Merci de votre réponse effectivement il y avaient des erreurs….
    J’ai simplifié au maximum (trop apparemment…) car cela ne marche toujours pas après avoir répondu « oui » ou « non merci ». En fait cela n’exécute pas la commande d’allumer ou d’éteindre ???

    import android.speech.RecognizerIntent;

    import org.apache.http.impl.client.DefaultHttpClient.*;
    import org.apache.http.*;
    import org.apache.http.client.methods.*;
    import org.apache.http.util;

    speak (« Il commence a faire nuit, voulez-vous que j’allume une lampe ? », Locale.getDefault());

    Thread.sleep(2500);

    if(isIntentAvailable(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)) {
    resultat = speechToText(« Que puis-je pour vous ? »);
    }

    if (resultat.equals(« oui »)) {

    getURL= »http://192.168.0.30/cgi-bin/domo.cgi?cmd=ON+A1″;

    retour = « la lumière est allumée. »;
    }
    if (resultat.equals(« non merci »)) {

    getURL= »http://192.168.0.30/cgi-bin/domo.cgi?cmd=OFF+A1″;

    retour = « la lumière est éteinte. »;
    }

  4. pikat dit :

    Super, j’ai tout repris et ça fonctionne, c’est génial, il n’y a plus qu’à rajouter quelques phrases et le tour sera joué !!!!
    Cool MERCI pour tout !!!!!!!!!!!

  5. pikat dit :

    Par contre je n’ai pas le retour vocal (la lumière est éteinte ????)

  6. pikat dit :

    J’ai modifié le script et c’est bon j’ai le retour vocal….. Super maintenant les possibilités être nombreuses (lancement de la musique, coupure et mise en route de l’alarme….)
    Un grand merci pour ce tuto !!!!

Laisser un commentaire

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


− 9 = 0

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>



International
    Translate to:

Plugin created thanks to micro sd card , r4i uk , sd card and r4i gold
Publicité
Prochains évènements
  • 23 septembre 2014CES Unveiled - SAO PAULO
  • 24 septembre 2014SmartGrid+SmartCity -Paris La Défense
  • 24 septembre 2014IBS Intelligent Building Systems - Paris La Défense
  • 22 octobre 2014CES Unveiled - PARIS
  • 31 octobre 2014#CONNECT-it - Paris
AEC v1.0.4
Partenaires
Domadoo Planète Domotique Univers Domotique Annuaire de la Domotique en France