前回からお正月を挟んでちょっと更新が開いてしまいました。
というのもWebAPIというものを調べておりました。XMLやRSSデータを各種インターネットサービスから取得できることは知っていましたが、今調べてみると、オークションやショッピング、ニュース、その他のダウンロードできるデータは豊富にあって驚きました。発端はオークションや各種ショッピングサイトの価格の比較をウェブサービスかフリーソフトで作れないかと思い、ヤフーオークションの出品リストから調べ始め、Amazon、楽天がサービスを提供しており、さらにはアフェリエイトまで使えるという事でこれをスピーチに取り込む事にしました。(現状ではヤフオクの出品リストの検索し、検索結果をスピーチで読み上げるというところまで完成しています。厳密にいうとスピーチではなく時報アプリで読み上げています)
何かのタイミングでアプリ上から、製品の今の値段は?というコマンドを入力し、各種ショッピングサイトから最安値がわかると便利でいいかと思います。さらには海外のサイトからも値段を比較して値段の比較、送料の計算もできるのがベストだと思います。この分野のサービスは価格.COMが有名ですが国内のみのサービスなのでちょっと工夫ができるといいかと思います。個人輸入や輸出ビジネスをされている方にも使っていただけるかなぁ。
フリーソフトとして公開するつもりですが、アフェリエイトで何パーセントかをクリックからいただけるようなのでそれでちょっとした収入になればいいですね。
ちょっと余談ですが、音声認識について。
音声合成での結果の報告は自然に使えると思えるのに、なぜか音声認識を使う気にはなりません。テキスト入力はまだまだキーボードでいいと思うのです。今うちには生まれて4ヶ月になる子供がいます。ほとんどの場合子供を寝かしつける時は片手しか使えないのですが、どこかの壁にタッチパネルで検索ができないかと思ってしまいます。こういう場合、音声認識がいいのかもしれませんが、どうやって自分がやりたい事を声で使えるかまだまだ考える余地がありそうです。音声で人間の自然な会話をするのがいいのか、それとも質問形式でYes/Noで進めていくのか。(子供が寝ようとしてるのに声は出せませんね)これも今後の課題として
考えていきたいと思います。
とりあえず、ヤフオクの出品リスト検索アプリは、Windows版でスタンドアローンの形式でベクターに近日公開します。(公開するバージョンはスピーチとの連携はありません)
ヤフオクができたらヤフーショッピング、次はAmazonにいく予定です。
では。。。
「音声合成」カテゴリーアーカイブ
時報アプリの拡張
前回はWin32アプリで、タイマーで毎秒表示時刻をアップデートし、スピーチを起動し、1時間に一度時刻を読み上げるテストアプリを作成しました。(公開するほどのものではないのでもう少し機能追加したらまたベクターにアップします)
今回はそれに設定ファイルを読み込んで、指定された時間に文章を読み上げるようにします。設定ファイルのフォーマットは以下のように、Time(時:分), SpeechMessage(読み上げる文章), ActionApplicatoinPath(起動ファイルパス)とします。登録可能な時間は無制限とします。
【今回使用した設定ファイルフォーマット】
[ActionItem1]
Time=0:00
SpeechMessage=午前0時になりました。早く寝ましょう。明日がんばりましょう。
ActionApplicationPath=
[ActionItem2]
Time=1:45
SpeechMessage=午前1時45分になりました
ActionApplicationPath=
[ActionItem3]
Time=2:00
SpeechMessage=午前2時です
ActionApplicationPath=
とりあえず文章を読み上げて、ファイルを起動できれば定期的になにかの作業的なこともできるかと思います。さらに今回は、透明なウィンドウ上にDirect2Dを使ってきれいな画面表示、そしてWindowsAnimationを使ったアニメーションを実装してみます。
以下の時間表示がDirect2Dを使った時間表示です。この時間表示は毎秒更新され透明部分は通常通りマウスクリックが機能します。文字上をクリックされた際にはアニメーションで時間が右から左へとスライドします。
WindowsAnimation APIは普通のAPIとは違い、開始と、終了の値と、動作時間をを指定することで時間通り数値が変化していくという使い方が出来ます。

