PR
Calendar
Keyword Search
Category
Free Space
次に、パソコンから次のような Python のプログラムで喋らせてみた。
int len = message.length();
char buff[len];
message.toCharArray(buff,len);
atp.Synthe(buff); // 引数に指定のテキストを発声
問題になるのが、喋らせる内容がアルファベットの音声記号だということ。最初は、 音声記号列生成 Webサービス を使って、音声記号に変換したものを渡そうかと思ったのだが、AquesTalk pico LSI に一度に渡せる文字列長に制限があるので、そのあたり考慮しないとダメだと分かった。制限を超える文字列を渡すと、何も喋ってくれないので、予め文字列を短く区切って渡す必要がある。ちなみに、文字列長を超える文字列を渡した時も、r.status_code は 200 で返ってくるので、とりあえず喋らせて失敗したら短くするとかいうのはダメ。渡す前に毎回チェックする必要がある。ローマ字記号列(半角英数小文字)の長さは最大 127byte なので、その長さ以下で収まりのよい感じに区切ってあげるひつようがある。
import requests
r = requests.get("http://wroom-02-address/speak?say=onakaga/hettayo.")
初来日するマティス米国防長官が、沖縄県の尖閣諸島について「対日防衛義務を定めた日米安全保障条約第5条の適用対象になる」とする見解を、稲田防衛相との間で確認する見通しになった。
となる。このままだと長過ぎるので、文字列を分割して、
hatsura'ini_chisuru,ma'_thisu/beikokubo-cho'-kannga okinawa'kennno/sennka_kusho'to-nitsuite ta'i/nichibo-eigi'muo/sada'meta,ni'chi/beiannzennhosho-jo'-ya_ku,da'i/<NUMK VAL=5 COUNTER=jo'- MODE=AaH>no/tekiyo-ta'isho-ni/na'ru to/suru/kennkaio inada,bo-ei'sho-tono/aidade,kakuninnsuru/mito-shini/na'tta.
となるが、次のようにした方が、自分には自然に聞こえる。まあ、自然にというのは、主観的なものだから人によって違うだろうけど、自分に違和感のないイントネーションで喋ってくれるところを目標にする。
hatsura'ini_chisuru,ma'_thisu/beikokubo-cho'-kannga okinawa'kennno/sennka_kusho'to-nitsuite ta'i/nichibo-eigi'muo/sada'meta
ni'chi/beiannzennhosho-jo'-ya_ku,da'i/<NUMK VAL=5 COUNTER=jo'- MODE=AaH>no/tekiyo-ta'isho-ni/na'ru to/suru/
kennkaio inada,bo-ei'sho-tono/aidade,kakuninnsuru/mito-shini/na'tta.
2つを比較するために喋らせてみた。ちょっとアクセントの位置を調整するだけで、自分にとってはだいぶ聞きやすくなった。
hatsura'ini_chisuru,ma'_thisu/beikokubo-cho'-kannga okinawa'kennno/sennka_kusho'to-nitsuite tai'/nichibo-eigi'muo/sada'meta
ni'chibei/annzennhosho-jo'-ya_ku,da'i/<NUMK VAL=5 COUNTER=jo'- MODE=AaH>no/tekiyo-ta'isho-ni/na'ruto/suru/
kennkaiwo inada,bo-ei'sho-tono/aidade,kakuninnsuru/mito-shinina'tta.
import request
message1 = ["hatsura'ini_chisuru,ma'_thisu/beikokubo-cho'-kannga okinawa'kennno/sennka_kusho'to-nitsuite ta'i/nichibo-eigi'muo/sada'meta",
"ni'chi/beiannzennhosho-jo'-ya_ku,da'i/<NUMK VAL=5 COUNTER=jo'- MODE=AaH<no/tekiyo-ta'isho-ni/na'ru to/suru/",
"kennkaiwo inada,bo-ei'sho-tono/aidade,kakuninnsuru/mito-shinina'tta."]
message2 = ["hatsura'ini_chisuru,ma'_thisu/beikokubo-cho'-kannga okinawa'kennno/sennka_kusho'to-nitsuite tai'/nichibo-eigi'muo/sada'meta",
"ni'chibei/annzennhosho-jo'-ya_ku,da'i/<NUMK VAL=5 COUNTER=jo'- MODE=AaH>no/tekiyo-ta'isho-ni/na'ruto/suru/",
"kennkaiwo inada,bo-ei'sho-tono/aidade,kakuninnsuru/mito-shinina'tta."]
for i in range(3):
requests.get("http://ESP-WROOM2-address/speak?say=%s" % message1[i])
for i in range(3):
requests.get("http://ESP-WROOM2-address/speak?say=%s" % message2[i])
らしい。最近、この手のことをやっていなかったので、また、ちょっと言語処理系もチャレンジしてみるか。
JUMAN++は言語モデルを利用した高性能な形態素解析システムです.言語モデルとして Recurrent Neural Network Language Model(RNNLM) を用いることにより,単語の並びの意味的な自然さを考慮した解析を行います.それにより JUMAN,MeCab に比べ大きく性能が向上しています.文法・辞書・出力フォーマット等は JUMAN から引き継いだものを利用しています.本システムは CREST「知識に基づく構造的言語処理の確立と知識インフラの構築」の支援により開発されました.
Arduino のシミュレーターの記事を読んで 2017.08.26
NanoPi NEO の自作ネットワーク監視装置 1 2017.08.24
NanoPi NEO に LEDアレイと LCD を付けて… 2017.08.22