音声会話ツールをPythonで作った報告
まえおき
最近AIを作る機会があり、日常会話AIを作ったのですが・・・
初めはLineで稼働するツンデレ彼女系AIをイメージしていたものの(というか今もそれは揺らいでないけど)、このAIと声で対話できたら面白そうだよなぁ・・・って思ったんですよね。
もちろんAIに声帯が無い以上、発声させるには音声合成テクノロジーを利用する必要がありますが、ちょっと時間あるしそれはそれで面白そうなのでやってみようと思い、試してみることにしました。
実際に作っていく
まずベースとなるAIはもともと私が日本語会話を8万文程度学習をさせていたTensorFlowで作ったサーバーで稼働するAIなのでこの辺は特に準備は必要ありませんでした。
で、このAIをどうやってGUIソフトに組み込むかと言うと、「Tkinter」と「Flask」です。
Flaskは各PCからのリクエストにAIからのレスポンスを返すために必要なもので、Tkinterは各PCのAIへの窓口(発話ボタンとかついているソフト)を作るために必要なモジュールです。
それで、声で対話するためにはもちろん音声データをAIで解析させる技術は持ち合わせていない上に、精度の高いものを作ろうとすると確実に時間がかかるので、今回は数あるAPIの中から評価の高いIBM社のWatson Speech To TextというAPIを使ってみようと思います。
で、Speech To Textで文字起こしした本文をFlaskとAIの稼働するサーバーにrequestsモジュールで送信し、レスポンスを返してもらう流れ。
さらにそのSpeech To Textに送る音声を録音するのは「Pysound」モジュール。
こちらは録音秒数を決めなければならないという音声アシスタントとしてはあるまじき仕様になってしまうのですが、私はWatsonのAPIの無料会員(ライト)なので、月500分の音声データまでしか書き起こししてくれないんですよね。
無駄に「え〜〜〜」で30秒とかの音声をリクエストされるより、7秒くらいの時間制限を設けたほうがむしろ良いという考えです。
さらにそのレスポンスを音声化するのにGoogle社のGoogle Text To Speech(gtts)のPythonモジュールを利用します。
実はこの声、TNTNで回転する鳥のおもしろ動画で有名な「Google翻訳のお姉さん」の声と全く同じなんですよね。多分Google翻訳の日本語読み上げも同じテクノロジーが使われているんだと思います・・・Googleだしね・・・
でもGoogle Nest Hubの声とはちょっと違うような・・・(もういいわ)
ってか思いついたものを形にするだけならPythonって有能なのでは・・・?
簡単な流れ
簡単な流れはこうです。
GUIソフトの発話ボタンが押される
↓
Pysoundの録音システムがWav形式でユーザーの音声を録音する
↓
WavファイルをIBMのAPIへrequestsモジュールで送信する
↓
IBMのAPIが音声を書き起こしたものをレスポンスする
↓
その書き起こしを私の作ったAIのサーバーへリクエストする
↓
AIから処理したレスポンスが返ってくる
↓
そのレスポンスをユーザー側のGUIソフト上にユーザー側の発言(書き起こし)と共に表示され、音声合成システムがAIの返答を読み上げる。
難易度はどうだった?
難易度的にはそんなに難しいものではなかったと思います。
新規に作ったGUI以外は全て既存のAPIとか昔作ったAIとかにリクエストを送るだけの処理だけだったので、最悪Requestsモジュールを使いこなすことができれば簡単に作ることができると思います。
感想:IBMのWatsonすげぇ・・・
実は前回行事用に作ったチャットボット作品は、「全てのAIを私が作る」というコンセプトの元で天気予報やGoogle翻訳以外は全てお手製AI(既に出来上がっているAPIの力を借りずに、データ収集から学習まで全て行う)で、今回使った日常会話AIもその一環で作ったものだったのですが、流石に文字起こしは今からやっても時間が相当かかるということで初めてWeb APIのAIというものを触ってみたのですが、やはり大企業の力には敵いませんでした・・・
空気清浄機や扇風機、暖房がガンガンかかっていてうるさいような部屋で録音した音声もしっかりと一言一句間違えずに書き起こしされています。
強いて言うなら数字は漢数字ではなくアラビア数字のが良かったかなってところは無くはないのですが、まぁそれもPythonのモジュールで補えるところなので、全く問題が無いところです。
お仕事で使うとなると有料プランのが良いでしょうが、趣味で使う程度ならライトプランで全然足りますね。
一人で月500分の録音を送信って、声枯れますよ()
今回のコード
今回作ったコードをGitHubにアップロードしています。
平成のように舗装されていないコードですがご自由にご覧下さい。
バールクスさんに舗装してもらわなきゃ・・・(使命感)
https://github.com/iris6220/BlueBird
0コメント