時間表示画面
ニコ生や、UStreamで使われている移動する字幕もこれで実現できます。今回は表示を目立たないように常に時間を見えるようにしたかったので、大きな動きにはしませんでした。(あくまでも今後の拡張用ということで)
あと、フォント表示にはDirectWriteを使用しています。これはWindows7から採用された新しい機能でスムーズなフォント表示が可能になっています。
あとは、黒色で影を書いて、グラデーションカラーをのせてみました。(ちょっとはシェアウェアとかにも出来る感じになりました)
次回は、ちょっとこの時報アプリが気に入った事もあってこれにスピーチの読み上げ部分を内部処理として取り込んでひとつのアプリとして読み上げするようにします。
ではまた。
今後の予定としては、
1. A.I.本体の結果や、返答のルーチン。
2. 返答や読み上げ用語データベースのアップデート方法。
3. プラグインルーチンの実装方法。
4. 専門知識データベースと、計算の実行ルーチンの設計。
5. スクリーンショットや、ウェブカムの画像からOCRでの画面のデータ化。
やりたいところはこんなところでしょうか。
最終的なA.I.の目標はアプリを書いてくれるA.I.や、2速歩行ロボットの制御とかできるといいな~
でゅわ!
スピーチをLimeChatで使う
さて、先日ベクターにてスピーチを公開しました。今回はちょっとした使用例としてLimeChatでの使用例を紹介します。
手順としては、まずLimeChatをダウンロードしインストール起動後、オプションからマクロの設定を行います。

新規ボタンをクリックし表示された入力欄にマクロ名を入力し、OKボタンを押します。

その後、マクロコマンド追加ウィンドウが開くので、ここで新規ボタンを押します。

表示されたコマンド設定ウィンドウで、下記の設定をします。
ユーザ : %me|*
コマンド : Privmsg
動作(A) : Execute
送信先(G) :なし
動作の情報(B):”SpeechApp.exe” ”%m”
動作の情報はSpeechApp.exeをインストールしたフォルダ名も含めて設定します。作者の場合は”D:\Projects\SpeechApp\SpeechApp.exe”

先ほど新規作成したマクロ名を右クリックして、マクロを有効にします。

