フリーの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を変更したのかなーと感じました。