2020年1月17日金曜日

ラズパイ(IOT・35)

前回までで、テキストから音声合成で
しゃべれるようになりました。
そこで、今回は、コマンドにテキストを指定すると
しゃべれるように設定してみたいと思います。
コマンドから、指定できるようになると、
任意のメッセージを端末に、
しゃべらせて意思を伝える端末を
作ることができそうですね。

コマンドは、パラメータを受け取って音声合成する
ような感じになります。
#!/bin/bash

TMP=/tmp/tmp.wav
#echo "$1" | open_jtalk \
open_jtalk -m /home/pi/MMDAgent_Example-1.8/Voice/mei/mei_normal.htsvoice -x /usr/local/dic -ow /tmp/tmp.wav /home/pi/sample.txt
aplay -q /tmp/tmp.wav
rm -f /tmp/tmp.wav
https://www.filetalk.info/index.html

2020年1月15日水曜日

ラズパイ(IOT・34)

つぎに、女性の声でしゃべらせてみます。
女性の声をサンプリングされたデータをダウンロードします。
 $ wget http://downloads.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.8/MMDAgent_Example-1.8.zip
 $ unzip -q MMDAgent_Example-1.8.zip



しゃべらせたい文章を予め作成します。
 $ vi sample.txt


文章からWavファイルを作成します。
 $ open_jtalk -m ./MMDAgent_Example-1.8/Voice/mei/mei_normal.htsvoice \
             -x /usr/local/dic \
             -ow ./mei_normal.htsvoice.wav \
             sample.txt



なかなか、良い感じですね~

https://www.filetalk.info/index.html

2020年1月14日火曜日

ラズパイ(IOT・33)

つぎに、男性の声をサンプリングされたデータをダウンロードします。
 $ wget http://downloads.sourceforge.net/project/open-jtalk/HTS%20voice/hts_voice_nitech_jp_atr503_m001-1.05/hts_voice_nitech_jp_atr503_m001-1.05.tar.gz
 $ tar -zxvf hts_voice_nitech_jp_atr503_m001-1.05.tar.gz


しゃべらせたい文章を予め作成します。
 $ vi sample.txt


文章からWavファイルを作成します。
 $ open_jtalk -m ./hts_voice_nitech_jp_atr503_m001-1.05/nitech_jp_atr503_m001.htsvoice \
             -x /usr/local/dic \
             -ow ./nitech_jp_atr503_m001.htsvoice.wav \
             sample.txt



おお~、しゃべらせることができました。

2020年1月10日金曜日

ラズパイ(IOT・32)

さて、OpenJTalkをインストールしていきたいと思います。
まず、音声合成用のモジュールを入れます。

以下から、最新のモジュールを確認します。(この時点で、1.10が最新)
https://sourceforge.net/projects/hts-engine/files/hts_engine%20API/
 $ mkdir hts_engine_api
 $ cd !$
 $ curl -L http://downloads.sourceforge.net/hts-engine/hts_engine_API-1.10.tar.gz | tar zxfv -
 $ cd ./hts_engine_API-1.10
 $ ./configure
 $ make && sudo make install
 $ which hts_engine


そして、OpenJTalkをインストールします。
以下から、最新のモジュールを確認します。(この時点で、1.11が最新)
http://open-jtalk.sourceforge.net/
 $ wget http://downloads.sourceforge.net/open-jtalk/open_jtalk-1.11.tar.gz
 $ tar zxvf open_jtalk-1.11.tar.gz
 $ cd open_jtalk-1.11
 $ ./configure --with-charset=UTF-8 --with-hts-engine-header-path=/home/pi/hts_engine_api/hts_engine_API-1.10/include --with-hts-engine-library-path=/home/pi/hts_engine_api/hts_engine_API-1.10/lib
 $ make
 $ sudo make install
 $ which open_jtalk
 $ cd ../
 $ wget http://tenet.dl.sourceforge.net/project/open-jtalk/Dictionary/open_jtalk_dic-1.11/open_jtalk_dic_utf_8-1.11.tar.gz
 $ tar zxvf open_jtalk_dic_utf_8-1.11.tar.gz
 $ sudo mkdir /var/lib/mecab
 $ sudo mkdir /var/lib/mecab/dic
 $ sudo cp -r open_jtalk_dic_utf_8-1.11 /var/lib/mecab/dic



2020年1月9日木曜日

ラズパイ(IOT・31)

遠隔地から操作して、しゃべらせたりにも使えるように
ラズパイで音声合成を行ってみたいと思います。

また、色々、サンプルの再生やWebサイトをみて、
なめらかに発音できていたり、ライセンス的に問題が
少ないもので利用しやすいものとしまして、
OpenJTalkが一番よさげでしたので、
こちらを試してみます。

デモサイト:http://open-jtalk.sp.nitech.ac.jp/
公式サイト:http://open-jtalk.sourceforge.net/


2020年1月8日水曜日

ラズパイ(IOT・30)

PythonからMySQLへのアクセス用のライブラリに
mysqlclient を使っていましたが、
やはり、本家が出しているライブラリが気になったので
こちらを使ってみたいと思います。

インストールは、以下を行います。
$ pip install mysql-connector-python

利用した感覚としましては、前回のmysqlclientと大差ない
ような感じですが、今後の開発やサポートのことも
考えるとこちらのほうがよさそうですね~

https://www.filetalk.info/index.html

2020年1月7日火曜日

ラズパイ(IOT・29)

お次は、各種ライブラリが豊富で、いざという時に役に立つ
Pythonからデータをいじれるように
MySQLにアクセスできるようにしてみます。

Python用のMySQLへ接続するためのライブラリは
色々ありますが、よく使われているところと、
更新対応が続いていてサポートが安心な、mysqlclient を
使ってみます。

インストールは以下から
sudo pip3 install mysqlclient

接続と実行は以下のような形になります。
フィールドへのパラメータもスムーズに利用できそうです。
トランザクション等は、オートコミットをOFFにすることで、
ロールバックさせる感じのようですね~
import MySQLdb
import time
import datetime

if (__name__ == "__main__"):
    conn = MySQLdb.connect(
        user='root',
        passwd='****',
        host='localhost',
        db='xxxxx',
        charset='utf8'
    )
    conn.autocommit(False)
    cur = conn.cursor()
    
    cnt = 0
    while True:
        try:
            cur.execute('SELECT * FROM table')
            result = cur.fetchall()
            for row in cur:
                print(row)
        except Exception as e:
            conn.rollback()
            raise e
        finally:
        
        cnt += 1
        dt_now = datetime.datetime.now()
        print('No:', cnt, dt_now)
        time.sleep(600.0)
        
    cur.close()
    conn.close()

10分毎に内容を出力するスクリプトを書いてみましたが、
今のところコネクションが途切れる様子は無いようです。