AppCon2013で作ったBlack Rabbit
怪しさをお楽しみください。
http://fandroid-ej.org/appcon_2013/
作った物はこちら
http://www.youtube.com/watch?v=eAA2ktd_cCw
自分でもなんなんだかよくわからないけど、音声認識に対応したカメラです。w
機能は写真撮影、動画撮影、ズーム、ライトです。
UIImagePickerControllerとかも初めて使ったので苦戦しました。
前々から興味のあった音声認識のアプリを作ってみました。
使ったのはオープンライブラリーのOpenEarsというもの。
OpenEarsのサイトはこちら。
http://www.politepix.com/openears/
なにが出来るかっていうと、音声合成と音声認識。
英語とスペイン語の辞書が入ってるようで、それらを喋らせることが出来ます。
今回は元々OpenEarsで提供してるサンプルアプリを題材に、機能の分かった部分と使い方を書いていきます。
先述した公式ファイルからライブラリーをDLします。その中にサンプルアプリのファイルがあるので、それです。
ダウンロードはサイトの右側にあるここから。
使い方を学ぶ際、こちらなどを参考にさせていただきました。
http://qiita.com/shu223/items/eda02dc7d334c339ff64
http://www.politepix.com/openears/tutorial/
サンプルアプリの仕組み
1.機能
これがサンプルアプリの画面です。
Status:Pocketsphinx is now listening.となっている状態で
GO, TURN, LEFT, RIGHT, FORWARD, BACKWARD, CHANGE, MODEL
のいずれかの単語を発話すると、マイクで聞き取って合成音声が喋ってくれます。
CHANGE MODELと言うと辞書が切り替わって
MONDAY, TUESDAY, ..., SUNDAY
の曜日の単語を認識するようになります。
もう一度CHANGE MODELと言うと元のGOとかの辞書に戻る。
あとは
Input level = 聞き取り度
Output level = 合成音声の音量
Stop Listening = 聞き取り終了
Suspend Recognition = 認識を一時停止
2.FrameworkファイルとVocablaryFiles
プロジェクトファイルを開くとFrameworkとVocablaryFilesというフォルが入っています。Frameworkは文字通りOpenEarsを使う時に必要なフレームワークです。
問題はVocablaryFilesの方で、事前に登録してある単語の辞書だと思われます。
イマイチ中に入っているファイルの内容はわかりませんが、おそらく辞書です。
写経してる時、このファイルを追加するのを見落として時間がかかりました。要注意。
3.クラス紹介
OpenEarsを使うのに必要なクラスは3つ。
FliteControllerクラスとSltクラスとPocketsphinxControllerクラスの3つ。
・FliteControllerクラス
合成音声を受け持つクラス。
- (void) say:(NSString *)statement withVoice:(FliteVoice *)voiceToUse;
メソッドで音声を再生させたり、プロパティで音声の高低や再生速度を変えたり出来ます。
・Sltクラス
合成音声そのもののクラス。
・PocketsphinxController
音声認識を受け持つクラス。
4.ざっくりした解説
最初に単語の辞書を登録する必要があります。
認識させたい単語を入れてやればOKです。
あとは基本的にデリゲートをセットして
- (void) pocketsphinxDidReceiveHypothesis:(NSString *)hypothesis recognitionScore:(NSString *)recognitionScore utteranceID:(NSString *)utteranceID;
メソッドの中に単語が発話された時の処理を書くっていうので使えます。
サンプルコードだと↑の部分。
hypothesisというのは認識された単語を持つ変数。
if([hypothesis isEqualToString:@"HOGE"])
{
処理
}
ってやれば認識した単語に応じた処理をさせてやることができます。ざっくりと一通りコード読んで大体使えるようになったけど、まだ理解が足りてないので中途半端です。
サンプルで大体必要な機能が載ってるので、それを元に書いたり読んだりしていけば良いと思います。