LoginSignup
6
6

More than 3 years have passed since last update.

ROSで音声認識、音声合成(openhri_ros)

Posted at

音声認識、音声合成パッケージ:openhri_ros

OpenRTM-aistで提供されていた音声対話関連モジュールOpenHRIの一部をROSパッケージにしました。
このパッケージでは、Julius、Googleによる音声認識、OpenJTalk、Googleによる音声合成を行うことができます。

このパッケージを利用するためには、audio_captureおよびaudio_playのパッケージが必要になります。

ライセンス

このパッケージは、Eclipse Public License v2.0で開発及び配布しています。

開発リポジトリ

openhri_rosの開発リポジトリは、Githubにあります。

openhri_rosの主な機能

openhri_rosでは、OpenHRI_Voiceにあった機能のうち、

  • Juliusを使った音声認識
  • Google Cloud Speech-to-Textを使った音声認識(毎月一定量(1h/month)無料)
  • OpenJTalkを使った音声合成
  • Google Cloud Text-to-Speechを使った音声合成(毎月一定量 無料)

を提供しています。

音声認識と音声合成はあるのですが、対話制御機能は、既に開発済みのeSEAT ver.2.5で対応しています。
したがって、これらをつかうことで、ROSを使った音声対話システムを簡単に作成することができます。

openhri_rosを利用するための準備

openhri_rosでは、音声の入出力(マイクとスピーカー)に関しては、audio_captureおよびaudio_playのノードを使用します。

また、日本語音声認識、日本語音声合成のエンジンとして、Juliusディクテーションキット、OpenJTalkおよびGoogle音声認識、音声合成サービスを使用しています。
各ノードの実装は、Python(現在は、Python2.7で動作確認しています)を使用していますので、下の拡張ライブラリも必要となります。
- pydub
- urllib3
- certifi
- lxml

Juliusディクテーションキットのダウンロードとインストール

Juliusは、大語彙連続日本語音声認識エンジンです。オフィシャルサイトからディクテーションキットをダウンロードし、インストールします。

ダウンロード

下のコマンドを実行すると、直接ダウンロードすることができます。

 # cd ~/Downloads
 # wget "https://osdn.net/frs/redir.php?m=jaist&f=julius%2F71011%2Fdictation-kit-4.5.zip" -O dictation-kit-4.5.zip

Ubuntuを利用した場合には、aptでjuliusの本体のみインストール可能ですが、日本語認識用の音響モデル、言語モデル、辞書作成ツールなどは、別途用意する必要がありますので、dictation-kitを使うことを推奨しています。

インストール

インストールは、ダウンロードしたアーカイブをunzipコマンドで展開すればいいのですが、openhri_rosのデフォルト設定にあわせて、下のコマンドを実行します。

 # sudo mkdir -p /usr/local/julius
 # sudo unzip dictation-kit-4.5.zip -d /usr/local/julius
 # sudo ln -s /usr/local/julius/dictation-kit-4.5 /usr/local/julius/dictation-kit

以上で、Juliusディクテーションキットのインストールは終了です。

OpenJTalkのインストール

OpenJTalkは、aptコマンドでインストールすることができます。

 # sudo apt install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001

以上で、OpenJTalkのインストールは終了です。

GoogleクラウドサービスのAPIキーの取得

音声認識、音声合成でGoogleのクラウドサービスを利用する場合には、APIキーが必要になります。

Googleクラウドプラットフォームサービスをまだ利用していない場合には、こちらから開始手続きを行ってください。

既に、Googleクラウドプラットフォームサービスを利用しているのであれば、コンソールに移動して、新規プロジェクト(名称は何でも良いのですが、openhri-rosなどで良いと思います)を作成してください。詳細な作成方法に関しては、オフィシャルドキュメントを参照して下さい。

プロジェクトを作って、コンソールにアクセスすると下のようなダッシュボードが現れます。
GoogleConsoleTop.png
ここで、真ん中にある 「APIの概要に移動」をクリックして、「APIとサービス」のダッシュボードに移動します。
GoogleConsoleAPI

次に、音声認識と音声合成に必要なAPIとサービスを有効化します。真ん中上部の「+APIとサービスの有効化」をクリックします。
GoogleConsoleAPI-Search
ここで、音声認識(Cloud Speech-to-Text API)と音声合成(Cloud Text-to-Speech API)のサービスを検索して、有効化してください。ここで、音声合成の方は、検索窓から検索しないと選択できないようです。(カテゴリの設定がありません)

それぞれのAPIを有効にしたら、ダッシュボードに戻って「認証情報」を作成します。下図のように真ん中上部の「+認証情報作成」が表示されていない場合には、「OAuth2.0の認証」が必要になりますので、画面の表示に従って入力していきます。
GoogleConsoleAPI0
「+認証情報作成」をクリックすると下図のようにプルダウンメニューがでますので「APIキー」を選択してください。
GoogleConsoleAPI1
下図のように、APIキーが表示されれば、あとは必要に応じて、利用制限を付加してください。
API_Key

ここで表示されたAPIキーは、openhri_rosで使用しますので、メモをしておきます。

APIキーの保存

openhri_rosでGoogleクラウドサービスを利用するために、先ほどのAPIキーを記載したファイル(google_apikey.txt)を作成します。
このファイル名は、openhri_rosのデフォルト設定です。

次にこのファイルを ~/.openhri というディレクトリを作成して、その下に保存してください。

 # mkdir ~/.openhri
 # echo 'APIキー' >  ~/.openhri/google_apikey.txt

以上で、Googleクラウドサービスを使うための設定は終了です。

その他のライブラリのインストール

openhri_rosでは、いくつかのPythonライブラリが必要になります。
下のコマンドでインストールしてください。

 # sudo apt install python-pydub python-urllib3 python-certifi python-lxml ros-melodic-audio-capture ros-melodic-audio-play

また、JuliusをWebサービスとして起動させる場合には、python-daemonも必要になります。

openhri_rosのダウンロードとインストール

openhri_rosは、通常のROSパッケージと同じように、catkinビルドシステムに対応しています。
リポジトリからダウンロードして、ビルドしてください。

 # source /opt/ros/melodic/setup.bash
 # mkdir -p ~/catkin_ws/src
 # cd ~/catkin_ws/src
 # catkin_init_workspace
 # git clone https://github.com/haraisao/openhri_ros
 # cd ~/catkin_ws
 # catkin_make
 # souece devel/setup.bash

以上で、openhri_rosの準備完了です。

openhri_rosの実行

上記の設定が終われば、デフォルト設定の状態で、roslaunchでテスト実行することができます。
現在作成済みのlaunchファイルは、

google_asr.launch
Google Speech-to-Textで音声認識を行います。結果は、'/asr/result' で配信されます。 結果は、XML形式なので、適当な処理が必要です。eSEATであれば、その出力が使えるはずです。
google_tts.launch
Google Text-to-Speechで音声合成を行います。'/tts/data'(std_msgs/String)に文字列を配信すると読み上げます。
julius.launch
Julius(dictation)を使って音声認識を行います。結果は、'/julius/result' で配信されます。 結果は、XML形式なので、適当な処理が必要です。eSEATであれば、その出力が使えるはずです。
openjtalk.launch
OpenJTalkで音声合成を行います。'/tts/data'(std_msgs/String)に文字列を配信すると読み上げます。
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6