2
$\begingroup$

I wanted to present a voice-controlled robot in my lab's upcoming demo contest. My robot is essentially a x86 Ubuntu notebook resting on top of a two-wheeled platform, so in principle any solution available on Linux would do.

I looked into Julius, but it seems the only comprehensive acoustic model available for it is aimed at the Japanese language – which coincidentally I can speak a little, but apparently not clearly enough to produce anything beyond garbled text. I also tried the Google Speech API, which has a decent selection of languages and worked very well, but requires Internet access. Finally there is CMU Sphinx, which I haven't yet tested, but I'm afraid might have a problem with my accent (I'm a nativa Brazilian Portuguese speaker, and apparently there is no such acoustic model available for it).

Is that all there is to it? Have I missed any additional options? As you may have guessed, my main requirement is support for my native language (Brazilian Portuguese), or failing that, good performance for English spoken with foreign accents. A C++ API is highly desirable, but I can do with a shell interface.

$\endgroup$

4 Answers 4

2
$\begingroup$

Well, if no connection with internet is a requirement, I would say that the best option could be using Julius with a self trained corpus model. In this case you can use your own language and intonation. As an advantage, the success percentage of the ASR unit will be higher than using a public trained corpus. As a disadvantage, this corpus will be useful just for you, for other users the percentage of recognized commands will be lower.

With your own corpus, using a limited number of voice commands would be something relatively easy to do, but of course if we are speaking about natural language recognition, the only solution is looking in internet for an already trained corpus of your own language.

I used Simon http://www.simon-listens.org to prepare my own corpus, and once was correctly working, I integrate it in the Julius Engine.

If using a remote service, as you said the Google API, could be possible, then a combination of Julius + Google API would be the best solution. Julius continuously running the ASR process looking for a keyword (already integrated in your corpus), and once this keyword is found, trigger a request to the Google service that is not limited for the number of commands to be recognized.

One year ago I created a similar project using Julius, Google API and the Raspberry Pi board. Here can you find further infos: http://www.robotergarten.de (dead link)

$\endgroup$
1
  • 1
    $\begingroup$ I didn't know you could use Simon to collect a custom corpus to Julius. I'll look into it later, but since the Internet access requirement insn't really a problem, for now I'll go with Google Speech. $\endgroup$
    – xperroni
    May 27, 2014 at 7:00
1
$\begingroup$

a couple of years ago I tried Julius and it worked quite well. It is documented here, hope it helps: http://achuwilson.wordpress.com/2012/01/11/speech-recogition-using-julius-in-linux/

and

http://achuwilson.wordpress.com/2012/01/11/chippu-speech-recognition/

$\endgroup$
1
$\begingroup$

Also for completeness, I did find a Julius model for Brazilian Portuguese, but was rather underwhelmed with its performance – Julius would take several seconds to process any utterance, and usually get what I said hilariously wrong. A second model that promised improved performance for dictation would require me to recompile Julius in order to work, but at that point I had already resigned myself to relying on the Google cloud.

$\endgroup$
1
$\begingroup$

robotergarten gave some really interesting tips, but in the end I decided to roll my own Google Speech client, using sox to record the user's voice. The ability to work without an Internet connection would be nice but is not really required for my demo, and response time is short enough.

$\endgroup$

Not the answer you're looking for? Browse other questions tagged or ask your own question.