2018年9月28日金曜日

google_home_speechのエラー AttributeError: 'NoneType' object has no attribute 'group'

ラズパイマガジン2018年8月号の記事で紹介した、Google Homeにテキストを読み上げさせるプログラム、google_home_speechが、私の環境では9月19日以降エラーで動かなくなっていることに気づきました。

エラーの内容や経緯には興味無く、解決する方法をすぐに知りたい方は、この記事の「解決方法」まで読み飛ばしても構いません。

エラー内容

curlコマンドで、「こんにちは」と喋らせようとすると、下記のようなメッセージが出力されて、処理が中断され、Google Homeは何も反応しません。

127.0.0.1 - - [27/Sep/2018 06:45:35] "GET / HTTP/1.1" 404 -Host: localhost:8000User-Agent: curl/7.52.1Accept: */*Content-Length: 26Content-Type: application/x-www-form-urlencoded

POST requestBody={"text":"こんにちは"}
**JSON**
{
    "text":"\u3053\u3093\u306b\u3061\u306f"
}
get speech data for こんにちは(ja)
Traceback (most recent call last):
  File "/usr/lib/python3.5/socketserver.py", line 313, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python3.5/socketserver.py", line 341, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python3.5/socketserver.py", line 354, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python3.5/socketserver.py", line 681, in __init__
    self.handle()
  File "/usr/lib/python3.5/http/server.py", line 422, in handle
    self.handle_one_request()
  File "/usr/lib/python3.5/http/server.py", line 410, in handle_one_request
    method()
  File "./google_home_speech.py", line 105, in do_POST
    do_speech(text, language)
  File "./google_home_speech.py", line 66, in do_speech
    tts.save(speech_filename)
  File "/home/pi/.local/lib/python3.5/site-packages/gtts/tts.py", line 247, in save
    self.write_to_fp(f)
  File "/home/pi/.local/lib/python3.5/site-packages/gtts/tts.py", line 187, in write_to_fp
    part_tk = self.token.calculate_token(part)
  File "/home/pi/.local/lib/python3.5/site-packages/gtts_token/gtts_token.py", line 28, in calculate_token
    seed = self._get_token_key()
  File "/home/pi/.local/lib/python3.5/site-packages/gtts_token/gtts_token.py", line 62, in _get_token_key
    a = re.search("a\\\\x3d(-?\d+);", tkk_expr).group(1)
AttributeError: 'NoneType' object has no attribute 'group'

Googleのテキスト読み上げサービスを使って音声ファイルを取得するgTTSパッケージ配下でエラーを出しているようです。何度やっても同じエラーで失敗しました。

エラーが発生しているのは私だけ?

数ヶ月にわたって安定して動いていたのに、急に全く動かなくなったのは、Googleのテキスト読み上げサービス側に何か変更があったのが疑わしいです。その場合、同じパッケージを使っている他の人にも影響があるはず。gTTSパッケージのgithubサイトのissuesを見ると、案の定、私と同じ時期に同じエラーを報告している人が複数いることがわかりました。

https://github.com/pndurette/gTTS/issues/138
https://github.com/pndurette/gTTS/issues/60

ソースのここを直したら良いなどの情報が見つかりますが、すでに本家のパッケージがアップデートされているため、パッケージのアップデートで解決するようです。おそらくもともとあった問題が、Google側になんらかの変更があったことで顕在化したのだと想像します。

アップデートが必要なパッケージはgTTS-tokenです。バージョン1.1.1が問題あり。1.1.2で解決されています。インストールされているパッケージはpip3 freezeで確認できます。

パッケージのバージョン

問題発生時


$ pip3 freeze

beautifulsoup4==4.6.0

bs4==0.0.1

certifi==2018.4.16

chardet==3.0.4

click==6.7
cryptography==1.7.1
gTTS==2.0.0
gTTS-token==1.1.1
idna==2.7
keyring==10.1
keyrings.alt==1.3
netifaces==0.10.6
protobuf==3.6.0
pyasn1==0.1.9
PyChromecast==2.2.0
pycrypto==2.6.1
pygobject==3.22.0
python-apt==1.1.0b5
pyxdg==0.25
requests==2.19.1
SecretStorage==2.3.1
six==1.11.0
urllib3==1.23
zeroconf==0.20.0

問題解決後 


$ pip3 freeze

beautifulsoup4==4.6.0

bs4==0.0.1

certifi==2018.8.24

chardet==3.0.4

click==6.7
cryptography==1.7.1
gTTS==2.0.0
gTTS-token==1.1.2
idna==2.7
keyring==10.1
keyrings.alt==1.3
netifaces==0.10.6
protobuf==3.6.0
pyasn1==0.1.9
PyChromecast==2.2.0
pycrypto==2.6.1
pygobject==3.22.0
python-apt==1.1.0b5
pyxdg==0.25
requests==2.19.1
SecretStorage==2.3.1
six==1.11.0
urllib3==1.23
zeroconf==0.20.0

解決方法

google_home_speechをインストールしたディレクトリで、下記のコマンドでgTTS-tokenパッケージをアップデートしてください。
pip3 install gTTS-token --upgrade

アップデートが完了したら、google_home_speechを再起動してください。

2018年7月9日月曜日

ラズパイマガジン2018年8月号に執筆記事が掲載されました

本日発売のラズパイマガジン2018年8月号の特集4「ラズパイでAIスピーカーをもっと賢く」のPert2 、「塾に着いた」を音声でお知らせスマホの位置情報からGoogle Homeで(P62〜)です。



Codyl ConnectのWebHookコネクターを使って、Raspberry Piを経由してGoogle Homeから音声通知をしています。是非ご覧ください。一般書店で購入可能です。また、Amazonなど、インターネットショッピングでもお求めになれます。上の表紙イメージをクリックするとAmazonの商品紹介のページに飛べます。

Codyl Connectを利用していますので、記事では、子供のスマートフォンの位置情報を契機にしていますが、特定のメールを受信したり、Twitterでダイレクトメッセージを受信したりなど、自分でいろいろな条件を組み合わせることもできます。

ラズパイマガジンの記事のリンクからこのブログを訪問してくださった方へ


記事をお読みいただきありがとうございました。記事はいかがでしたか?感想やコメントなどありましたら、下のコメント欄からお知らせいただけると幸いです。また、本ブログでもいろいろと具体例を紹介していきますので、今後とも、ときどき訪問してみてください。

2018年6月8日金曜日

今年もバケツ稲作の定点観測やってます


Codyl Connectを使って、

  • ラズパイカメラで写真撮影
  • Google Driveにアップロード
  • FaceBookに投稿


毎日自動で動いています。



2017年10月17日火曜日

イベントウォークのステート名

今日のCodyl Connectのアップデートで、イベントウォークのステート名に自分の好きな名前がつけられるようになったので、早速使ってみました。

これまでは例えばstate2のような、自動的に採番されたステート名が勝手に付けられ、変更できなかったのですが、自分で名前を変更できるようになったので、どういう処理をするステートかがわかる名前をつけることができます。

「ラズパイ写真をLINEに通知」のシナリオで実際にやってみます。



state2をwait_for_photo
state5をsave_to_googledrive
state8をnotify_via_LINE

という名前にそれぞれ変更してみました。これだけでも、イベントウォークの見通しがずっと良くなったと感じます。

シナリオ一覧画面では、実行中のステート名が表示されます。ここでも変更後のステート名が表示されますので、今、イベントウォークのどこを実行中かを把握しやすくなりました。


ステートにコメントを追加することもできます。wait_for_photoステートに「ラズパイカメラからの写真データ受信を待ち合わせ」というコメントを追記してみました。追加したコメントはマウスオーバーで表示されます。


自分でイベントウォークをあれこれ編集する人には、とても便利になりました。




2017年7月14日金曜日

iPhoneのホーム画面にConnectのボタンを配置

本ブログでは、自宅のPCを外出先からボタン一つで起動したり、外出先からHDDレコーダーを起動する方法を紹介しました。また、Connectには、ボタン一つで定型メールを送ったり、次の予定を通知したり、自宅までの経路を通知したり、現在位置の近くのお店を検索したりといったことが簡単にできるテンプレートが用意されています、。

この便利なConnectのボタンをiPhoneのホーム画面に配置する方法を紹介します。



これで、Connectアプリを起動してボタンをタップするという2アクション必要だったのが、ホーム画面のボタンをタップするという1アクションでできるようになります。

※この機能を使うためにはiPhoneアプリの0.0.6以降が必要です。それより古いバージョンをお使いの方は、AppStoreから最新版を入手してください。また、Android版にはまだこの機能はありません。


早速やってみましょう。例として、Connectの青ボタンをiPhoneのホーム画面に配置する手順を紹介します。


配置手順

  • Connectアプリを起動します。
  • 左上のハンバーガーメニューをタップします。
  • 「設定」を選びます。
  • 「青ボタンをホーム画面に追加」をタップします。

  • 画面下の中央のアイコンをタップします。


  • 「ホーム画面に追加」をタップします。
  • 「青ボタン」と書かれているところを、わかりやすい名前(例:「PC起動」)に変更します。この名前がホーム画面に表示されます。
  • 右上の「追加」をタップします。
  • ホーム画面に青ボタンのアイコンが表示されます。

完成

以上で完成です。ホームボタンからこのアイコンをタップすると、自動的にConnectアプリが起動して、ボタンが押されて、シナリオが動作し、この例の場合はPCが起動します。是非お使いください。

2017年7月4日火曜日

環境センサーログ6月分

7月になったので、ラズパイとCodyl Connectで自動的に蓄積された6月分の環境センサーログを振り返ってみます。グラフはクリックして拡大してご覧ください。


 全データを一つにまとめたグラフです。気圧が低くて湿度が高いのが6月21日頃と6月26日頃なのが読み取れます。天気が悪かったのかなと思って調べてみると、6月21日は雨、26日は曇りだったようです。


照度センサーだけのグラフです。グラフからはわかりにくいですが、生データをみると、夜更かししているのがバレてしまいます。


気温。最低気温が右肩上がりです。暑くなってきました。


湿度。月の後半は高いですね。


気圧。天気と相関が高そうです。

この記事のグラフは、日経Linux 2017年7月号およびラズパイマガジン2017年8月号に掲載された記事の「Case2」の構成で自動的に作成しました。






生データが入っているGoogleスプレッドシートは「リンクを知っている全員が閲覧可」になっていますので、興味がある方は以下のリンクからご覧ください。

センサーログ2017年06月



2017年6月29日木曜日

バケツ稲作定点観測アニメーション

バケツ稲作のRasbperry Piカメラの定点観測を始めて約3週間が経過しました。
残念ながら最初の稲はダメになってしまいましたが、次の稲は今の所すくすくと成長しています。発芽時期が遅かったので、秋までに実ってくれるかどうか心配です。

折角定点観測しているので、写真をつなげてアニメーションにしてみました。

ダメになった最初の稲

雨が降ったり、藻が湧いたり、意外と変化に富んでいますね。


次の稲

こちらはまだ数日分しか写真がありませんが、着実に成長している様子がわかります。また来月あたりにもアニメーション作ってみようと思います。青々と成長した姿がお見せできるといいのですが。



ラズパイでLet's Encryptの証明書更新に失敗

ラズパイを自宅用の各種サーバー(DNS、メール、ウェブ他)として使っています。httpsのサーバー証明書の発行・更新にはLet's Encriptを使っています。今日たまたま証明書を更新しようとすると下記のエラーに陥りました。何度やっても失敗します。 ma...