tag:crieit.net,2005:https://crieit.net/tags/voicetext/feed 「voicetext」の記事 - Crieit Crieitでタグ「voicetext」に投稿された最近の記事 2019-08-24T20:15:23+09:00 https://crieit.net/tags/voicetext/feed tag:crieit.net,2005:PublicArticle/15347 2019-08-24T18:40:20+09:00 2019-08-24T20:15:23+09:00 https://crieit.net/posts/google-home-voicetext-dockerfile google-home-voicetextのdockerfileを改良する <h1 id="google-home-voicetextって?"><a href="#google-home-voicetext%E3%81%A3%E3%81%A6%EF%BC%9F">google-home-voicetextって?</a></h1> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/sikkimtemi/google-home-voicetext">google-home-voicetext</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/sikkim/items/f03df7e2db13ea7f5a2b">Google Homeを手軽に喋らせる仕組み(google-home-voicetext)を作った</a></li> </ul> <p>google homeを自発的に話すようにできる<code>google-home-notifier</code>の改良版。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/sikkimtemi/google-home-voicetext-docker">google-home-voicetext-docker</a></li> </ul> <p>作者の方がdockerfileも用意してくださっているのですが、<br /> docker-composeで立ち上げた後、コンテナにログインして環境構築をする必要があり、しょっちゅうコンテナを作り直す私にとっては使い辛かったので<strong>何とか作業を簡略/最適化できないかと思ったのが今回の趣旨</strong>です。</p> <h1 id="自発的にしゃべらせる"><a href="#%E8%87%AA%E7%99%BA%E7%9A%84%E3%81%AB%E3%81%97%E3%82%83%E3%81%B9%E3%82%89%E3%81%9B%E3%82%8B">自発的にしゃべらせる</a></h1> <h2 id="alexa vs google home"><a href="#alexa+vs+google+home">alexa vs google home</a></h2> <p>alexaはリマインダーAPIにプログラムを組んで登録するのが楽なのですが、</p> <ul> <li>alexaに話しかける</li> <li>画面からOAuth認証を行う</li> </ul> <p>などのユーザーアクションを起こさないと、APIアクセスに必要なトークンが払い出されないことがわかり、今回は実装を断念。</p> <p>その点、google homeはchromecastに用いられているライブラリを使って音声のキャストなどを行うことができるため、比較的実装が容易ということがわかりました。</p> <p>ただ、機能によってはalexaの方が優れている面もあり、一長一短というところです。</p> <h1 id="dockerfileの修正"><a href="#dockerfile%E3%81%AE%E4%BF%AE%E6%AD%A3">dockerfileの修正</a></h1> <pre><code class="dockerfile">FROM node:10.16 RUN npm update -y -g npm RUN apt-get update RUN apt-get install -y vim avahi-daemon libavahi-compat-libdnssd-dev locales RUN locale-gen ja_JP.UTF-8 RUN echo "export LANG=ja_JP.UTF-8" >> ~/.bashrc #RUN mkdir /myapps #RUN cd myapps #WORKDIR /myapps RUN git clone https://github.com/sikkimtemi/google-home-voicetext.git #RUN cd google-home-voicetext/ WORKDIR google-home-voicetext RUN npm install #RUN npm install forever -g RUN patch -uR node_modules/mdns/lib/browser.js < mdns_patch/browser.js.patch #RUN service dbus start #RUN service avahi-daemon start #VOLUME [ "/myapps" ] #CMD node file-server.js & node api-server.js </code></pre> <p>あえてコメントアウトしたところも残していますが、<a target="_blank" rel="nofollow noopener" href="https://github.com/sikkimtemi/google-home-voicetext-docker/blob/master/README.md">README</a>と比べながら照合していただけるとよいと思います。</p> <ul> <li>コンテナの中でgit cloneします。</li> <li>cloneしたフォルダに移動してnpmインストール</li> <li>npm インストール後にcloneしたソースに含まれるパッチをあてます。</li> <li>環境変数の設定はcompose側で行います。</li> <li>mdns関連のサービスの起動もcompose側のコマンドで設定します。</li> </ul> <h1 id="docker-compose.ymlの記述"><a href="#docker-compose.yml%E3%81%AE%E8%A8%98%E8%BF%B0">docker-compose.ymlの記述</a></h1> <pre><code class="yml">node-google-home: build: './speaker' #container_name: 'node' command: > sh -c "service dbus start && service avahi-daemon start && node file-server.js & node api-server.js " working_dir: '/google-home-voicetext' volumes: - ./myapps:/myapps ports: - '8080:8080' - '8888:8888' environment: - TZ=Japan - VOICETEXT_API_KEY=***** - WIRELESS_IP=192.168.***.*** - GOOGLE_HOME_IP=192.168.***.*** - WIRELESS_MODULE_NAME=en0 - VOICETEXT_SPEAKER=HARUKA tty: true restart: always </code></pre> <p>compose側では、mdns関連のサービスの起動とサーバプロセスの起動を行っています。<br /> foreverをインストールして、プロセスの維持をしようと思ったのですが、何回かmdnsサービスが立ち上がらない時があり、その場合はプロセスの再起動というよりはコンテナを破棄して再度コンテナを立上げるのが良いと判断しました。</p> <h2 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h2> <p>今回の改良ではdockerfileへの理解が十分でないというのもあり、<br /> (使っていないのですが)ボリュームのマウントがうまくいっていないという問題点も...。</p> ckoshien