Pythonを使えば、普段の会話を精度良く翻訳するアプリも簡単につくることができます。まずspeech_recognitionによる音声認識技術を使い、音声をテキストに変換、そして次にdeep_transtatorを使ってテキストを任意の言語に翻訳します。ここではこれらを駆使したPythonプログラムの例を紹介します。
こんにちは。wat(@watlablog)です。今回は音声認識と翻訳を組み合わせて自動翻訳機をつくってみます!
音声自動翻訳アプリに必要なこと
最近英会話学習を再開しましたが、ふとPythonと連携して何か役立つツールを作ってみようと思い立ちました。
前回学んだ音声認識した結果を使って自動翻訳すればいちいち文章をテキストで入力しなくて済むぞ!
ということで、早速作り方を調査してみました。
マイクを使った音声認識
マイクに言葉を話しかけて音声をテキストに変換するPythonプログラムは、当WATLABでも既に試しています。
以下の記事ではSpeechRecognitionというライブラリの中でrecognize_google(Googleの音声認識モデル)を使って音声をテキストに変換するプログラムを紹介しています。
・Python/SpeechRecognitionで音声認識してみた
テキスト翻訳
日本語のテキストを英語やその他の言語に翻訳、またはその逆を行うにあたりdeep_translatorというライブラリが一番お手軽のようです。
deep_translatorはインターネットで使用できる翻訳サービスをまとめたライブラリです。多くはAPIを使うためのキーを要求されますが、有名なGoogleTlanslator(Google翻訳)を使う場合キーやトークンは必要ありません。
公式ドキュメントとPyPIのページを参考にリンクします。
・https://deep-translator.readthedocs.io/en/latest/index.html
・https://pypi.org/project/deep-translator/
ライブラリはpip install deep-translatorでインストールします。
こちらが日本語のテキストを英訳するPythonコードです。
1 2 3 4 |
from deep_translator import GoogleTranslator text = '翻訳サービスが個人でも無料で使い放題なんて、便利な世の中になったなぁ。' print(GoogleTranslator(source='auto', target='en').translate(text)) |
結果はこちら。合っているかな?
1 |
We live in a convenient world where translation services are free and unlimited for individuals. |
たった1行で翻訳が完了した!
それでは早速音声認識の機能を追加してつくってみましょう!
Pythonで音声の自動翻訳をするコード
動作環境
このページのプログラムは以下の環境で動作を確認しました。
Python | Python 3.9.6 |
---|---|
PyCharm (IDE) | PyCharm CE 2020.1 |
SpeechRecognition | 3.10.0 |
deep-translator | 1.11.4 |
日本語を英語に翻訳するコード
1回だけ翻訳する場合
最初に日本語を英語に翻訳するプログラムを書きます。ほぼ「Python/SpeechRecognitionで音声認識してみた」で紹介した音声認識のコードを流用しているので、説明は不要だと思います。
1点、「r.adjust_for_ambient_noise(source, duration=1.5)」の部分が新しく追加されています。うるさい環境にいる場合等に音声が正しく認識されないことがありますが、adjust_for_ambient_noiseを使えば大まかにノイズと信号を分離して認識しやすくしてくれます。durationを長くすればノイズ認識精度も上がりますが、その分待機時間も増えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
import speech_recognition as sr from deep_translator import GoogleTranslator def run_recognition_translation(): """ マイクを使って音声認識をする関数 """ # Recognizerをインスタンス化 r = sr.Recognizer() # print文が表示されたらマイクに話しかける with sr.Microphone() as source: # 環境音のノイズを考慮(1.5秒) r.adjust_for_ambient_noise(source, duration=1.5) # ユーザーからの音声入力を受け付ける(沈黙すると終了) print("日本語で話しかけてください。") audio = r.listen(source) try: # Google Speech Recognitionを実行→テキスト化 text = r.recognize_google(audio, language="ja") print('音声認識結果(日本語)「', text, '」') # Google翻訳 translated = GoogleTranslator(source='auto', target='en').translate(text) print('英語翻訳結果「', translated, '」') except sr.UnknownValueError: print("Error!") except sr.RequestError as e: print("Could not request results from Google Speech Recognition service; {0}".format(e)) return if __name__ == '__main__': """ Main """ # 音声認識と翻訳を実行 text = run_recognition_translation() |
こちらが実行結果の例です。音声は「音読さん」に読んでもらいました。翻訳された英語も合っているようです。
繰り返し翻訳する場合
先ほどのプログラムは一回翻訳したら終了してしまいましたが、できれば繰り返し翻訳してほしいものです。以下のコードはwhileループを追加して繰り返し翻訳するようにしてみたコードです。「終わりです」と言うまで翻訳を繰り返してくれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import speech_recognition as sr from deep_translator import GoogleTranslator def run_recognition_translation(): """ マイクを使って音声認識をする関数 """ # Recognizerをインスタンス化 r = sr.Recognizer() # 「終わりです」というまでループを回す flag = True i = 0 while flag: # print文が表示されたらマイクに話しかける with sr.Microphone() as source: # 環境音のノイズを考慮(1.5秒)※最初だけ if i == 0: r.adjust_for_ambient_noise(source, duration=1.5) # ユーザーからの音声入力を受け付ける(沈黙すると終了) print("日本語で話しかけてください。") audio = r.listen(source) try: i += 1 # Google Speech Recognitionを実行→テキスト化 text = r.recognize_google(audio, language="ja") print('音声認識結果(日本語)「', text, '」') # Google翻訳 translated = GoogleTranslator(source='auto', target='en').translate(text) print('英語翻訳結果「', translated, '」') if text == '終わりです': flag = False except sr.UnknownValueError: print("Error!") except sr.RequestError as e: print("Could not request results from Google Speech Recognition service; {0}".format(e)) return if __name__ == '__main__': """ Main """ # 音声認識と翻訳を実行 text = run_recognition_translation() |
こちらも動画で実行結果を示します。こんなに簡単にツール化できるのはさすがPython!
英語を日本語に翻訳するコード
英語から日本語に変換するには、以下の赤くハイライトした部分を主に修正します。言語設定を変更したという意味になります。
・text = r.recognize_google(audio, language="en")
・translated = GoogleTranslator(source='auto', target='ja').translate(text)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import speech_recognition as sr from deep_translator import GoogleTranslator def run_recognition_translation(): """ マイクを使って音声認識をする関数 """ # Recognizerをインスタンス化 r = sr.Recognizer() # 「終わりです」というまでループを回す flag = True i = 0 while flag: # print文が表示されたらマイクに話しかける with sr.Microphone() as source: # 環境音のノイズを考慮(1.5秒)※最初だけ if i == 0: r.adjust_for_ambient_noise(source, duration=1.5) # ユーザーからの音声入力を受け付ける(沈黙すると終了) print("Say English.") audio = r.listen(source) try: i += 1 # Google Speech Recognitionを実行→テキスト化 text = r.recognize_google(audio, language="en") print('音声認識結果(英語)「', text, '」') # Google翻訳 translated = GoogleTranslator(source='auto', target='ja').translate(text) print('日本語翻訳結果「', translated, '」') if text == 'it is the end': flag = False except sr.UnknownValueError: print("Error!") except sr.RequestError as e: print("Could not request results from Google Speech Recognition service; {0}".format(e)) return if __name__ == '__main__': """ Main """ # 音声認識と翻訳を実行 text = run_recognition_translation() |
こちらが結果です。ちょっと取りこぼしもありました。英語は苦手?スピーカーの問題かな?
まとめ
この記事ではSpeechRecognitionとdeep-translatorを使ってマイクに話しかけた言葉を自動翻訳するプログラムを書いてみました。
deep-translatorのGoogleTranslatorを使うことで、気軽にPythonでGoogle翻訳を使えることがわかりました。記事の中で日本語を英語、英語を日本語に翻訳するコードを紹介しましたが、英語はちょっと音声認識の精度が悪いかもしれません(筆者のPC環境だけかもしれませんが)。
プログラム的にテキストを自動翻訳できると、自然言語系のツール化の幅が広がりそうですね!
Xでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!