<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Christophe Nowicki &#187; Voice Tracker</title>
	<atom:link href="http://www.csquad.org/tag/voice-tracker/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.csquad.org</link>
	<description>Just for fun</description>
	<lastBuildDate>Fri, 14 Jan 2011 08:32:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Reconnaissance vocale sous GNU/Linux et domotique</title>
		<link>http://www.csquad.org/2009/10/27/reconnaissance-vocale-avec-julius/</link>
		<comments>http://www.csquad.org/2009/10/27/reconnaissance-vocale-avec-julius/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 16:32:13 +0000</pubDate>
		<dc:creator>cscm</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Home automation]]></category>
		<category><![CDATA[Robotics]]></category>
		<category><![CDATA[AIML]]></category>
		<category><![CDATA[eSpeak]]></category>
		<category><![CDATA[Julius]]></category>
		<category><![CDATA[Microphone array]]></category>
		<category><![CDATA[Voice Tracker]]></category>
		<category><![CDATA[VoxForge]]></category>
		<category><![CDATA[WAF]]></category>

		<guid isPermaLink="false">http://www.csquad.org/?p=554</guid>
		<description><![CDATA[L&#8217;objectif de cet article est de décrire mon avancement sur le système de reconnaissance vocale dans mon installation domotique. En effet, pour mon usage personnel, j&#8217;ai mis au point un chatterbot pour contrôler de manière intuitive l&#8217;appartement.
Cette technologie permet de tenir une discutions intuitive avec une maison intelligente pour lui faire exécuter des ordres.  [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;objectif de cet article est de décrire mon avancement sur le système de <a href="http://fr.wikipedia.org/wiki/Reconnaissance_vocale">reconnaissance vocale</a> dans mon <a href="/installation-domotique/">installation domotique</a>. En effet, pour mon usage personnel, j&#8217;ai mis au point un <a href="http://en.wikipedia.org/wiki/Chatterbot">chatterbot</a> pour contrôler de manière intuitive l&#8217;appartement.<br />
Cette technologie permet de tenir une discutions intuitive avec une maison intelligente pour lui faire exécuter des ordres.   (allez <a href="http://www.imdb.com/title/tt0062622/">Stanley</a>, tu t&#8217;es seulement planter de 10 ans <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ) :<br />
<code><br />
Moi>Alfred?<br />
Alfred>Oui, monsieur.<br />
Moi>Allume la lumière du salon.<br />
-- run xpl-sender -c x10.basic command=on device=a3<br />
Alfred>C'est fait.<br />
</code><br />
Le nom du bot est un hommage à <a href="http://en.wikipedia.org/wiki/Alfred_Pennyworth">Alfred Pennyworth</a>. Allons faire un petit tour dans les entrailles de la batcave <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Définition du besoin</h3>
<p>L&#8217;accumulation des télécommandes sur mon installation domotique, fait chuter mon <a href="http://en.wikipedia.org/wiki/Wife_acceptance_factor">WAF</a> de manière dramatique.<br />
 En effet, pour regarder une chaîne de télévision ou allumer la lumière.<br />
Il est nécessaire d&#8217;utiliser deux ou trois télécommandes différentes.<br />
Naviguer dans des interfaces, etc&#8230;<br />
Bref, pour des technologies donc l&#8217;objectif est d&#8217;améliorer la qualité de vie et rendre les taches quotidienne plus facile, j&#8217;avais un gros problème <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Après un petite discussion et une mise au point avec ma moitié, j&#8217;ai réussi à vendre la solution de contrôle par la voix.<br />
Belle connerie me voilà parti dans un domaine que je ne connais pas <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h4>Première Approche</h4>
<p>Je <a href="http://www.touteladomotique.com/forum/viewtopic.php?t=2112">lance une boue à la mer</a> sur le forum <em>&#8220;toute la domotique&#8221;</em>. </p>
<p>Visiblement, je ne suis pas le seul à chercher ce genre de fonctionnalité. Actuellement, nous avons dans le domaine :</p>
<ul>
<li>l&#8217;abominable <a href="http://www.homeseer.com/">HomeSeer</a> qui fonctionne très mal en Anglais à l&#8217;aide de l&#8217;interface de reconnaissance vocale inclue dans <a href="http://www.microsoft.com/enable/products/windowsvista/speech.aspx">Microsoft Windows</a> et la <a href="http://en.wikipedia.org/wiki/Speech_Application_Programming_Interface">SAPI</a> ;</li>
<li>Rien de spécifique à la domotique sous GNU/Linux, mais une belle galaxie de programmes dans le domaine.</li>
</ul>
<h3>Le choix du microphone</h3>
<p>Ma petite dame voulais parler librement sans aucune contrainte et il n&#8217;étais pas question de l&#8217;équiper d&#8217;un microphone.<br />
J&#8217;ai donc cherché une solution qui permet de capter la parole dans une pièce sans microphone sur la personne.<br />
La solution magique s&#8217;appelle la technique du <a href="http://en.wikipedia.org/wiki/Microphone_array">Microphone array</a>.<br />
Le principe est très simple, mettre en commun plusieurs microphones reliés à un <a href="http://en.wikipedia.org/wiki/Digital_signal_processor">DSP</a> qui permet de faire le traitement du signal en fonction de l&#8217;orientation physique des microphones.<br />
J&#8217;ai donc proposé de mettre en place chez moi le <a href="http://groups.csail.mit.edu/cag/mic-array/images/array_pics/tn/dscf0483.jpg.html">LOUD</a> (non ce n&#8217;est pas un radiateur <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ).<br />
Bon vous vous doutez bien que lorsque j&#8217;ai proposé la solution du LOUD, j&#8217;ai faillit passer  par la fenêtre <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />   </p>
<table>
<tr>
<td valign="top">
<img src="http://www.csquad.org/wp-content/uploads/2009/09/microphone_array.jpg" alt="microphone_array" title="microphone_array" width="275" height="142" class="alignnone size-full wp-image-582" />
</td>
<td>
Heureusement, il existe des solutions plus simples telles que le <a href="http://www.acousticmagic.com/">Voice Tracker</a> de chez Acoustic Magic. </p>
<p>Celui-ci permet de capter la parole dans une pièce, retraite le signal et permet d&#8217;obtenir sur une prise Jack classique la voix et rien que la voix dans une pièce.<br />
Magique <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </td>
</tr>
</table>
<p>Je peux parler le dos tourner au microphone dans une pièce de 20m^2 et l&#8217;ordinateur capte ma voix de manière impressionnante <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Le logiciel de reconnaissance vocale</h3>
<p>Il y a principalement deux solutions dans le domaine sous GNU/Linux :</p>
<ul>
<li>Le projet <a href="http://cmusphinx.sourceforge.net/html/cmusphinx.php">CMU Sphinx</a> avec PocketSphinx, Sphinx-[234], etc&#8230;</li>
<li><a href="http://julius.sourceforge.jp/en_index.php">Julius</a>, Open-Source Large Vocabulary CSR Engine Julius.</li>
</ul>
<p>Sur ces deux moteurs de reconnaissance vocale, reposent de nombreux <a href="http://www.voxforge.org/home/docs/faq/faq/what-is-a-dialog-manager">Dialog Manager</a>,  qui permettent d&#8217;exploiter le moteurs pour faire de la téléphonie, de contrôle vocale, etc&#8230; </p>
<h3>Ma méthode</h3>
<p>Soyons claire, je ne suis pas un expert en reconnaissance vocale et ce domaine est vraiment très difficile d&#8217;accès et nécessite la compréhension de nombreuses notions.<br />
J&#8217;ai donc adopté la technique <a href="http://www.epitech.eu/">EPITECH</a> : c&#8217;est à dire faire en sorte que cela fonctionne. ( sans comprendre tout le contexte <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  )</p>
<h3>Un bon informaticien est un informaticien feignant</h3>
<p>Pour faire fonctionner Julius, il est nécessaire de lire à haute voix de nombreux mots pour enregistrer les différents <a href="http://fr.wikipedia.org/wiki/Phon%C3%A8me">phonèmes</a> qui les composent. Afin de créer un <a href="http://fr.wikipedia.org/wiki/Mod%C3%A8le_de_Markov_cach%C3%A9">Modèle de Markov caché</a> exploitable par le logiciel.<br />
Voici donc comment je m&#8217;y suis pris pour éviter cette phase fastidieuse du projet.</p>
<h4>Utilisation d&#8217;un logiciel de synthèse vocale</h4>
<p>1 ère approche une solution assez &#8220;<em>laide</em>&#8220;,  qui consiste à faire lire ces mots par un logiciel de <a href="http://en.wikipedia.org/wiki/Speech_synthesis">synthèse vocale</a> comme <a href="http://espeak.sourceforge.net/">eSpeak</a>. Mais le résultat n&#8217;était pas très bon.</p>
<h4>Utilisation d&#8217;une collection d&#8217;enregistrement audio</h4>
<p>J&#8217;ai par la suite découvert le <a href="http://shtooka.net/fr/">projet Shtooka</a>, qui est une collection audio libre de mots français.<br />
Tous les termes liés à la domotique ne sont pas disponible dans le projet mais il est très facile d&#8217;ajouter ces termes à sa base de données locale.</p>
<h4>Conversion texte vers Phonème</h4>
<p>Une des étapes de l&#8217;apprentissage de Julius est la conversion du texte en <a href="http://fr.wikipedia.org/wiki/Phon%C3%A8me">Phonèmes</a>, pour résoudre ce problème, j&#8217;ai utilisé l&#8217;option -X de  <a href="http://espeak.sourceforge.net/">eSpeak</a> dont voici un exemple de sortie :</p>
<pre>$espeak -v fr -q -X "lumière"
Translate 'lumière'
  1     l        [l]

  1     u        [y]

  1     m        [m]

 21     i (A     [j]
  1     i        [i]

 43     è       [E]

  1     r        [r]

 22     e (_     []
  1     e        [@]

 lymj'Er</pre>
<h4>Un peu de glu</h4>
<p>Pour faire fonctionner tout ces éléments ensemble, je me suis fait un script Perl (très sale pour le moment) permettant de réaliser automatiquement toutes ces étapes :</p>
<ul>
<li>analyse des questions posées au robot ;</li>
<li>la conversion des mots en phonèmes ; </li>
<li>la diction des mots ;</li>
<li>la création du modèle accoustique.</li>
</ul>
<p>Il s&#8217;agit de l&#8217;automatisation de toutes les étapes de la création d&#8217;un modèle acoustique du projet <a href="http://www.voxforge.org/home/dev/acousticmodels/linux/create/htkjulius/tutorial">VoxForge</a>.</p>
<h3>Les travaux en cours</h3>
<p>Mon projet est disponible à cette adresse : <a href="http://alfred.csquad.org/">Alfred</a><br />
Il est en cours de développement mais pour l&#8217;instant il est possible de donner des ordres simples. </p>
<p>J&#8217;utilise <a href="http://www.rivescript.com/">RiveScript</a> pour la définition des tâches et de la conversation. Ce langage de chatbot est plus puissant que  <a href="http://en.wikipedia.org/wiki/AIML">AIML</a>. Car il permet d&#8217;inclure du code Perl assez puissant dans le code de la conversation. Voici un exemple :<br />
<code>$ more lib/Alfred/languages/en/x10.rs<br />
+ switch * on<br />
- do you want me to switch &lt;star&gt; on?<br />
+ yes<br />
% do you want me to switch * on<br />
- &lt;call&gt;xpl_x10_send_on &lt;botstar&gt;&lt;/botstar&gt;&lt;/call&gt;</code><br />
<code>$more lib/Alfred/modules/x10.rs<br />
> object xpl_x10_send_on perl<br />
    my ($obj,$method,@args) = @_;<br />
    $obj->{'xpl'}->send(<br />
        message_type => 'xpl-cmnd', class => 'x10.basic',<br />
        body => { command => 'on', device => 'a3'  });<br />
< object<br />
</code></p>
<h3>Un petit appel à contribution</h3>
<p>J'aurais gagné énormément de temps si le projet <a href="http://www.voxforge.org/">VoxForge</a> avait reçu plus de contribution de la part des utilisateurs francophones.</p>
<p>En effet, il n'y a pas assez de contribution pour pouvoir faire un modèle accoustique en Français.<br />
Cela permettra de <strong>disposer d'un système de reconnaissance vocale libre</strong> en Français.<br />
Ce qui intéresse beaucoup de monde à mon avis <img src='http://www.csquad.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
C'est donc un petit appel à contribution aux projets VoxForge et <a href="http://shtooka.net/fr/">Shtooka</a>.</p>
<h3>Références intéressantes</h3>
<ul>
<li>Ensemble de <a href="http://cookerspot.tuxfamily.org/wikka.php?wakka=ReconnaissanceVocale">liens intéressants</a> sur le sujet de la reconnaissance vocale sous GNU/Linux.</li>
<li>Un exemple d'utilisation de Julius : <a href="http://www.linux.com/archive/feature/134671">Querying a database using open source voice control software</a> ; </li>
<li>Les <a href="http://www.voxforge.org/home/dev/acousticmodels/linux">tutoriels</a> du projet VoxForge ;</li>
<li>Le <a href="http://sourceforge.jp/projects/julius/downloads/37581/Juliusbook-part-4.1.2-en.pdf">Julius Book</a>. </li>
</ul>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csquad.org/2009/10/27/reconnaissance-vocale-avec-julius/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
	</channel>
</rss>