以上の設定でLimeChatから、スピーチを使ってチャットの読み上げが出来るようになります。
*尚、ここではLimeChatのサーバの設定は省略しています。
SPEECHAPPの拡張ネタ
さて、しばらくSpeechApp(仮名)を使っていて拡張しないといけない項目をいくつか書いてみようと思います。
特殊単語読みテーブルを使って単語の読み精度の向上
まずは、最初の公開ページにも書きましたが、Windows7が漢字を読み間違える点。これはOSの漢字平仮名変換の精度があまいのが原因ですが、IMEがSPEECHPLATFORMから呼び出され内部処理されているかは不明ですので、今回のこのSPEECHAPPでは、すべての漢字を平仮名に変換しSPEECHAPIに読み上げをさせるようにすることにします。その時点でIMEの漢字・平仮名変換が間違えているのか評価しつつ、変換前後に外部変換テーブルから変換させることにします。(XMLで細かな発音を指定できるみたいなので、発音に特徴を持たせる必要があったら後日、変換テーブルでXMLを書くようにします)
日本語に特化した読みの拡張
日本語のチャットや、記号の読みなどは省略されたものや、アルファベットなどそのときの流行語などの変換が必要になることがあるので、これも変換テーブルで実現する。
Direct2D グラフィック対応
よく、UStreamの配信で読み上げたテキストが画面横から流れていくのを見かけます。フルスクリーン上で横左右方向、上下、フェードインフェードアウトをできるようにします。これはDirect2Dで使ってクリアフォントとWindows Animationを使うこととする。細かなユーザ設定画面でのフォントサイズの指定やアニメーションの設定は使い勝手が悪くなるので、できるだけ読み上げ画面でできるようにする。(設定を開いて、なになにタブからチェックしてとか解りにくいので簡単に設定が変えられるようにする)
単語自動補正
間違えている単語を認識して、再度同じ単語の間違えがテキストデータにあった場合、自動的に補正して読み上げる。これは主にOCRのテキスト誤認識に対応します。これはちょっとした学習機能になるので読み上げデータの保存、修正データの保存形式が必要になる。(実際にはPDFファイルを直接開いて読み上げできるようになったときに実装することにする)
ま、メモ書きまでに・・・
音声合成ソフトの可能性
音声合成という技術は決してあたらしいものではありませんが、日常の生活ではあまり取り入れられていません。留守番電話や自動応答、カーナビ、自動販売機等ではよく使われていますが、映画やアニメで使われているような自由な会話的に何かを調べたり、計算したりする機能としては使われていないのが現状です。
最近ではApple社がSiriという会社を買収し、iPhone4Sに音声コマンドに対して音声で返答する機能が採用されました。Siriでは、受け取った音声のデータをインターネット上のサーバに送り、その返答をサーバから受け取る方式がとられています。そのため、返事を考える頭脳にあたる部分はiPhone本体には実装されておらず、サーバ上の頭脳に入力されたデータが送られ、頭脳は常に学習する事ができます。(実機でテストした事がないのでわからないのですがネットに繋がっていない環境でもSiriが動作するのかはわかりません)
先日テスト版として公開したSPEECHAPPに使われているマイクロソフト社の、スピーチプラットフォーム(speech platform)はXBOX360のKINNECT用に開発され、あまり広く知られてはいませんが、音声認識、音声合成、音声コマンドの技術は成熟しているように思われます。Windows XPくらいからOSに標準で入っているSpeech API(SAPI)は以前英語版のWindows MEのユーザ登録のガイド役としてマーリンが声でナビゲートしていました。
では、なぜ人間との会話をコマンドとし便利に使えるソフトが一般的に使われないのでしょうか。
Siriで実現されている音声コマンドは、ある特定のプログラムされた(人間がプログラムした)データの検索結果を返しているのにすぎません。サーバ上に保存された大量のデータの中から、場所やその他の条件にあった結果を検索して情報を与えているだけの話です。たとえば、「今から車で空港まで行き、客先まで着くにはどのくらいかかるか」という質問に対してSiriの場合、ユーザの位置、道路の渋滞、飛行機の運航状況、行き先の空港から客先までの道のりを計算しなくてはなりません。(最近は駅から駅までの時間を計算するようなソフトもありますが、その日の天候や状況は含まれていないような気がする)プログラム可能といえば可能ですが、こんなケースは無限大に発生すると考えられます。
あらかじめ発生するケースを予測し、決まった行動がプログラムされているだけではそれ以上のことはできないのです。
たとえば、プログラム自身がマクロを生成し、プログラムはマクロを蓄積していき、プログラム本体は過去のマクロから適切な答えを導き出すマクロを選択して、マクロの結果を返事として返す。今のソフトは人間の返答待ち(「はい」とか「いいえ」とか)が多いですが、ユーザがいない間に、どっちのケースも終わらせておき、これではこうなりますとかそこまでやれるはずなんだけど。ハードウェアの処理能力は必要以上に上がっているこのご時勢そのくらいの無駄な処理、無駄なデータを蓄積してもいいはずです。
あとは、過去の実績から実際にかかる時間の予測も考慮したりして経験的なデータの蓄積もできると正確性が上がるかも知れません。質問やコマンドに対して、前回はこうしたけどこうなったので、こうやったら早く終わらせられるとか。(あまりコンピュータに考え込まれすぎて無言状態で反応しなくなったりしてもそれはそれでソフトとしては不良品だけど)
人間の満足度というのも、ひとつの要因かもしれません。たとえソフトが一番効率の良い方法を考えてもそのソフトを使うユーザがなぜそうなるのかを理解し、このソフトは優秀だと認識されないと一般的には普及しないでしょう。人間の経験や、作業の工程から出た結果をソフトが一瞬で解析しその正確さを見出していくのは必要なこととはいえ、ユーザがソフトに学習させていくような工程も人間に対する満足感を作り出すのかもしれません。(サイバーフォーミュラというアニメは一緒に学習するということを考慮されていた)
今のソフトは、いちいちユーザに質問しすぎです。もうちょっと考えてよねっていつも思う。
そういえば、新人の頃、フローチャートからアセンブラのプログラムを書くソフトの開発をやっていた事もあった。決まった動作を四角いブロックが何行かのアセンブラの関数になっていて、それをドラックドロップすることによってソースコードを書いていくソフト。今考えると結構合理的ではあったが、業界が一般的なソフト業界ではなかったので今はどうなったか知りませんが、そういうことをC++や、COMでできてもいいように思う。
ソフトが自分でCOMオブジェクトを操作してOSの機能を実行していくなんてできるといいかもしれません。
長くなりましたが、今回はこんなところで。ではでは。