Members | Sign In
Legacy MOVI User Community Forum (readonly) > MOVI Question & Answers
avatar

MOVI doesn't reject wrong words.

posted Dec 07, 2016 03:56:43 by LeRoy
I just bought my MOVI from Amazon for the holiday sale, and having some issues with it accepting just random words and not rejecting them. This has happened in a couple of different example sketches. And even after I updated the firmware to the 1.1 firmware. I did change the lightswitch example sketch slightly - Changing "Let there be light" to "lights on", and "Go Dark" to "lights off", I also added a say to the sketch to confirm "lights off" was triggered. The only time it seemed to reject a word was when I turned my head away from it. Also when it does this it always seems to "default" to the 1st sentence. I have read the manual, probably missed something, there is quite a bit there. But I don't understand why it's not rejecting something that has not been trained. I made a short video to better show what it is doing. Other than trying a couple new sketches, updating the firmware, I've not made any other changes to it. It's in a fairly quite small room. I understand that if I were in a noisy room I'd probably want to change the Threshold setting - is this something I should consider changing anyway? I am using a UNO just for testing. And I am wanting to make a voice controlled robot (MEGA based), and it is very important that anything that isn't in the list of sentences or words, be rejected. I suppose if this is not possible I could make the 1st sentence "STOP" and have the robot stop the motors until a different command is spoken.
Video https://youtu.be/O3SCIPOLg6U
page   1
6 replies
avatar
GeraldFriedland said Dec 07, 2016 05:11:11
LeRoy,

Congratulations on your MOVI and thanks for sending the video!

Using MOVI the simplest way possible, i.e. defining sentences with addSentence and then asking for which sentence was recognized, just like in the light example, will result in MOVI accepting pretty much anything and mapping it to the closest sentence matched. Just like in your video.

If you look through our example sketches (which is really the best way to learn MOVI), you'll see that there are other ways of using MOVI. It just depends on what you want to achieve. Let me outline two of them:
- The Wordspotter sketch (under MOVI/Beginner/WordSpotter.ino) for example defines what is called a 'background model'. The background model consists of the most frequent 100 English words. These will usually 'eat' anything that's not the keyword that should be spotted. An easy way for you to test this, is to copy and paste the 'background model sentences' from this example to your LightSwitch as sentences 2-10 and you will see that it MOVI will ignore many more sentences that are not functional. A similar thing is implemented in the more enhanced example of Eliza (MOVI/advanced/Eliza.ino) where it triggers conversation starter sentences if a sentence is not one of the functional ones.
- The seond variant you can try is not using MOVI sentence recognition but going for the recognized words directly. This is shown in the WordCount example (MOVI/beginner/WordCount.ino) and also contrasted in the WordSequence1 vs WordSequence2 examples (MOVI/beginner/WordSequence1.ino and MOVI/beginner/WordSequence2.ino). Using the raw words, you can fine-tune the behavior but it's also more work to correct for errors such as 'ums' and 'ams'. The Hunt the Wumpus game under MOVI/advanced ultimately shows a program that implements that completely.

Hope that helped,
Gerald
avatar
LeRoy said Dec 07, 2016 21:41:32
Gerald, Hello, thank you for getting back with me on this.
I appear to be having the same issue even after I added the sentences from WordSpotter example. (No real difference). WordSpotter2 seemed a bit better, but I can only get it to recognize the callsign/keyword (I am sure I have added the recognizer logic to the wrong place, so I'll keep playing with that).
I also set my threshold up a little, after watching WordSpotter in the console, I saw that even in a quite room the device was picking up some sounds (probably just noises, as no one is with me and I wasn't talking). That seemed to help a little - but also seemed to cut down on it hearing the keyword, so probably something else that just needs to be played with as each space/room/environment is different.
The wordcount sketch seemed to work to a point - 1st run I said "One Two Three Four Five" which is 5 words, it responded "I heard 6 words.", the next time I said "Yellow Purple Monkey" it said "I heard 7 words." clearly not right, so I repeated "Yellow Purple Monkey" and it said "I heard 4 words." - the next couple of things I said, were also either off by three or four words, or were off by only one - so not sure there.
The sketch I've found that I seem to have the most success with is the NestedDialog sketch, in the intermediate examples. There are still a few odd times that it didn't work correctly, but it seemed better than the others.
The password sketch also seems to work far more reliable than the others, But still didn't hear everything or reject things it wasn't trained for. (I did make one small change and it stopped working as expected, so clearly the logic to reject words/sentence is in the sketches)
And looking at those two sketches I see a lot of logic in the sketches to try and weed out the false positives, and so I think that is what I'll have to do with the robot I want to build, the sketch will have to try and weed out as much as it can.
I'm going to sit and play some more.
avatar
GeraldFriedland said Dec 10, 2016 01:23:14
LeRoy,

One thing as I am reading your post: In order to avoid confusion, it might be useful to separate your experiments in programming MOVI from your experiments in dealing with the noise. I therefore suggest starting with a headset microphone. It'll cut down on noise by a lot and should make it easier to play around with the programming.

Gerald
avatar
LeRoy said Dec 11, 2016 22:59:39
Unfortunately, I do not have a headset microphone, and for my application, that type of microphone would not work well, so I'd much rather make something with the on board mic or something like this - http://www.ebay.com/itm/Andrea-2s-Superbeam-Array-Microphone-/232146089544?hash=item360cfc3648:g:rcgAAOSwux5YLTuU

I think it needs phantom power thou, and I know the manual says phantom power mics will not work. Can you recommend something that would, that is NOT a headset?


-LeRoy
avatar
Dylan said Dec 12, 2016 16:56:40
Hey LeRoy,

I've been through most of the pains you are experiencing with overly aggressive recognition and background noise issues. In my experience, for accurate recognition, use a distinctive callsign, design sentences (commands) that are very unique from one another, and design your application such that once you say a callsign you should be saying a valid sentence to execute a command. I never did get MOVI to ignore utterances during sentence recognition, it always wants to match the closest thing it knows. Callsign recognition is solid though, in all the hours I have been in my car with it, I have had only a single false positive, and that's because I said two out of three of the words in my callsign.

For the external microphone - there is a lengthy discussion on the matter here:

http://www.audeme.com/forum.html#/20160106/external-microphone-5138266/

I'm having a good deal of success with that Microphone / Attenuator / Bandpass filter circuit you see me evolving throughout that thread. Even with wind noise in my T-Top muscle car and the roar of an old 8 cylinder engine, MOVI can usually hear me accurately up to about 50 MPH. I've been meaning to take and post an updated video of it in action, but life got suddenly busy for me a few weeks back.

You don't have to be fabulous at soldering to build those pieces, especially if you skip the Bandpass filter (you may not need the bandpass filter if you aren't fighting extreme noise as I am in my application). Just some basic soldering knowledge should do it.

Hope that helps.
Dylan.
[Last edited Dec 12, 2016 18:44:15]
avatar
LeRoy said Dec 12, 2016 22:59:21
Dylan - Thanks for pointing me to that thread.
I will need a bandpass filter for sure, the motors on the robot are very noisy, much more than I thought they would be.
I've had to raise the Threshold pretty high, but then I have to pretty much be over top of the robot for it to hear me at all. Looks like an external mic, and filters are in my future. solder is not a problem, and I may already have a simple bandpass circuit in my box of parts. Interesting what you do think of till someone else says something about it.
I'm still reading your progress, but so far I think I'm going to have to duplicate your work.
Thanks,
LeRoy
Login below to reply: