Help us understand the problem. What is going on with this article?

指定したユーザーのツイートをしゃべるRaspberry Piの作り方

はじめに

第三回研究室内ハッカソンが行われました。他のメンバーの記事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・辞書音声データをインストール
$ 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を動かすスクリプトを作成していきます。

jtalk.sh
#!/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/
1. 「create an Apps」をクリック
2. 必要な項目を入力(適当で大丈夫らしい)
スクリーンショット 2020-02-12 18.07.20.png
3. 「create」をクリックし、作成したAPPの「Details」をクリック
4. 「Keys and tokens」タブを選択し、Access token & access token secret の「Generate」ボタンをクリック
5. 表示された「API key」、「API secret key」、「Access token」、「Access token secret」の4つをメモしておく
スクリーンショット 2020-02-12 17.57.33.png

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 

指定したユーザーの最新のツイートを男性の声で喋りました!
(鍵垢でも、自分がフォローしていれば喋ってくれました)

おわりに

今回のハッカソンで指定したユーザーの最新ツイートをラズパイに喋らせることに成功したので、指定したユーザーがツイートしたらそれをしゃべるように改良を加えていきたいと思います!

読んでいただきありがとうございます!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした