ちょまどさんの筋肉ボイス動かしてみた
google home とAzureを連携させて何か作ってみたいなと思っていたら、3月くらいにあったGoogleHomeHackでMicrosoftのちょまどさんが面白そうなもの作ってたので、Githubからソースを手に入れて動かしてみました。
簡単だと思っていたら意外とハマるポイントがあって難航しました(笑)
作るものはこれです。
#Google Home で野太い声になるアプリ「筋肉ボイス」を作った!筋肉はいいぞ#ActionsOnGoogle 対応した!
— ちょまど(Madoka)コード学園復活 (@chomado) March 16, 2018
これで声から起動できる!
Microsoft のサーバーレスのサービス「#AzureFunctions」使って、
言語は C# を使ってプログラミングした!
コードは全部上げたよ!https://t.co/K5zJCJlUyt
ー pic.twitter.com/FssZ6UDw0M
ソースはここ
参考情報(Github内にもリンクあり)として使用しました。
satoshi-maemoto.hatenablog.com
全体的な構成はこんな感じ(ちょまどさんのGithubからお借りしました)
ストレージアカウントの作成
まずストレージがないので、作成
名前つけて、アカウントの種類とレプリケーションを指定して作成
今回作ったものはまとめたいので、1つリソースグループ作ってます。(このタイミングで新規作成してもいい)
Visual Studioでの作業
GithubからもらってきたソースからC#のプロジェクト開く
ソリューションエクスプローラーからプロジェクトを右クリックから「発行」しようとしたら、なんかエラーが出てる
VoiceTextAPIのところの「Keys」ってのがないだと・・・
qiitaにこのエラーが載っていました。
どうやら1つのクラスがないらしいので、それを作るよう書いてありました。
Gitにあげるときに多分公開できない部分として削除されているのだと思います。
ここで疑問だったのが、
参考にしたsatoshi-maemotoさんの記事だと、AzureのFunctions上のアプリケーションの設定からAPIのキーを設定しているみたいだが、
Qiitaの記事だとソースにハードコーディングしてるので、パラメータ化して外から与える方法があるのかな?ということ(とりあえず今回はQiitaのやり方でやりました)
そのあと、VoiceTextWebAPIを入れるためにパッケージマネージャーを開こうとしたら「パラメータが間違っています」というエラーでこの画面が開けませんでした。(エラーのキャプチャは取るの忘れました)
そもそも私はVisual Studioは最低限の機能(UWPとUnityのみ)しかインストールしていなかったので、Azure系含め今後趣味で使いそうなものをまとめて入れたらNugetのパッケージマネージャーも開けるようになりました。(VSは普段使わないので全然使いこなせてないな・・・)
これで発行できるはずなので、発行してみる。というかローカルからAzure Functionsに直接デプロイできるんだなんて便利!
- アプリ名
- リソースグループ(ストレージアカウント作るときに一緒に作ったやつ)
- ホスティングプラン(既存でもってたやつ)
- ストレージアカウント(さっき作ったやつ)
この辺を入力して作成する
※ホスティングプランがなければ作ってもいい
これで発行完了。出力されているログに「発行が完了しました」と出ていればOKだと思います。
qiitaの記事では失敗することがあるようですが、もう一回発行するとうまくいくらしい。
ストレージの設定
作成したストレージアカウントを開いて、BLOBを選択
コンテナを作成
できた
FunctionからURLを取得するひつようあるので、Functionを開いて、「関数」>「GoogleHome」から「</>関数のURLを取得」をクリック
qiitaでは「_master」のほうを使用していたので、「_master」のキーを覚えておく(DialogFlowで使います)
Actions on Googleの設定
Actions on Googleで「Add」から新しいプロジェクトを作る
プロジェクト名を入れて、Languageとregionを日本に設定して作成する
テンプレがいっぱい出てくるけどとりあえずSKIP!
左のメニューから「Actions」を選択、「ADD YOUR FIRST ACTION」をクリック
「Custom Intent」を選択して、「BUILD」を選択するとDialogFlowが立ち上がる
DialogFlowの設定
言語はとりあえず日本語にして「CREATE」。完了まで待つ。
すでに作成されている「Default Welcome Intent」に「Add Follow-up intent」から「fallback」を選択
追加されるとこんな感じ。この作成したINTENTを選択する
output Contextに「DefaultWelcomeIntent-followup」を追加する
一番下の「Fulfillment」からWebhookをenableにして「SAVE」
左のメニューから「FulFillment」を選択、Webhookを「ENABLED」にして、AZUREのFunctionsのURLを設定する。一番下に「SAVE」があるので忘れずに保存する。
動かしてみる
DialogFlowの左のメニューから「Integrations」から「Google Assistant」を選択
「TEST」を選択
「CONTINUE」を選択
「CREATE INTENT」からINTENTを作成する
Actions on Googleに戻るのでそこでテスト実行・・・
応答しなかった(´;ω;)
この現象には本当に困った。参考ページも見ながらいろいろと見直してみたけど、Azure経験がほぼ0ということもあり全然わからなかった。
Qiitaのやり方でINTENTを作ってみてもダメ。なんやかんやで2時間くらい経って、気分転換にオーバーロード3期の最新話見て、晩御飯食べて再開したときに、作業中ずっと出ていたこのメッセージに行き着いた。
設定を開いてみる
DialogFlowのAPIは現在V2がオフィシャルになったので、基本的に新しくagentを作るとデフォルトでV2になるみたい。で、もともとちょまどさんがこのアプリを作ったのは3月くらい。
もしかしてV1にしないとダメなんじゃないかと思い、V2→V1に変更してSAVE
イカツイ声が返ってきました!!
超すっきりしました!!
ただ、今後はV2がオフィシャルなんだとしたら、V2でAZUREと連携するには微妙に設定が違うということなんだけど、そのやり方を早いうちに知っておくべきかなと思いました。
モノづくりしているとこういった壁にぶち当たることが多々あって、トライ&エラーで地道にやっていくしかなく、闇が深いと抜け出すのも時間がかかってストレスがたまっていくんだけど、解決した瞬間に「ヨッッッシャーーーー!!!!」とため込んでいたものが解放されて達成感を味わうことができるんですよね。だからうまくいかない工程も含めてモノづくりは楽しい!!
筋肉ボイス楽しいw
Alexaにも移植してみようかな