インフィニットループ 技術ブログ

2014年03月19日 (水)

著者 : matsui

ゆっくりが今日の予定を教えてくれる – Raspberry Piで作るゆっくり秘書システム

matsuiです。今回はRaspberry Piを使ってゆっくり秘書システムを作ってみたいと思います。
実は以前にも似たようなものを作ったのですが、今回はRaspberry Piだけで構築できる完全版です。
また、動作に必要なソースも公開しました。
→ Raspberry Piでもゆっくりをしゃべらせてみました(ラズベリーゆっくりの構築について)

Raspberry Piとは

Raspberry Piは、もうすっかりおなじみの名刺サイズのシングルボードPCです。
みなさん割と買うだけで満足してしまっているようなので、この機会にぜひ引き出しからひっぱり出して活用しましょう。
raspberry

ゆっくりとは

ゆっくりしていってね!!!で有名なあのキャラクターです。
yukkuri-01
AquesTalkというテキスト音声合成ミドルウェアがありまして、それがゆっくりの声とされています。
以前はRaspberry Pi上でゆっくりをしゃべらせるのも大変だったのですが、今は専用の「AquesTalk Pi」というソフトが公開されていますので、今回はそれを使用します。
yukkuri_aquestalkpi
→ 株式会社アクエスト AquesTalk Pi – Raspberry Pi用の音声合成
※個人の非営利の場合は無償で使用できますが、それ以外の場合には使用ライセンスが必要です。
詳しくは上記ページをご覧ください。

使用ライセンスを購入すると、このようなライセンス証が送られてきます。
aquestalk-license

何をさせるか

今回はゆっくり秘書ということで次の2つの機能を実装してみたいと思います。
1. 出勤前にGoogleカレンダー上に登録されているその日の予定をゆっくり声でしゃべって教えてくれる
2. ゴミの日をゆっくりボイスでしゃべって教えてくれる
ゴミの日を教えてくれるということが、果たして秘書の仕事なのかはわかりませんが、とりあえず便利なのでよしとします。

AquesTalk Piのインストール

まず、「こちらのページ」からダウンロードを行います。規約に同意してDownloadボタンを押せばOKです。
ダウンロードしたらRaspberry Piに転送し、解凍します。

$ tar xvfz aquestalkpi-20130827.tar.gz

Raspberry Piにスピーカーを繋ぎ、とりあえずゆっくりボイスの動作確認しましょう。
以下のコマンドで実行すると、ゆっくり声でしゃべるはずです。

$ ./AquesTalkPi "ゆっくりしていってね!" | aplay

よく使うオプションとしては、「-s 数値」でスピード(80くらいがゆっくりっぽいかも?)、「-b」で棒読みモードになります。
棒読みの方がややゆっくりっぽい気もしますが、この辺りはお好みで。

$ ./AquesTalkPi -b -s 80 "ゆっくりしていってね!" | aplay

その日の予定を教えてもらう

PHPで動作する「gcal2txt」というプログラムを作ってみました。
まずはPHPをインストールします。

$ sudo apt-get install php5-cli

続いてGitHubからgcal2txtをcloneします。Gitが入ってなければインストールしましょう。

$ sudo apt-get install git
$ git clone https://github.com/ketaiorg/gcal2txt.git

しゃべらせたい予定のGoogleカレンダー情報を登録します。
「カレンダーの設定」ページを開き、画面下部の限定公開URLのXMLボタンを押します。
yukkuri_gcal_xml
押すとURLが表示されますので、エディタでgcal2txtを開いて、
赤い部分をuserid欄に、青い部分をmagiccookie欄に、
コピペしてセットしましょう。
yukkuri_gcal_xml2

/**
 * 対象カレンダー定義
 */
protected $calendar = array(
    array('userid' => '[赤い部分をコピペ]', 'magiccookie' => '[青い部分をコピペ]'),
);

配列になっていますので、複数のカレンダーも登録可能です。
さて、セットが終われば次のようなコマンドで予定をしゃべってくれるはずです。
(※/path/toはAquesTalkPiとgcal2txtを設置した場所に読みかえてください)

$ /path/to/AquesTalkPi "`/path/to/gcal2txt --length 1500`" | aplay

オプション「–length」はカレンダーが長すぎる場合に省略するためのものです。
よほど多くの予定の入ったカレンダー以外では必要ないものですが、AquesTalkPiは、しゃべる文字が長すぎるとエラーになってしまうためです。
問題なければcronに登録し、毎日予定を教えてくれるようにしましょう。
以下は月~金曜日の8時15分にしゃべってくれる例です。

$ crontab -e
15 8 * * 1-5 /path/to/AquesTalkPi -b -s 80 "`/path/to/gcal2txt --length 1500`" | aplay >/dev/null 2>&1

ゴミの日を教えてもらう

基本的には同じです。
GitHubから「gomi-gcal」をcloneします。

$ git clone https://github.com/ketaiorg/gomi-gcal.git

Googleにごみカレンダーを登録します。
お住まいの地域名+ゴミ+Googleカレンダーなどで検索すると、カレンダーが見つかることも多いです。
無い場合はしょうがないので、自分でカレンダーに登録しましょう。(規則性があるので大した手間ではないはずです)
私はこんな感じで作成してみました。 → サンプル
先ほどと同様にカレンダーのuseridとmagiccookieをセットします。

/**
 * 対象カレンダー定義
 */
protected $calendar = array(
    array('userid' => '[赤い部分をコピペ]', 'magiccookie' => '[青い部分をコピペ]'),
);

次のようなコマンドでしゃべってくれます。
(※/path/toはAquesTalkPiとgomi-gcaを設置した場所に読みかえてください)

$ /path/to/AquesTalkPi "`/path/to/gomi-gcal`" | aplay

朝に実行すると・・・ → 今日は燃えるゴミの日です
夜に実行すると・・・ → 明日はビン・カン・ペットの日です
のように時間帯によって、今日または明日のゴミの日の内容を教えてくれます。
こちらもcronにセットしましょう。
以下は、前日の夜22時と当日の朝8時に、なんのゴミの日かを教えてくれる例です。

$ crontab -e
0 22 * * 0-4 /path/to/AquesTalkPi -b -s 80 "`/path/to/gomi-gcal`" | aplay >/dev/null 2>&1
0  8 * * 1-5 /path/to/AquesTalkPi -b -s 80 "`/path/to/gomi-gcal`" | aplay >/dev/null 2>&1

おわりに

いかがでしたでしょうか。
ゆっくり秘書はかわいいものですので、ぜひ皆さんのご自宅にも設置してみてください。
また、他にもゆっくり秘書に任せると便利な仕事のアイディアがあれば、作ってみたいと思いますので教えてください。
raspberry_yukkuri

お知らせ

先週リリースしたiPhone向けアプリ「勇者と1000の魔王」おかげさまで順調に利用者数を伸ばしています!!
1日数分から自分のペースで進められる気楽なゲームですので、まだインストールされていない方はぜひお試しください。

勇者と1000の魔王[ドットRPG]
カテゴリ:ゲーム>ロールプレイング
価格:無料(一部有料アイテムあり)

ブログ記事検索

このブログについて

このブログは、札幌市・仙台市の「株式会社インフィニットループ」が運営する技術ブログです。 お仕事で使えるITネタを社員たちが発信します!