このエントリーをはてなブックマークに追加
facebooktwittergoogle_plusredditpinterestlinkedinmail

こんばんは、tapunです。

 

Raspberry Pi

 

電子工作用に注文しているジャンプケーブルがなかなか届かないので、別の検証として、Raspberry Piに喋ってもらう作戦をやってみたので、その流れをメモします。


何を喋らせるの?

将来的には毎朝人が通ったときに、その日の天気などを伝えることを目標にします!

今回はとりあえず、「現在時刻を喋ってもらう」ように設定していきます。

#2015-12-15追記
天気予報を喋っていただく設定はこちらのポストを参考に♪

自分の住んでいる地域の天気をしゃべってもらう設定

天気を喋ってもらう設定の改善版


どうやって喋らせるの?

調べたところ、Open Jtalkという日本語音声合成ソフトがフリーかつ有名なようなので、私もこちらのソフトを使っていきます。

※Open Jtalkとは・・・ http://open-jtalk.sp.nitech.ac.jp/

名古屋工業大学で開発された、オープンソース(修正BSDライセンス)の日本語テキストに基づいて自由な音声を生成するHMMテキスト音声合成システムとのことです。

Open Jtalkとは?
オープンソースの日本語音声合成エンジン
入力された日本語テキストに基づいて人工音声を生成する、テキスト音声システム。
  • BSDライセンス準拠。
  • 名古屋工業大学で開発。
  • 音声認識エンジンにHTSを使う。
    http://open-jtalk.sourceforge.net/
    引用元:http://www.harumaki.net/2014/10/23/open-jtalk_insatll_memo

事前準備

  1. pacoのインストール
    今回はソースからコンパイルするので、ソースの管理用ソフトのpacoをインストールします。

    $ sudo apt-get install paco
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following NEW packages will be installed:
      paco
    0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
    Need to get 91.1 kB of archives.
    After this operation, 217 kB of additional disk space will be used.
    Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main paco armhf 2.0.9-3 [91.1 kB]
    Fetched 91.1 kB in 1s (60.4 kB/s)
    Selecting previously unselected package paco.
    (Reading database ... 118489 files and directories currently installed.)
    Preparing to unpack .../paco_2.0.9-3_armhf.deb ...
    Unpacking paco (2.0.9-3) ...
    Processing triggers for man-db (2.7.0.2-5) ...
    Setting up paco (2.0.9-3) ...
    Processing triggers for libc-bin (2.19-18+deb8u1) ...

     # pacoの説明は、こちらのまとめが参考になります。


インストールする
# こちらのサイトを参考にさせていただきました。

  1. hts_engine API version 1.09 (December 25, 2014)をインストールします
    # 2015/11/30時点の最新版です。

    /tmp配下にダウンロードして解凍します

    $ cd /tmp
    $ sudo wget http://sourceforge.net/projects/hts-engine/files/hts_engine%20API/hts_engine_API-1.09/hts_engine_API-1.09.tar.gz
    $ sudo tar zxvf hts_engine_API-1.09.tar.gz

    ビルド・コンパイル・インストールします。 2分くらいかかりました。

    $ cd /tmp/hts_engine_API-1.09
    $ sudo ./configure
    $ sudo make
    $ sudo paco -lD "make install"
  2. Open JTalk 1.08をインストールします。
    # 2015/11/30時点の最新版です。

    /tmp にダウンロードして解凍します。

    $ cd /tmp
    $ sudo wget http://sourceforge.net/projects/open-jtalk/files/Open%20JTalk/open_jtalk-1.08/open_jtalk-1.08.tar.gz
    $ sudo tar zxvf open_jtalk-1.08.tar.gz

    ビルド・コンパイル・インストールします。 これは10分くらいかかりました~。途中で心配になった。。

    $ cd /tmp/open_jtalk-1.08
    $ sudo ./configure --with-charset=UTF-8
    $ sudo make
    $ sudo paco -lD "make install"
  3. 確認
    pacoで管理されているソフトが表示されればオッケーです。
    $ paco -a
    hts_engine_API-1.09  open_jtalk-1.08

辞書ファイルのダウンロード

Dictionary for Open JTalk version 1.08 (25 December, 2014)をダウンロードして、/usr/local/share/配下におきます。

  1. /tmp にダウンロードして解凍して配置します。
    $ cd /tmp
    $ sudo wget http://sourceforge.net/projects/open-jtalk/files/Dictionary/open_jtalk_dic-1.08/open_jtalk_dic_utf_8-1.08.tar.gz
    $ sudo tar zxvf open_jtalk_dic_utf_8-1.08.tar.gz
    $ sudo mkdir /usr/local/share/open_jtalk
    $ sudo mv /tmp/open_jtalk_dic_utf_8-1.08 /usr/local/share/open_jtalk/

     


MMDAgentのダウンロード

