うちIoT

Read For Me! (v0.3)

read for me GUI

なんで作ったの?

英語(やその他の外国語)の単語や文章を覚えたい。ちゃんとスペルミスなく書き取れるか確かめたいから、誰か読んでー。

誰か身近にいてくれればいいのだが、いても発音がちょっとなあ、とか、中国語、ハングル、ロシア語などは、そもそも読める人が周りにいなかったりする。

そこで、Google Homeに読んでもらおうと思った。いろんな言語に対応しているようだし、少なくとも主要な言語はカバーされているはずだ(Google Translateで試してみればわかる)。

文や単語の入力は、毎回打ち込むとしたら、それはGoogle Translateのページを使うのとなんらかわらない。それに答えを見ながら書き取りをするようなもので意味がない。そこで、

Google Sheetsに入力フォーマットを作って、決まったセルに読んでほしい文や単語と言語を打ち込んでおき(あるいは誰かに打ち込んでもらい)、これをアプリが読みに行ってGoogle Homeに発声させる。

ができればカッコいい。それに以下のような会話をする必要がなくなるのである。

子供1:ママ読んでー。
ママ(読んであげる)
子供1:は?そんなのあったっけ?発音が変。だめじゃん。
パパ:なんだその態度は。んなら自分で録音してそれを聞け。

子供1:読んでー。
ママやパパ:ごめん、今手が離せない、後にして。
子供1:せっかくやる気になったのに。明日テストなのに。
たいていママ:だから昨日やっといたら、って言ったじゃない。
パパ:いらない紙の裏に100回書け。そのほうがはやい。

なにをするもの?

Google Sheetsに作ったフォーマットに、覚えたい文や単語と言語を入力しておきます。例えば下のように。

カラムCに文や単語、なんでもいいので読んでほしいものを記入し、カラムBに言語の指定をします。カラムDはメモです。

GSS入力画面

Read For Me!というGUIアプリを作ったので、これを開いて、

  1. Google sheetsのファイル名(あらかじめ登録してあるもの)を選びます。
  2. Load gssを押すと、ワークシート(Work Sheet、複数ある)名が読み込まれ、数が表示されます。
  3. Work Sheet名を選び、
  4. Parse sheetボタンで入力した文を読み込みます。
  5. 文の番号を選び、
  6. Read for me!ボタンを押すとGoogle Homeから文の読み上げが聞こえます。
  7. Show Sentenceにチェックを入れると、
  8. 今の文を文字で見ることができます。
read for me GUI v0.3

どういう仕組み?

read for me flow

Read For Me appがGoogle driveにあるGoogle sheetを読みに行き、指定されたファイルの指定されたワークシートにある文を取得します。この部分にはGoogle Drive APIと、それを扱うpython library, gspreadとoauth2clientを使っています。

さて、appで選ばれた文は、jsonという形式に箱詰めしてRaspberry pi(一号機)で動いているNode-REDのflowに配達されます。flowはごくごくシンプルで、

read for me flow

こんな感じです。自分でこれを作ってみてから、Node-RED経由しないで、直接Google Homeに送れないの?という疑問を持ちましたが、どうなんでしょう。今すぐわかりません。すみません。

これ読んで、を送られたGoogle HomeはGoogleのサーバーにその文を送って音声ファイルを受け取り、それを再生するのですが、その部分は図には入れませんでした。

つかっている技(わざ)

興味のある方は、ここに出てくる文や単語をGoogle検索してさらに調べてみてください。
  • wxpythonでGUIアプリケーションを作る
  • pythonからGoogle Sheetsの読み書きをする
  • Node-REDでフローを作る(POSTを受けてGoogle Homeにメッセージを伝える)
  • python programをAuto-py-to-exeでexe化する

作り方

アプリはwxpythonを使ってGUIの構築をしています。作り方を説明するとなると、それはwxpythonの説明になってしまいますので、今回はスキップします。

pythonからGoogle Sheetsを扱う方法は、参考ページを下に挙げておきます。

  • https://qiita.com/AAkira/items/22719cbbd41b26dbd0d1
  • https://towardsdatascience.com/accessing-google-spreadsheet-data-using-python-90a5bc214fd2

code

今回は省略。ごめんなさい。

使ってみて

Google Sheetsは家族で共有できるように設定したので、誰もが自分のワークシートを作って自由に使えるようになっている。どうでもいい文を入れておかしなことを言わせてみるもよし、真面目に勉強用に使うもよし。

いろいろ遊べます。

このあとの予定

いまのところイギリス英語になっている。Google AssistantのvoiceはGoogle Home Appから設定してあり、家族のだれが話しかけるのかによって、違う声が答えてくれる。しかし、今回のようにprogramからアクセスした場合、いつも同じ声のイギリス英語しか聞こえてこない。これを変える方法を見つけてさらにカスタマイズしたい。

Pythonで作ったプログラムをほかの人に配布する場合、これまでcx_freezeやpyinstallerを使ってきたが、今回auto-py-to-exeというものを見つけて使ってみた。Read For Me!自体それほど複雑でないこともあってか、一発でうまくいった。普通ならコマンドオプションや、spec(config) fileを書いて設定するところがすべてGUIでセットできてわかりやすい。しかも出来上がってくるoutput (pyinstallerでいうところのdist) が小さい。これはすごくいいことだ。Scikit-learnやmatplotlibなどを使ったものでもhookがうまくいくか試したい。

うらばなし

2018年の7月に最初のバージョンをMacOS上で作った。その後なぜだかすっかりこのアプリと仕組みの存在を忘れており、つい先日、子供の宿題のdictationを手伝って思い出した。コードを引っ張りだして走らせてみたら、いくつかmoduleが見つからない、というエラー。思い出せない。何をどうインストールした?しかもWindowsで走らせるとレイアウトが崩れる。コードを見直してレイアウトや使い勝手を修正し、google-home-notifierというものを使っていたところをNode-REDでのflowに置き換えた。あれからずいぶんコードを書いたからか、GUI構築や、関数の割り振りの段取りの悪さなど、いたるところが気に入らない。自分で書いたのに。でも、コーディングはいつでもこんな調子です。極端な場合、数日後には自分でもわからなくなるようなコードが書けてしまう。逆もあって、ずいぶん前に自分で書いたコードをみて、すげえ。なんでこんなことができた?と感心することもある。まだまだ修行の道は長い。

ABOUT ME
misson
ものづくりが趣味。頭の中でモヤモヤと渦巻くガスを形として沈殿させるのが趣味。座右の銘は:こたえは常に自分の中にある


follow us in feedly

COMMENT

メールアドレスが公開されることはありません。