先日届いたM5GO(M5Stack)にどっぷりハマっている、てくいのタチキです。
初めてのエッジコンピューティングに、かなりのおもしろさとほんのちょっとの難しさを感じています!さて今回はM5GOを使った音声認識のデモとして、Google APIを使用して「音声ファイルの文字起こし」をする方法についてご紹介します。
目次
はじめに
本記事ではMicropythonを使用して音声認識を行います。音声認識はGoogle Speech-to-Textを使用しています。APIの取得方法はQiitaの記事にわかりやすく記載されていたので、こちらを参照してください。
micropythonでリクエストを投げる
M5GOをインターネットモードにし、web上のUiFlowで以下のコードを打ち込んでください。
from m5stack import * from m5ui import * from uiflow import * import urequests import ujson #apikey Key = "Key" #speech to textのAPIを呼ぶ url = "https://speech.googleapis.com/v1/speech:recognize?key=" + Key #音声ファイル情報 f = ujson.dumps({ "config" : { "encoding" : "LINEAR16", "sampleRateHertz" : 44100, "languageCode" : "en_US" }, "audio" : { "uri" : "gs://cloud-samples-data/speech/hello.wav" } }) #speech to textにpostする response = urequests.post(url,data = f)
micropythonでは、googleが提供しているモジュール(google.cloudなど)を使用できないのでurequestsを使用してapiを呼び出します。音声ファイル情報は使用するファイルによって情報を変えてください。詳しくは音声のエンコード概要を参照してください。
音声認識結果を表示する
音声結果は以下で確認することができます。
#responseの中身確認 lcd.print(response.text,0,0) #結果 { "results" : [ { "alternatives" : [ { "transcript" : "hello", "confidence" : 1 } ] } ] }
”transcript”は音声を文字に起こしてくれたもので、”confidence”はその文字起こしの信頼度を表しています。今回の音声認識は信頼度100%で”hello”という音声ファイルだったということがわかります。
”transctipt”の中身だけを表示させたいときは以下のようにします。
response = urequests.post(url,data = f) r = json.loads(response.text) #transcriptを取得する M5TextBox(100, 100,r["results"][0]["alternatives"][0]["transcript"] , lcd.FONT_DejaVu56,0xFFFFFF, rotate=0)
※M5GOに表示される文字を見やすくするために、M5TextBoxを使いました。lcd.printでも問題ありません。
終わりに
M5GOではgoogleモジュールをimportできないので、かなり手こずりました。今まではAPIを理解せずに使用していましたが、今回でAPIについて大分理解することができました。リアルタイム音声認識の方法も完成したらおはなししますね!