#はじめに
第三回研究室内ハッカソンが行われました。他のメンバーの記事1、記事2
今回は、ツイートを喋るRaspberry Piを作ることに決めました。
作成動機は、以前ラズパイの初期設定を初めて行った際に参考にした記事に、ツイートを大声でしゃべるラズパイのことが書かれていました。それを読んだ時、研究室にいるツイ廃のツイートをしゃべるラズパイをいつか作ってみたいと感じたからです。
今回、参考にした**記事**
#準備したもの
- Raspberry Pi 2 + WiFiドングル
- Raspbian のインストールされたmicroSD
- 電源アダプタ
- 普通のイヤホン(スピーカー用)
- キーボードとマウスとディスプレイ
#スピーカーのチェック
###スピーカーの音をチェック
$ speaker-test -t wav
Ctr + C
で音を止めることができます。
この時、HDMIで接続したディスプレイから音が出たので、イヤホン(仮想スピーカー)から音を出すために
$ amixer cset numid=3 1
と入力することでHDMI出力からアナログ出力に変換でき、スピーカーから音を流すことができます。
###音量の調節
$ alsamixer
#OpenJtalk(音声合成ソフト)のインストール
###OpenJtalkとは
- オープンソースの音声合成エンジン
- OpenJtalkに喋らせるには以下が必要
- しゃべる内容が書かれたテキスト
- 辞書フォルダ
- 音声ファイル
- OpenJtalkの標準音声
- nitech_jp_atr503_m001.jhtsvoice(男性の声)
###OpenJtalk・辞書音声データをインストール
- nitech_jp_atr503_m001.jhtsvoice(男性の声)
$ sudo apt-get update
$ sudo apt-get install open-jtalk
$ sudo apt-get install open-jtalk-mecab-naist-jdic
$ sudo apt-get install htsengine libhtsengine-dev
$ sudo apt-get install hts-voice-nitech-jp-atr503-m001
途中で「続行しますか[Y/n]?」というメッセージが表示されたら、「Y」を打ち込んで「Enter」キーを押してインストールを続行します
###jtalk.shの作成
次に、OpenJtalkを動かすスクリプトを作成していきます。
#!/bin/sh
tmpfile=/tmp/jtalk.wav
htsvoice="/usr/share/hts-voice/\
nitech-jp-atr503-m001/\
nitech_jp_atr503_m001.htsvoice"
echo "$1" | open_jtalk \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-m $htsvoice \
-ow $tmpfile && \
aplay --quiet $tmpfile
rm $tmpfile
作成したスクリプトに実行権限を与えます。
$ chmod 755 jtalk.sh
コマンドラインで以下をテスト
$ ./jtalk.sh こんにちは
スピーカーから「こんにちは」と聞こえればOK!
#Twitter API アクセストークンを取得
下記のURLからtwitterにログインする。
https://apps.twitter.com/
- 「create an Apps」をクリック
- 必要な項目を入力(適当で大丈夫らしい)
#Pythonプログラムの作成
pythonの設定
# 仮想環境の作成
$ sudo apt-get install python3-dev python3-venv
$ python3 -m venv env
$ cd env
$ source bin/activate
tweepyのインストール
(env) $ python -m pip install tweepy
###teitter.pyを作成
#-*- coding:utf-8 -*-
import tweepy
import os
# 各種キーをセット
CONSUMER_KEY = 'xxxxxxxxxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxx'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
ACCESS_TOKEN = 'xxxxxxxxxxxxxxxxxxxx'
ACCESS_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
#APIインスタンスを作成
api = tweepy.API(auth)
print('Done!') #準備完了
# つぶやきを取得
for status in tweepy.Cursor(api.user_timeline,screen_name = "取得したユーザーのID",exclude_replies = True).items():
tw_text = status.text
tw_text = ''.join(tw_text.splitlines())
tw_text = tw_text.replace('(',' ').replace(')',' ').replace(' ','')
print(tw_text)
os.system('/home/pi/jtalk.sh ' + tw_text)
break #とりあえず最新のつぶやきのみ
#実際に動かす!
以下のコードを打つ
(env) $ python twitter.py
指定したユーザーの最新のツイートを男性の声で喋りました!
(鍵垢でも、自分がフォローしていれば喋ってくれました)
#おわりに
今回のハッカソンで指定したユーザーの最新ツイートをラズパイに喋らせることに成功したので、指定したユーザーがツイートしたらそれをしゃべるように改良を加えていきたいと思います!
読んでいただきありがとうございます!