監視カメラの完成形に向けた検討




■監視カメラの完成形に向けた検討

これまで、

ブラウザから操作できるライブ(監視)カメラを作る!

で、元々やりたいと思っていた事はほぼ達成できた。

ここで終わってもよい、と思えるレベルではある。

が、「ほぼ」といったのは、まだ実現したい機能があるから。

それは、ブラウザとラズパイ間で音声通信をすること。

具体的には、

・スマホ(ブラウザ)に『おーい』とか声を掛ける
・その音声をラズパイから出す
・ラズパイからの音声をひろう
・ひろった音声をスマホ(ブラウザ)から出す

と言う形で、ラズパイとブラウザで会話できるようにする機能。

よくよく考えてみると、結局ビデオチャットを実現できればよい。

が、ちょっと調べて見たところ、諸々難点もありそう。

ということで、他の方法についても考えてみた。

現時点で、どの方法で実現しようか、迷っている。

このため、まずは自分の頭の整理もかねて、ちょっとまとめてみる。

今考えている実現方法は以下の通り。

  1. 録音済音声の再生
  2. Text 送信と読み上げ
  3. 発話の Text 化とその送信、及び読み上げ
  4. ビデオチャットの実現

以下、各々について概要を記載する。

・録音済音声の再生

これは、

・予め喋りたくなるような音声を録音しておく
・録音したファイルをラズパイに格納しておく
・ブラウザ上に、録音済ファイルの再生ボタンを配置する
・ブラウザ上のボタンを押すと、録音済ファイルが再生される

と言う形で、こちらの操作に合わせて発話させるというもの。

利点としては、

・現状の知識だけで実現出来る可能性が最も高い

があげられる。

多分おそらく、

・引数に応じて音声ファイルを再生する python コードを書く
・ブラウザ上のボタンから python コードを呼び出す

という、現時点で実現出来ていることをちょっと変更するだけで出来そう。

一方、欠点としては、

・ラズパイからの音声ストリーミング実現が必要
・任意の発話が出来ない

となる。

前者は ffmpeg などを使えば実現できる可能性は高い。

一方、後者をどうとらえるか。

やりたいことを実現する、と言う意味では、最悪これでもよい。

でもやっぱり『任意の発話ができない』というのは引っかかるなー。

・Text 送信と読み上げ

次に考えられるのは、任意の発話を実現する方法。

その一つとして、

・ブラウザからテキストを入力する
・入力されたテキストをラズパイに送る
・ラズパイ側で入力されたテキストを自動音声で発話する

というものが考えられる。

この方法の利点は、

・任意の発話を実現できる

というものであり、欠点は

・ラズパイからの音声ストリーミング実現が必要
・ラズパイ側でテキストの自動発話機能が必要
・ブラウザにテキストを入力する必要がある
・声が自分の声でなくなる

ということがあげられる。

音声ストリーミングは先ほど同様で ffmpeg で実現出来そう。
テキスト読み上げに関しては、

RaspberryPiを音声合成でしゃべらせよう
http://jellyware.jp/kurage/raspi/raspi_speech_synthesis.html

を参考にすれば出来そうな気がする。
*これはこれで別途実現してみたいなぁ。

ただ、ブラウザにテキストを入力する必要があるのがちょっとねー。

キーボード入力は全く苦にならないが、スマホはどうも。

これだからおっさんは困る、って感じだが、時間が超かかる。

なので、リアルタイム性が著しく落ちてしまう。

そこが一番のネックかなー。

最後の声に関しては、まぁそこまでこだわりはないっちゃーない。

ひっかかる、っちゃー引っかかる。

そんな感じ。

・発話の Text 化とその送信、及び読み上げ

で、次に考えたのが、

『じゃぁ発話を自動的にテキストにしてしまえばよくね?』

ということ。

つまり、

・スマホ(ブラウザ)に向かって喋る
・ブラウザ側で発話内容をテキスト化する
・テキスト化した内容をラズパイに送る
・ラズパイ側でテキストから音声に変換する

という形。

これだと、さっきの

『テキスト入力に時間がかかっちゃう問題』

は解決される。これが一番の利点。

欠点は、前のものと同様、

・ラズパイからの音声ストリーミング実現が必要
・ラズパイ側でテキストの自動発話機能が必要
・声が自分の声でなくなる

というのに加え、

・ブラウザ側での音声テキスト化

が必要になってくる。

ただ、これに関しては、こちらのサイト

ブラウザからの音声入力を認識してテキスト化する (Web Speech API)
https://qiita.com/inouet/items/2c9e218c05f547bb6852

にあるように、Web Speech API なるものを使えば出来そう。
*そう簡単かどうかは別として。

現状 Chrome しか対応していない模様だが、

私の場合、スマホは Android なので問題ないはず。

やってみるか!?

・ビデオチャットの実現

多分これが最も素直で早い方法。

WebRTC という仕組みを使えば、ビデオチャットが実現出来る模様。

この方法の利点は、

・実はやりたいことそのものであること

ということであろう。
*ラズパイ側に表示させる必要はないが。

一方、欠点としては、

・意外と情報量が少ない
・ラズパイ側でも多分ブラウザ立ち上げが必要

ということ。

前者はとりあえずトライしてみないとどうしようもないか。

後者が結構問題。

実現するには、

・raspberry pi の起動時にブラウザを立ち上げる
・立ち上げたブラウザで自動的に WebIOPi にアクセスさせる

が必要だが、多分これは頑張ればいけると思う。

前者は shellscript を作り、

/etc/rc.local

等に記載でいけるだろうし、後者も

ホームページを WebIOPi のページに設定

でいけそう。

が、問題は、

立ち上げっぱなしにするとすぐ固まる

ということ。

今現在、raspberry pi 3 model B がうちのメインマシン。

消費電力が少ないこともあり、立ち上げっぱなしにしている。

が、ちょっと油断して、

・ブラウザのタブを複数枚開いた状態で放置

すると、メモリスワップを起こしまくっているのか、固まる。

時と場合によっては、タブ 1 枚だけでも固まる。

なので、これをやるとラズパイが固まりそうで怖い。

うーん、どうしようかなぁ・・・。

ということで、色々検討しているのだが、現状で気になることがある。

それは、

『ラズパイのイヤホンジャックはノイズがひどい』

ということ。

どうもよく知られた状況のようで、色々なサイトで書いている。

これを受け、私も久々にイヤホンさして聞いてみた。

root@raspi-03:~/# amixer cset numid=3 1

としてオーディオ出力をイヤホンジャックに切り替えた上で、

root@raspi-03:~/# aplay /usr/share/sounds/alsa/Front_Center.wav

でテスト wav ファイルを再生したのだ。

本来であれば、

『フロント、センター』

という音声が聞こえるはず。

が、実際には耳をつんざくほどの雑音で何も聞こえない状態。

基板自体の古さの影響もあるのかもしれないが、ちょっと使えない。

USB オーディオなら綺麗に音が出せるようだが、

どれもそこそこ大きかったり、高かったりする。

ラジコン戦車にしたときに載せられるサイズじゃないと、厳しい。

ということで、とりあえずビデオチャット化は先送りかな。

ラズパイ側の音声取得に関しては、

IC レコーダーを作る!

で実現はできているので、とりあえず、

・音声ストリーミングまでは実現
・その後はラジコン戦車化を先にやる
・その出来をみて、スピーカーどうするか考える

という形で進めるかな。




Copyright (c) 2017 Webmaster of this site All Rights Reserved.
カテゴリー: ブログ, ラズパイで電子工作 タグ: , , パーマリンク

コメントを残す

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.