iPhone4s 以降、Siri の技術は再び注目されました。しかし、Siri の成功は Apple の Steve Jobs のリーダーシップに帰するだけでなく、音声認識技術の提供元である Nuance 社の貢献も大きいです。 Nuance は音声認識ソフトウェア、画像処理ソフトウェア、入力法ソフトウェアの開発と販売に特化した最大の企業です。Siri だけでなく、Nuance は記録を打ち破る製品である T9 入力法も提供しています。Apple の iPhone が人気を博する前に、Nokia などのブランドの携帯電話を使用したユーザーは、この入力法に非常に馴染みがあるはずです。私たちが実装している言語認識機能は、Nuance の ASR 技術に基づいています。Siri は単なる Nuance 技術の一つの実装に過ぎず、Nuance の音声認識技術はこれに留まりません。英語、フランス語、ドイツ語などの西ヨーロッパの言語だけでなく、中国語、広東語、日本語などの東アジアの言語も含まれています。
開始する前に、まず Nuance に開発者アカウントを登録し、ApplicationKey を取得し、SDK をダウンロードする必要があります。以下は SDK の説明です。 http://www.nuance.com/for-developers/dragon-mobile-sdk/index.htm
その後、言語認識プログラムを適用および開発することができます。SDK には iOS 版と Android 版の 2 つのバージョンがありますが、iOS 版は早くリリースされ、現在は比較的安定しており、多くの iOS アプリが開発されています。現在、無料版と商用版の 2 つのバージョンが提供されていますが、商用開発を行う場合は、商用ソリューションを購入することをおすすめします。
以下は、言語認識の基本的な手順とコードの一部です。
-
音声認識フレームワーク SpeechKit.framework をインポートします。
-
SpeechKitApplicationKey を設定します。
// Nuance からメールでコピーしてください
const unsigned char SpeechKitApplicationKey[] =
{0x47, 0xbe, 0x50, 0x57, 0x05, 0xde, 0x0f, 0x0e,
0x70, 0x63, 0x10, 0x4b, 0xb2, 0xad, 0xfb, 0xab,
0x14, 0x96, 0x99, 0x0d, 0x8e, 0x50, 0x2c, 0x1a,
0xb2, 0x5b, 0xf6, 0x76, 0x7d, 0xd8, 0xd5, 0xc5,
0x97, 0x25, 0x1c, 0x9c, 0x03, 0x2c, 0xaa, 0x74,
0x8f, 0xba, 0xbf, 0x42, 0x67, 0xba, 0xed, 0x7b,
0x50, 0x87, 0x88, 0xde, 0xd7, 0xb4, 0xf8, 0x89,
0x10, 0xef, 0xff, 0x8d, 0xc7, 0xd5, 0x52, 0x51};
NSString *const SpeechKitID =@"XXXX";
NSString *const SpeechHost = @"sandbox.nmdp.nuancemobility.net";
- 音声認識オブジェクトをインスタンス化し、パラメータを設定します。
// 検出タイプ、音声の認識と録音の停止に使用されます。一時的な休止、手動制御などが可能です。
detectionType = SKShortEndOfSpeechDetection;
// 認識タイプ、通常は検索と音声入力の 2 つの方法に分かれます。
recoType = SKSearchRecognizerType;
// 日本語の認識、en、de、fr、zh_CN などが指定できます。
langType = @"ja_JP";
if (_voiceSearch) [_voiceSearch release];
_voiceSearch = [[SKRecognizer alloc] initWithType
detection
language
delegate];
- デリゲートメソッドを実装します。
// 録音開始、ここで録音が開始され、録音中に呼び出されます。
- (void)recognizerDidBeginRecording:(SKRecognizer *)recognizer
// 録音完了、音声入力が完了し、録音が終了します。
- (void)recognizerDidFinishRecording:(SKRecognizer *)recognizer
// 認識解析完了、サーバーへのリクエストが完了し、結果が得られます。
- (void)recognizer:(SKRecognizer *)recognizer didFinishWithResults:(SKRecognition *)results
// 認識エラーが発生した場合
- (void)recognizer:(SKRecognizer *)recognizer didFinishWithError:(NSError *)error suggestion:(NSString *)suggestion