• 海外赴任時の車の売却はJCM

お気に入り一覧 お気に入り登録 お気に入り解除

Pythonで日本語を音声認識をして音声をテキスト化し、それを音声合成して発音する方法簡単解説【オウム返し by Mac その2:音声合成編】

カテゴリ タイ

一つ前の記事では、MacでPythonを使って日本語の音声認識の方法を説明しました。今回はその続きとして、音声合成、つまりテキストデータをもとに、音声での発音のさせ方を説明していきます。

ライブラリにはpyttsx3を使用しました。日本語の音声合成ライブラリとしては名古屋工業大学さんのOpenJtalkが有名ですが、日本語にしか対応していないこと、更新が2018年7月以降されていないようであることなどを理由に、今回は使用を控えました。

また、古い記事の中にはpytttsxを使用して説明している記事がありますが、pyttsx3を使用してくださいね。

この記事を読んで、できるようになる事 speech_synthesis_03speech_synthesis_03

Mac上のPythonにて、ライブラリpyttsx3を用いて、オフライン環境で日本語のテキストデータを音声に変換して発音させることが出来ます。また、英語をはじめとして多言語にも対応していますので、パラメータの変更により、多言語に対応できます。

また、前記事の【オウム返し by Mac その1:音声認識編】と合わせて読んでいただくことにより、Macに日本語の音声で話しかけ、それを認識させてテキストデータ化させ、そのデータを音声合成により発音させてインプットできるようになります。

もちろんこれだけでは、ほとんど何の意味のないコードですが、みなさんが作られているアプリのインターファイスとして使っていただけます。

、また、興味を持って、機械学習やプログラミングに始めたばかりの方には、コンピュータを使って自分ができる実装の一例として経験していただければと思います。

環境設定 speech_synthesis_02speech_synthesis_02

ぼくの環境は以下の通りです。

OS : MacOS Mojave 10.14.6 Python : version 3.6.5 Hardware : MacBook Pro 2016 IDE : Jupyter Lab

近くに適当なWindowsのコンピュータがないので、確認はしていませんが、Windowsでもこれから説明するコードは動くはずです。

音声合成 speech_synthesis_05speech_synthesis_05 概要説明

今回使用する音声合成のためのライブラリ”pyttsx3"は以前の記事で解説しました"speech_recognition"と異なり、オフラインで使用できます。

この"pyttsx3"の本家サイトへのリンクを以下に貼っておきます。英文ですが、興味のある方は参考にしてみてください。

pyttsx3 - Text-to-speech x-platform — pyttsx3 2.6 documentation

実装

それでは実際に実装していきます。

# pyttsx3のinstall !pip install pyttsx3

それでは、前回の記事と同じようにJupyter Labを開いて上記のコードを打っていきます。
上記のコードによりpyttsx3をインストールします。MacのターミナルやWindowsのコマンドプロンプトから入力する場合は!pipの"!"を省略してください。
また、一行目の"#"から始めるコードはコメントといって注意書きで実際にコンピュータは実行しません。Pythonでは"#"を使うとその行の行末までが、コメントになります。

import pyttsx3 def TextToSpeech_pyttsx3(ph): engine = pyttsx3.init() voices = engine.getProperty('voices') engine.setProperty("voice", voices[18].id) engine.say(ph) engine.runAndWait() text = "こんにちは" TextToSpeech_pyttsx3(text)

上記のコードで、変数textに代入した日本語「こんにちは」を発音します。また、声の性質はここのパラメーターで細かく設定できるのですが、ここでは、voicesに登録された声の性質の19番目(7行目に18とある番号でこの性質が呼び出されます。一番目の声の性質の番号が”0”であるため、18は19番目になります。)を使っています。
また、もちろん「こんにちは」を別の日本語の文字列に変換しても、正しく発音してくれます。

興味のある方は、変数textに英語の文字列を代入して、(日本語のテキストデータを発音できる声の性質が少ない為)7行目の番号を色々と変えてコードを実行して色々の声の性質を試してみてください。

音声認識 + 音声合成 = オウム返し

それでは、前回の記事で解説した音声認識のコードと今回開設した音声合成のコードを合体させて、オウム返しのコードを作ります。

import speech_recognition as sr import subprocess import tempfile import pyttsx3 # 音声合成 def TextToSpeech_pyttsx3(ph): engine = pyttsx3.init() voices = engine.getProperty('voices') engine.setProperty("voice", voices[18].id) engine.say(ph) engine.runAndWait() # 音声入力 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") 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) TextToSpeech_pyttsx3(text) print("--------------------") if text == "終わりだよ": break print("完了。")

上記のコードで、音声により入力された日本語のデータが音声認識によりテキストデータに変換され、それを音声合成により音声に戻して、日本語として発音しています。

前回の音声認識のコードと同様に、「終わりだよ」という入力を認識すると、ループを抜き出て処理を終えます。

まとめ sppech_synthesis_04sppech_synthesis_04

これで、音声合成の記事は終わりです。前回の音声認識の記事と合わせて、オウム返しのコードが完成しました。

いかがだったでしょうか。思いの外、簡単だったのではないかと思います。20年前にこれと同じことをコンピュータにさせるようと思うと、かなり大掛かりな段取りが必要だったように思います。

それでは最後まで、お付き合いありがとうございました。今回はここまでにいたします。さようなら。

参照資料

本記事の制作のために、以下の資料を参考にしていただきました。

https://pyttsx3.readthedocs.io/en/latest/

続きを読む

ブログ紹介

みゆきメダカのブログ

https://miyukimedaka.com

20年以上の東南アジアでの海外赴任の経験をもとに、これから海外赴任される方、されている方との有益な情報の共有できればと思っています。

カテゴリ タイ

このブログの最新記事

これで漏れ無し!海外赴任前の準備方法

チャートとチェックリストを使って、
海外赴任前の準備項目を確認しながら情報を収集して準備に備えましょう!

海外赴任準備チェックリストを確認する

書籍版のご案内

海外赴任ガイド 到着から帰国まで

書籍版「海外赴任ガイド」は各種ノウハウや一目で分かりやすい「海外赴任準備チャート」などをコンパクトな一冊にまとめております。海外赴任への不安解消に繋がる道しるべとしてご活用ください。

書籍版の詳細

プログライターの方

海外赴任ブログを登録する

あなたのブログを登録してみましょう!

プログライターの方

海外赴任ガイドのSNS

Twitter アカウントをみる

たいせつにしますプライバシー 10520045