November 26, 2013 at 12:53 pm #1018993faridParticipant
I am using OpenEears and the Rejecto plugin.
I need to recognize a small vocabulary may be less than 20 words, all of them are sounds of animals like “MEOW” (cat), “MOO” (cow), etc…
Actually, I have downloaded the sample OpenEarsApp and added the Rejecto plugin. I have created a vocabulary with only two words: “MEOW” and “MOO”.
Below how I create my rejecting language model:
NSError *error = [languageModelGenerator generateRejectingLanguageModelFromArray:languageArray withFilesNamed:filesName withOptionalExclusions:@[@"b", @"c", @"d", @"f", @"g", @"k", @"l", @"n", @"p", @"r"] usingVowelsOnly:FALSE withWeight:nil forAcousticModelAtPath:[AcousticModel pathToModel:@"AcousticModelEnglish"]]; // Change "AcousticModelEnglish" [languageModelGenerator deliverRejectedSpeechInHypotheses:YES];
I have never received rejected speech hypotheses.
I have tried to add optional exclusions but I am not sure I am doing write.
My problem is how to make the voice recognition for those words as precise as possible. I mean if user says “NOO” instead of “MOO”, or “PEOW” instead of “MEOW”, I want “NOO” and “PEOW” to be skipped.November 26, 2013 at 1:05 pm #1018994Halle WinklerPolitepix
Couple of things that may help. Here is the description of how the optional exclusions work:
optionalExclusions can either be set to nil, or given an NSArray of NSStrings which contain phonemes which you do not want to have added to the rejection model. A case in which you might want to do this is when you have over-active rejection such that words that are really in the vocabulary are being rejected. You can first turn on deliverRejectedSpeechInHypotheses: in order to see which phonemes are being detected overzealously and then you can add them to the exclusionArray. Set this parameter to nil if you aren’t using it.
So issue one is that you have to give it phonemes instead of letters, but issue two is that you only use it if you already have a set of phonemes that you’ve verified are being rejected overzealously via the use of the deliverRejectedSpeechInHypotheses setting. It isn’t something you want to start out with.
You haven’t mentioned whether MEOW and MOO are being recognized when they are being said correctly, so let’s start there and then see if I can think of some suggestions for refining things.November 26, 2013 at 4:16 pm #1019008faridParticipant
You haven’t mentioned whether MEOW and MOO are being recognized when they are being said correctly, so let’s start there and then see if I can think of some suggestions for refining things.
Yes “MEOW” and “MOO” are being recognized when they are being said correctly.
But the problem is that if I say “POO”, “TEOW”, “TOO” or “PEOW”; they are recognized too. I have set deliverRejectedSpeechInHypotheses to YES.November 26, 2013 at 4:26 pm #1019009Halle WinklerPolitepix
This is a general issue with speech recognition, unfortunately. Rejecto is designed to reject phonemes other than the keyword which surround the keyword and utterances that are evidently not utterances of the keyword. But a one-syllable word which rhymes with a one-syllable keyword in a language model that only contains very few one-syllable keywords is very unlikely to be recognized as a different word because there is very little information in the model which would allow evaluating whether it is the one word or another. It has a very high probability of being recognized as a less-probable version of the same word.
To me, it doesn’t sound a highly-likely usage scenario since your app is probably more designed for users to say “meow” to it than to intentionally interact with it by saying “peow” with the expectation that “peow” isn’t recognized. But probably the most effective way you have available to prevent recognition of “peow” is to add “peow” to your main language model and then ignore it when it is recognized. Does that make sense?
- You must be logged in to reply to this topic.