気の向くままに辿るIT/ICT/IoT
webzoit.net
IoT・電子工作

ラズパイ3B+自作スマートスピーカーにニュース読み上げ機能追加

ウェブ造ホーム前へ次へ
サイト内検索
カスタム検索
Raspberry Piって?

ラズパイ3B+自作スマートスピーカーにニュース読み上げ機能追加

ラズパイ3B+自作スマートスピーカーにニュース読み上げ機能追加

2018/12/28

 以前、作って運用しつつもブラッシュアップ中のRaspberry Pi 3 Model B+とJulius、Open JTalkベースの自作スマートスピーカーがあります。

 現状、主な機能は、

 ちなみにPC/Debianにも自作スマートスピーカー機能を搭載してみていますが、この自由度は、自作スマートスピーカーのメリットかも。

ニュース読み上げ

 今回は、これらに加え、ニュース読み上げ機能を追加してみました。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install python3-pip
$ pip3 install feedparser
$ sudo pip3 install feedparser
$ chmod u+x get_yahoo_news.py
$ cat get_yahoo_news.py
#!/usr/bin/env python3
# coding: utf-8
 
import feedparser
import os
 
rss_url = "https://news.yahoo.co.jp/pickup/rss.xml"
 
yahoo_news_feed = feedparser.parse(rss_url)
 
title = ""
for entry in yahoo_news_feed.entries:
  title = title + " " + entry.title
 
f = open('/home/xxx/tmp/input.txt', 'w')
f.write(title)
f.close()
 
res = ""
try:
  res = os.system("open_jtalk -m /usr/share/hts-voice/mei/mei_happy.htsvoice -ow $HOME/tmp/output.wav -x /var/lib/mecab/dic/open-jtalk/naist-jdic $HOME/tmp/input.txt && aplay $HOME/tmp/output.wav && rm $HOME/tmp/output.wav")
except:
  print ("Error.")
print (res)
$

 無料のニュースAPIでめぼしいものってないな...という中、Yahoo! JAPAN デベロッパーネットワークでニュースもとれそうだった為、アプリケーションIDも取得したものの、ニュース取得クエリーがイマイチわからないなと思っていた矢先、Yahoo!ニュース RSSリストを発見。

 そうだよAPIにこだわらなくてもRSSって手もあるじゃん...。

 っていうか、リンク先にある通り、RSSならニュースソースは、めっちゃ豊富、どれにしようか悩ましいほど。

 というわけで、とりあえず、Yahoo!ニュース・トピックス - 主要RSSからタイトルを取得・加工、Open JTalkで読み上げるpythonスクリプトを作成することにしました。

 スマートスピーカーで機能させるなら、$HOME部分は、/home/xxxにしておいた方がよいかも。

 詳細はリンク先に譲りますが、もちろん、独自辞書に適切なワードを登録後、必要に応じてエンコード変換、スピーカー用自作スクリプトに追記後、Julius&スピーカー用自作スクリプトの再起動などを要します。

 メイさんトークだと記事によっては、聞き取りづらいものもありますが、とりあえず。

追記

 構成ファイル変更の反映については、systemd/systemctlならsystemd自動起動設定参照。

2018/01/18

 feedparserは、というか、pip/pip3 installは、一般ユーザーでもできますが、systemdなどで自動起動する際、自前スクリプトなどの実行においてsuしない場合、root起動となるので、その可能性があるなら、sudoなど管理者権限でインストールしておく必要があります。

 自身は、当初一般ユーザーでfeedparserを入れており、他方、ある日、.serviceファイルから自前スクリプトをsuして一般ユーザーとして呼び出していたのをsuせずにroot起動に変更しました。

 これにより、一般ユーザー環境には入っていたfeedparserが、root環境に入っていない状況となり、結果、自前スマートスピーカーでこのYahoo!ニューススクリプトを解析できず、応答しないという状況に。

 端末で実行していれば、エラーが出力され一目瞭然ですが、IoTデバイスとして実装してしまうと原因を見つけにくくなるため、要注意です。

関連リンク

ウェブ造ホーム前へ次へ