Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@hayashi1989

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

More than 1 year has passed since last update.

はじめに

第三回研究室内ハッカソンが行われました。他のメンバーの記事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 

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

おわりに

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

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

1
Help us understand the problem. What is going on with this article?
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
hayashi1989
プログラミング初心者です。 日々精進していきたい所存でございます。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?