音声の入出力(音声認識と音声合成)をPythonを使ってMacで行うことが必要になりました。とりあえずMacに日本語で話しかけると、その音声を認識してテキストデータに変換し、そのテキストデータを音声合成により音声で返してくれる、つまり”オウム返し”をしてくれるコードを作ってみました。
思いの外、簡単にできたのですが、記事としては長くなってしまったので、本記事では音声認識の部分のみを説明します。みなさんと情報の共有できれば良いなと思っています。
この記事を読んで、できるようになる事 speech_recognition_03Mac上でPythonを使って、Macに話しかけたあなたの言葉(日本語)をテキストデータに変換できるようになります。
この次の記事では、Pythonを使って、テキストデータ(日本語)を音声合成により発音する方法を解説します。
環境設定ぼくの環境は以下の通りです。
Jupyter Labは比較的新しいIDE(Integrated Development Environment)なので、まだ導入されてない方で、興味のある方は、ぼくの記事JupyterLabとJupyterNotebookの違いを簡単に解説【Mac】をのぞいてみてください。要は、Jupyter Notebookの後継機です。
音声認識 speech_recognition_02 概要説明ここでは、SpeechRecognitionというPythonのライブラリを使い、音声認識を行います。このライブラリはAPI(Application Programming Interface)を基本的にオンラインで使い、音声認識を行うものです。
いくつかのAPIから選択(詳細は後述)できますが、ここではdefaultの"Google Web Speech API"を使用します。このAPIは唯一、登録無しつまり、無料で使えるAPIです。(2020年6月時点)また、音声認識を行うには、インターネットに接続している環境が必要です。
またこれは、使用時間が1時間を超えると有料になるGoogle Cloud Speechとは異なるAPIです。
この記事を書くにあたって、インターネットでライブラリであるSpeechRecognitionと音声認識のためのAPIとの関係を調べたのですが、日本語の資料では、残念ながらきちんと説明しているものを見つけることができませんでした。
最終的に英文の資料をもとにその関係を理解しました。以下に参照した英文の資料のリンクとこの記事にたどり着いた皆さんが知りたいであろう項目をザクっと和訳したものを置いておきます。このことを理解しなくてもこの記事の内容は理解していただけると思いますが、興味のある方は、目を通してみてください。
SpeechRecognitionでは以下のAPI(もしくはEngine)を使用することができる。
CMU SphinxGoogle Speech RecognitionGoogle Cloud Speech APIWit.aiMicrosoft Bing Voice RecognitionHoundity APIIBM Speech to TextSnowboy Hotword Detectionこのうち、CMU SphinxとSnowboy Hotwood Detectionはオフラインでも使用できる。この中で、Google Speech Recognitionのみが、登録無しで使用できる。またSpeechRecognitionのdefault設定もGoogle Speech Recognitionである。
実装それでは、早速実装していきましょう。ライブラリとしては前述の”SpeechRecognition”とマイクを通して音声を入力するために、”pyaudio”を使います。
# SpeechRecognitionのinstall !pip install speechrecognition # pyaudioのinstall !pip install Pyaudio上記のコードによって、JupyterLabからライブラリのインストールができます。ターミナルから行う場合は、pipの前にある"!"を省略してください。
念の為、2つのライブラリが間違いなくインストールされたか、確認しておきましょう。
上記のコードを実行させると、すでにインストールされているライブラリの一覧が表示されます。2つのライブラリがちゃんとストールされているか確認しましょう。
import speech_recognition as sr import subprocess import tempfile # 音声入力 while True: r = sr.Recognizer() with sr.Microphone() as source: print("何かお話しして下さい。") audio = r.listen(source) try: # Google Web Speech APIで音声認識 text = r.recognize_google(audio, language="ja-JP") except sr.UnknownValueError: print("Google Web Speech APIは音声を認識できませんでした。") except sr.RequestError as e: print("GoogleWeb Speech APIに音声認識を要求できませんでした;" " {0}".format(e)) else: print(text) if text == "終わりだよ": break print("完了。")それでは、上記のコードをJupyterLabから入力して、実行してみましょう。
何かお話ししてください。と催促してくるので、内蔵マイクの近く(ぼくのMacbook Proだと左側スピーカーの近く)で何か日本語を話しかけてください。かなりの精度で日本語を認識してくれます。
ループで催促を続けてくるので、止める時は”終わりだよ”と教えてあげて下さい。
ちなみに15行の"ja-JP"を"en-US"に変更すると、英語として音声認識を行ってくれます。英語の発音に自信のある方は、試してみて下さい。また、その際、23行の"終わりだよ"は何か適当な英語のフレーズに変更して下さいね。
まとめ specch_recognition_04オンラインでAPIの助けを借りているとは言え、こんな簡単だコードでこれだけの精度の音声認識を実装できることは驚きに値すると思います。みなさんはどう思われましたか。
次の記事では、テキストデータを音声合成を行なってMacに音声として返してもらう実装を説明していきたいと思います。
それでは、今回はここまでにしたいと思います。最後までお付き合いいただき、ありがとうございました。さようなら。
参照資料本記事作成のため、下記の資料を参考にさせていただきました。
https://tam5917.hatenablog.com/entry/2019/04/27/141502https://realpython.com/python-speech-recognition/https://pypi.org/project/SpeechRecognition/