MMDAgent(version 1.4 ) をダウンロードして、/usr/local/share/配下におきます。

  1. /tmp にダウンロードして解凍して配置します。
    $ cd /tmp
    $ sudo wget http://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.4/MMDAgent_Example-1.4.zip
    $ sudo unzip MMDAgent_Example-1.4.zip
    $ sudo mkdir /usr/local/share/hts_voice
    $ sudo mv /tmp/MMDAgent_Example-1.4/Voice/mei /usr/local/share/hts_voice/

これでインストールは完了です!


早速喋っていただく

  1. シェルの作成
    open_jtalkを使って喋ってもらうためのシェルを/usr/local/bin配下に作成します。
    $ sudo vi /usr/local/bin/jsay

     jsayファイルの内容は、こちらです。
    一旦tempファイルとしてwavファイルを作成し、出力後に消去しています。

    #!/bin/sh
     
    # 引数チェック
    CMDNAME=`basename $0`
    if [ $# -lt 1 ]; then
        echo "Usage: ${CMDNAME} [ text ]" 1>&2
        exit 1
    fi
     
     
    # 定数定義(出力ファイル名、辞書の場所、音声データの場所)
    TMPFILE=`mktemp /tmp/tmp.XXXXXXXX.wav`
    DIC=/usr/local/share/open_jtalk/open_jtalk_dic_utf_8-1.08/
    VOICE=/usr/local/share/hts_voice/mei/mei_normal.htsvoice
     
     
    # 音声データ生成
    echo "$1" | open_jtalk \
    -x ${DIC} \
    -m ${VOICE} \
    -ow ${TMPFILE} && \
     
     
    # 生成した音声データを再生する
    aplay --quiet ${TMPFILE}
     
     
    # 生成した音声データを削除する
    rm -f ${TMPFILE}
     
    # 終了
    exit 0
  2. 実行権限を付与する
    $  sudo chmod +x /usr/local/bin/jsay 
  3. しゃべってもらう
    $ jsay こんにちは、わたしはラズベリーパイです

     

あれ?しゃべらない・・・・・

HDMIで接続しているテレビから、うんともすんとも喋りません。

そこで音声出力の設定を入れなおすことにしました。

  1. boot設定を編集します
    $ vi /boot/config.txt
    ...
    
    # uncomment to force a HDMI mode rather than DVI. This can make audio work in
    # DMT (computer monitor) modes
    hdmi_drive=2
    
    ...

     “hdmi_drive=2″についていたコメントを外します。

  2. 音声出力の優先順位を設定します。
    • アナログ出力を優先にする場合は
      $ amixer cset numid=3 1
    • HDMI出力を優先にする場合は
      $ amixer cset numid=3 2

       # 私はこちらにしました~

  3. rebootします

ここで再チャレンジすると・・・・・喋りました~!!!

$ jsay こんにちは、わたしはラズベリーパイです

最初の3文字くらいが消えちゃって「んにちは、・・・」といっちゃってますが、まぁ喋ってるので良しとします。

2015/12/03追記:出力をHDMIからアナログに変えたら解決しました。くわしくはこちら。


現在時刻を喋らせる
# こちらのサイトを参考にさせていただきました。

時刻を話させるスクリプトを適当なところに作成します。

$ vi ~/talk_date.py

 中身はこんな感じです。↓

#!/usr/bin/env python
# -*- coding:utf-8 -*-  
 
import shlex
import subprocess
 
from datetime import datetime
 
import urllib2
import json
 
CMD_SAY = 'jsay'
 
def main():
    say_datetime()
    return

def say_datetime():
    d = datetime.now()
    text = 'はい、今の時刻は%s月%s日、%s時%s分%s秒' % (d.month, d.day, d.hour, d.minute, d.second)
    text = CMD_SAY + ' ' + text
    print text
    proc = subprocess.Popen(shlex.split(text))
    proc.communicate()
    return

### Execute
if __name__ == "__main__":
    main()

ファイルを保存したら、下記のように実行します。

$ sudo python talk_date.py

 すると、Raspiちゃんが喋って時刻を教えてくれます!!

大満足です!


残課題

最初の2~3文字分の音声がスキップされてしまうので、なんとかしたいです。

# 上の例だと、最初の「はい、」が消えてて「今の時刻は・・・」からしか聞こえません。

2015/12/03追記:出力をHDMIからアナログに変えたら解決しました。くわしくはこちら。


まとめ

Raspberry Piに喋ってもらうために、Open JTalkをインストールしました。

音声をHDMIから優先で出力するためにboot configファイルをいじりました。

jsay “こんにちは” の形で、任意の日本語を喋ってくれるようになりました。

また、現在時刻を喋ってもらうためのpythonスクリプトを作成しました。

まずは日本語を喋るところまでクリアできたので、今後より活用できそうです!

おやすみなさい~


Raspberry Pi ブログランキングへ