2014-01-02 2 views
1

Я внедряю речь в текст функцией OpenEars в своем приложении. Я также использую плагин Rejecto, чтобы сделать распознавание лучше и RapidEars для получения более быстрых результатов. цель состоит в том, чтобы обнаружить фразу и отдельные слова, например:Как определить фразу?

lmGenerator = [[LanguageModelGenerator alloc] init]; 

NSArray *words = [NSArray arrayWithObjects:@"REBETANDEAL",@"NEWBET",@"REEEBET", nil]; 
NSString *name = @"NameIWantForMyLanguageModelFiles"; 
NSError *err = [lmGenerator generateRejectingLanguageModelFromArray:words 
                withFilesNamed:name 
              withOptionalExclusions:nil 
                usingVowelsOnly:FALSE 
                 withWeight:nil 
              forAcousticModelAtPath:[AcousticModel pathToModel:@"AcousticModelEnglish"]]; // Change "AcousticModelEnglish" to "AcousticModelSpanish" to create a Spanish Rejecto model. 
// Change "AcousticModelEnglish" to "AcousticModelSpanish" to create a Spanish language model instead of an English one. 

NSDictionary *languageGeneratorResults = nil; 

NSString *lmPath = nil; 
NSString *dicPath = nil; 

if([err code] == noErr) { 

    languageGeneratorResults = [err userInfo]; 

    lmPath = [languageGeneratorResults objectForKey:@"LMPath"]; 
    dicPath = [languageGeneratorResults objectForKey:@"DictionaryPath"]; 

} else { 
    NSLog(@"Error: %@",[err localizedDescription]); 
} 





// Change "AcousticModelEnglish" to "AcousticModelSpanish" to perform Spanish recognition instead of English. 
[self.pocketsphinxController setRapidEarsToVerbose:FALSE]; // This defaults to FALSE but will give a lot of debug readout if set TRUE 
[self.pocketsphinxController setRapidEarsAccuracy:10]; // This defaults to 20, maximum accuracy, but can be set as low as 1 to save CPU 
[self.pocketsphinxController setFinalizeHypothesis:TRUE]; // This defaults to TRUE and will return a final hypothesis, but can be turned off to save a little CPU and will then return no final hypothesis; only partial "live" hypotheses. 
[self.pocketsphinxController setFasterPartials:TRUE]; // This will give faster rapid recognition with less accuracy. This is what you want in most cases since more accuracy for partial hypotheses will have a delay. 
[self.pocketsphinxController setFasterFinals:FALSE]; // This will give an accurate final recognition. You can have earlier final recognitions with less accuracy as well by setting this to TRUE. 
[self.pocketsphinxController startRealtimeListeningWithLanguageModelAtPath:lmPath dictionaryAtPath:dicPath acousticModelAtPath:[AcousticModel pathToModel:@"AcousticModelEnglish"]]; // Starts the rapid recognition loop. Change "AcousticModelEnglish" to "AcousticModelSpanish" in order to perform Spanish language recognition. 


[self.openEarsEventsObserver setDelegate:self]; 

большую часть времени результатом является штраф, но когда-то это делает смесь из отдельных строк объектов. например, я передаю массив words: @[@"ME AND YOU",@"YOU",@"ME"] и выход может быть: "YOU ME ME ME AND". я не хочу, чтобы он распознавал только часть фразы. любые идеи, пожалуйста?

ответ

1

На pocketsphinxDidReceiveHypothesis:(NSString *)hypothesis recognitionScore:(NSString *)recognitionScore utteranceID:(NSString *)utteranceID вы можете проверить, находится ли гипотеза в вашем массиве слов, прежде чем показывать ее.

- (void) pocketsphinxDidReceiveHypothesis:(NSString *)hypothesis recognitionScore:(NSString *)recognitionScore utteranceID:(NSString *)utteranceID { 
      if ([words containsObject:hypothesis]) { 
        //show hypothesis 
      }   
} 
1

Разработчик OpenEars здесь. Чтобы обнаружить фиксированные фразы с использованием OpenEars, используйте новый метод динамического генератора грамматики LanguageModelGenerator для создания динамической грамматики на основе правил, а не статистической языковой модели: http://www.politepix.com/2014/04/10/openears-1-7-introducing-dynamic-grammar-generation/