フリーのiOS向け音声認識/音声合成ライブラリ『OpenEars』について半年ほど前に記事を書いたのですが、
このときのバージョンは1.3.6でしたが、2014年1月現在の最新バージョンは1.64となっています。
で、もうAPIも結構変わっていて、上記記事のコードだと動かない(ビルドエラーになる)部分も多いので、改めて実装手順を書いておきます。
ちなみに音声合成は今回は省きます。iOS7でAVSpeechSynthesizerも追加されたし、もういいかなと。。
1. フレームワーク・リソースをプロジェクトに追加
とりあえず英語の認識だけでよければ、
- OpenEars.framework
- AcousticModelEnglish.bundle
の2つをプロジェクトに追加します。
2. ヘッダをインポート
#import <OpenEars/LanguageModelGenerator.h> #import <OpenEars/PocketsphinxController.h> #import <OpenEars/AcousticModel.h>
3. 言語モデル生成
プロパティを定義しておき、
@property (strong, nonatomic) NSString *amPath; @property (strong, nonatomic) NSString *lmPath; @property (strong, nonatomic) NSString *dicPath;
LanguageModelGeneratorで言語モデルを生成し、プロパティに格納しておきます。
NSArray *words = @[ @"SUNDAY", @"MONDAY", @"TUESDAY", @"WEDNESDAY", @"THURSDAY", @"FRIDAY", @"SATURDAY", @"QUIDNUNC", @"CHANGE MODEL", ]; self.amPath = [AcousticModel pathToModel:@"AcousticModelEnglish"]; LanguageModelGenerator *generator = [[LanguageModelGenerator alloc] init]; NSError *error = [generator generateLanguageModelFromArray:words withFilesNamed:@"OpenEarsDynamicGrammar" forAcousticModelAtPath:self.amPath]; if (error.code != noErr) { NSLog(@"Error: %@",[error localizedDescription]); } else { NSDictionary *languageGeneratorResults = [error userInfo]; self.lmPath = [languageGeneratorResults objectForKey:@"LMPath"]; self.dicPath = [languageGeneratorResults objectForKey:@"DictionaryPath"]; }
4. 各種オブジェクト初期化/プロトコル実装
ここは旧バージョンと変わってないので省略します。
上記記事の3, 4を参考にしてください。
5. 認識スタート
[self.pocketsphinxController startListeningWithLanguageModelAtPath:self.lmPath dictionaryAtPath:self.dicPath acousticModelAtPath:self.amPath languageModelIsJSGF:NO];
こんな感じです。
変更箇所を見ると、全体的に音響モデルを取り替えやすくするようにAPIを変更したのかなーと感じました。