「ブログのページをPythonを使って読み上げる」ただそれだけのプログラミング
こんにちは ともです。
今回の投稿は「ブログのページからPythonを使って本文を取得ただそれだけの単純なプログラミング」のつづきです。
ブログのページをPythonを使って読み上げるただそれだけのプログラミングになります。
音声読み上げの設定
音声はOpen JTalkを使用しています。
Open JTalkの設定は、以下のページを参考にしています。
hts_engineダウンロード
OS:Windows 10
コンパイル:Visual Studio Community
上記URLを参考にOpenJtalkの「Source Code」をダウンロードします。※ダウンロード後にVisual Studio Communityでbuildを実施します。
ダウンロードは「hts_engine_API-1.10.tar.gz」のファイルをダウンロードします。
ダウンロード後は任意のフォルダに配置します。私の環境のディレクトリ構成は以下の通りです。
D:\
┗hts
┗hts_engine_API-1.10.tar.gz
このディレクトリ配下でファイルを解凍します。
hts_engineビルド
ビルドを行います。
D:\
┗hts
cd D:\hts\hts_engine_API-1.10
nmake -f Makefile.mak
ビルドができない場合はVisial Studio Communityの「ツール」->「ツールと機能を取得」を選択します。
C++によるデスクトップ開発にチェックを行います。
OpenJtalkダウンロード
ダウンロードは「open_jtalk_dic_shift_jis-1.11.tar.gz」のファイルをダウンロードします。
ダウンロード後は任意のフォルダに配置します。私の環境のディレクトリ構成は以下の通りです。
OpenJtalkビルド
Makefileのファイルを更新します。apiのディレクトリパスの変更を行います。
D:\jtalk\open_jtalk-1.11\bin\Makefile.mak
CC = cl
CL = link
CFLAGS = /O2 /Ob2 /Oi /Ot /Oy /GT /GL /TC
/I..\text2mecab
/I ..\mecab\src
/I ..\mecab2njd
/I ..\njd
/I ..\njd_set_pronunciation
/I ..\njd_set_digit
/I ..\njd_set_accent_phrase
/I ..\njd_set_accent_type
/I ..\njd_set_unvoiced_vowel
/I ..\njd_set_long_vowel
/I ..\njd2jpcommon
/I ..\jpcommon
/I D:\hts\hts_engine_API-1.10\include
LFLAGS = /LTCG
LIBS = ..\text2mecab\text2mecab.lib
..\mecab\src\mecab.lib
..\mecab2njd\mecab2njd.lib
..\njd\njd.lib
..\njd_set_pronunciation\njd_set_pronunciation.lib
..\njd_set_digit\njd_set_digit.lib
..\njd_set_accent_phrase\njd_set_accent_phrase.lib
..\njd_set_accent_type\njd_set_accent_type.lib
..\njd_set_unvoiced_vowel\njd_set_unvoiced_vowel.lib
..\njd_set_long_vowel\njd_set_long_vowel.lib
..\njd2jpcommon\njd2jpcommon.lib
..\jpcommon\jpcommon.lib
D:\hts\hts_engine_API-1.10\lib\hts_engine_API.lib
winmm.lib
Advapi32.lib
all: open_jtalk.exe
open_jtalk.exe : open_jtalk.obj
$(CC) $(CFLAGS) /c $(@B).c
$(CL) $(LFLAGS) /OUT:$@ $(LIBS) $(@B).obj
clean:
del *.exe
del *.obj
D:\jtalk\open_jtalk-1.11\mecab\Makefile.mak
all: char.bin matrix.bin sys.dic unk.dic
left-id.def: _left-id.def
copy _left-id.def left-id.def
pos-id.def: _pos-id.def
copy _pos-id.def pos-id.def
rewrite.def: _rewrite.def
copy _rewrite.def rewrite.def
right-id.def: _right-id.def
copy _right-id.def right-id.def
char.bin matrix.bin sys.dic unk.dic: naist-jdic.csv matrix.def left-id.def pos-id.def rewrite.def right-id.def char.def unk.def feature.def
..\mecab\src\mecab-dict-index.exe -d . -o . -f UTF-8 -t sjis
clean:
del char.bin matrix.bin sys.dic unk.dic
音声データダウンロード
音声データをダウンロードします。
MMDAgent_Example-1.8.zip
D:\
┗voice_mei
┣MDAgent_Example-1.8
┗MDAgent_Example-1.8.zip
実行
実行します。以下のディレクトリ配下にinput.txtを作成し、発音したい内容を記載します。
cd D:\jtalk\open_jtalk-1.11\bin
open_jtalk.exe -m D:\voice_mei\MMDAgent_Example-1.8\Voice\mei\mei_normal.htsvoice -x dic -ow output.wav input.txt
コーディング
コーディングは以下の通りです。
D:\
┗python_workspace
┗getblogpage.py
from bs4 import BeautifulSoup
import requests
import subprocess
import winsound
request = requests.get('{url}')
bs_result = BeautifulSoup(request.text, 'html.parser')
OPENJTALK_BINPATH = 'D:/jtalk/open_jtalk-1.11/bin'
OPENJTALK_DICPATH = 'D:/jtalk/open_jtalk-1.11/mecab-naist-jdic'
OPENJTALK_VOICEPATH = 'D:/voice_mei/MMDAgent_Example-1.8/Voice/mei/mei_normal.htsvoice'
open_jtalk=[OPENJTALK_BINPATH + '/open_jtalk.exe']
mech=['-x',OPENJTALK_DICPATH]
htsvoice=['-m',OPENJTALK_VOICEPATH]
speed=['-r','1.0']
outwav=['-ow','open_jtalk.wav']
cmd=open_jtalk+mech+htsvoice+speed+outwav
str_line = ''
paragraph_list = bs_result.find_all('p')
for line in paragraph_list:
c = subprocess.Popen(cmd,stdin=subprocess.PIPE)
print(line.text)
c.stdin.write(line.text.encode('shift-jis'))
c.stdin.close()
c.wait()
winsound.PlaySound('open_jtalk.wav', winsound.SND_FILENAME)
コーディングの説明は省略します。
実行
pythonのコマンドラインで実行します。
D:\
┗python_workspace
┗getblogpage.py
cd D:\python_workspace
python getblogpage.py
まとめ
pythonを使って自分のブログページの本文を取得しました。ただそれだけのブログラムです。
0 件のコメント:
コメントを投稿
コメントをお待ちしています。