Raspberry Piで音声処理を実行して、特定の人(一意の識別情報など)を検出します。
オンボードプロセッサのみを使用することをお勧めします。インターネットにアクセスできないと想定できます。
また、音声処理を実行するRaspberry Piの制限は何ですか?これを自動出席マシンとして使用したい場合、どうすればよいですか?
Raspberry Piで音声処理を実行して、特定の人(一意の識別情報など)を検出します。
オンボードプロセッサのみを使用することをお勧めします。インターネットにアクセスできないと想定できます。
また、音声処理を実行するRaspberry Piの制限は何ですか?これを自動出席マシンとして使用したい場合、どうすればよいですか?
回答:
これは、私のRaspberry Piが現在専念しているメインプロジェクトなので、2セントを追加できると考えています。このプロジェクトはまだ進行中の作業であることを忘れないでください。
Raspbian OSのみでこのプロジェクトにCプログラミング言語を使用することを選択しましたが、これが私の決定と指示の一部に影響を与えた可能性があります。私が使用しているのはそれだけなので、無料のオープンソースソフトウェアのみをリストします。
インストール手順については、完全に最新のシステムを使用していると仮定します。
音声認識エンジンのオプションは次のとおりです。
Pocketsphinx-組み込みシステムで使用できるSphinxのバージョン(たとえば、ARMプロセッサに基づく)。
長所:活発に開発されており、固定小数点演算やGMM計算用の効率的なアルゴリズムなどの機能が組み込まれています。すべての処理はRaspberry Piで行われるため、オフラインで使用できます。リアルタイムの音声認識をサポートします
短所:初心者向けに設定して理解するのは複雑です。私にとっては、アプリケーションにとっては不正確すぎました。すべての処理はRaspberry Piで行われるため、少し遅くなります。
インストール手順:
SphinxbaseおよびPocketsphinxの最新の安定バージョンをダウンロードします。
$ wget http://sourceforge.net/projects/cmusphinx/files/sphinxbase/0.8/sphinxbase-0.8.tar.gz
$ wget http://sourceforge.net/projects/cmusphinx/files/pocketsphinx/0.8/pocketsphinx-0.8.tar.gz
ダウンロードしたファイルを解凍します。
$ tar -zxvf pocketsphinx-0.8.tar.gz; rm -rf pocketsphinx-0.8.tar.gz
$ tar -zxvf sphinxbase-0.8.tar.gz; rm -rf sphinxbase-0.8.tar.gz
これらのパッケージをコンパイルするには、bisonとALSA開発ヘッダーをインストールする必要があります。
注:Sphinxbaseをビルドする前に、ALSAヘッダーをインストールすることが重要です。それ以外の場合、SphinxbaseはALSAを使用しません。また、PulseAudioがインストールされている場合、ALSAは使用されないようです(私のような開発者にとっては悪いことです)。
$ sudo apt-get install bison libasound2-dev
cd
Sphinxbaseディレクトリに移動し、次のコマンドを入力します。
$ ./configure --enable-fixed
$ sudo make
$ sudo make install
cd
Pocketsphinxディレクトリに移動し、次のコマンドを入力します。
$ ./configure
$ sudo make
$ sudo make install
以下を実行して、Pocketsphinxをテストします。
$ src/programs/pocketsphinx_continuous -samprate 48000
微調整したい場合は、CMUSphinx Wikiで情報を読むことをお勧めします。
libsprec -によって開発された音声認識ライブラリ H2CO3(自分でいくつかの貢献、主にバグ修正と)。
長所:Google Speech APIを使用して、より正確にしています。コードは理解しやすい(私の意見では)。
短所:H2CO3が開発した他のライブラリ(libjsonzなど)に依存しています。開発はむらがあります。Google Speech APIを使用します。つまり、処理はRaspberry Pi自体では行われず、インターネット接続が必要です。Raspberry Piで正常に動作するには、コンパイル前にソースコードを少し変更する必要があります。
インストール手順:
libflac、libogg、およびlibcurlをインストールします。
$ sudo apt-get install libcurl4-openssl-dev libogg-dev libflac-dev
libsprecの最新バージョンをダウンロードする
$ wget https://github.com/H2CO3/libsprec/archive/master.zip
ダウンロードしたパッケージを解凍します。
$ unzip master.zip; rm -rf master.zip
これlibsprec-master
で、現在のディレクトリに名前の付いたフォルダーができました。
$ wget https://github.com/H2CO3/libjsonz/archive/master.zip
ダウンロードしたパッケージを解凍します。
$ unzip master.zip; rm -rf master.zip
これlibjsonz-master
で、現在のディレクトリに名前の付いたフォルダーができました。
cd
libjsonz-master
ディレクトリ、コンパイル、およびインストールします。
$ cd libjsonz-master
$ mv Makefile.linux Makefile
$ make
$ sudo make install
cd
うちlibjsonz-master
ディレクトリとにlibsprec-master/src
ディレクトリ。行227を編集します。
$ err = snd_pcm_open(&handle, "pulse", SND_PCM_STREAM_CAPTURE, 0);
次のことを言う必要があります。
$ err = snd_pcm_open(&handle, "plughw:1,0", SND_PCM_STREAM_CAPTURE, 0);
これは、プログラムがUSBマイクを指すためにALSAを使用するためです。
コンパイルしてインストールします。
$ mv Makefile.linux Makefile
$ make
$ sudo make install
これで、独自のアプリケーションでライブラリを使用できます。libsprec-master
例については、サンプルフォルダをご覧ください。
ジュリアス -高性能、2-パス大語彙連続音声認識( LVCSR)音声関連の研究者や開発者のためのデコーダソフトウェア。
長所:Raspberry Pi自体でほぼリアルタイムの音声認識を実行できます。標準の音声モデル形式は、他の無料のモデリングツールキットに対応するために採用されています。
短所:Spotty開発。1年以上前の最終更新です。また、認識はあまりにも不正確で、使用するには遅すぎます。長いインストール時間
インストール手順:
システムを正常に動作させるためにインストールする必要があるパッケージがいくつかあります。
$ sudo apt-get install alsa-tools alsa-oss flex zlib1g-dev libc-bin libc-dev-bin python-pexpect libasound2 libasound2-dev cvs
CVSソースからJuliusをダウンロードします。
$ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/julius co julius4
環境変数によってコンパイラフラグを設定します。
$ export CFLAGS="-O2 -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -pipe -fomit-frame-pointer"
cd
フォルダーに入れてjulius4
、次のコマンドを入力します
$ ./configure --with-mictype=alsa
$ sudo make
$ sudo make install
Juliusには、ALSADEV
マイクに使用するデバイスを指定するために呼び出される環境変数が必要です。
$ export ALSADEV="plughw:1,0"
Juliusが使用する無料の音響モデルをダウンロードします。ダウンロードしたらcd
、ディレクトリに移動して実行します:
$ julius -input mic -C julius.jconf
その後、音声入力を開始できるはずです。
独自のライブラリを作成する -私の特定のプロジェクトでは、PortAudioを介してALSAを使用してUSBマイクからオーディオを録音し、libsndfileを介してFLACファイルに保存し、処理するためにGoogleに送信する独自の音声認識ライブラリを構築することを選択しますそれ。その後、きれいに圧縮されたJSONファイルを送信して、Raspberry Piに言ったことを取得するために処理します。
長所:私はすべてを制御します(好きです)。私は多くを学びます(私は好きです)。
短所:大変な作業です。また、一部の人々は、この音声認識ライブラリを使用してRaspberry Piで実際に処理を行っているわけではないと主張するかもしれません。 私はそれを知っています。Googleは、今よりもはるかに正確にデータを処理できます。正確なオフライン音声認識オプションの構築に取り組んでいます。
音声合成エンジンのオプションは次のとおりです。
tritium-完全にCで書かれた(そしてあなたの開発した)プレミアムで高品質な無料の音声合成エンジン。
長所:非常に移植性が高く(CMake以外にビルドするための依存関係がない)、非常に小さく(見つけることができる最小のもの)、ビルドが簡単です。
短所:音声出力自体が不正確になることがあります。私は現在、自由な時間をほとんど持たない唯一の開発者であるため、多種多様な言語のサポートが不足していますが、これはプロジェクトの将来の目標の1つです。また、現時点では、コンパイル時にライブラリのみが出力され、使用可能/テスト可能な実行可能ファイルはありません。
eSpeak -Linux、Windows、およびその他のプラットフォーム向けのコンパクトなオープンソースソフトウェア音声合成装置。
長所:フォルマント合成法を使用して、多くの音声言語を小さなサイズで提供します。また、非常に正確で理解しやすいです。私はもともとこれをプロジェクトで使用していましたが、短所のために別の音声合成エンジンに切り替える必要がありました。
短所:X11に奇妙な依存関係があるため、時々途切れる場合があります。また、ライブラリは他のライブラリと比較してかなり大きくなっています。
インストール手順:
eSpeakソフトウェアをインストールします。
$ sudo apt-get install espaek
eSpeakで必要なことを言うには:
$ espeak "Hello world"
eSpeakのファイルから読み取るには:
$ espeak -f <file>
フェスティバル -一般的な多言語音声合成システム。
長所:複数の音声言語をサポートするように設計されています。Festvoxプロジェクトを使用して、新しい合成音声の構築をより体系的で文書化し、誰でも新しい音声を構築できるようにすることができます。
短所:それはC ++で書かれています(特に私にとってはもっと長所です)。また、コードベースが大きくなっているため、コードを理解して移植することは困難です。
インストール手順:
Festivalソフトウェアをインストールします。
$ sudo apt-get install festival festival-freebsoft-utils
Festivalを実行するには、読みたいテキストまたはファイルをパイプします:
$ echo "Hello world" | festival --tts
Flite -FestivalおよびFestvoxプロジェクトから派生した小さなランタイム音声合成エンジン。
長所:カーネギーメロン大学で絶えず開発中。他と比較して非常に小さいエンジン。また、コードベースが小さいため、簡単に確認できます。依存関係はほとんどありません(私にとって大きな利点であり、プロジェクトでこのエンジンを使用することにしたもう1つの理由)。
短所:音声出力自体は必ずしも正確ではありません。スピーチは非常にメタリックで人間以外の音です(他のエンジンよりも多い)。非常に多くの言語をサポートしていません。
インストール手順:
Fliteソフトウェアをインストールします。
$ sudo apt-get install flite
Fliteを実行するには:
$ flite -t "text that you want flite to say"
特定の質問への回答:
音声処理を実行するPiの制限は何ですか?
さらに深刻なことに、Raspberry Piには音声処理を処理するための十分なリソースがあります。音声処理を実行する人が何をしているかを知っている限り、Raspberry Piはそれをうまく処理できるはずです。
これを自動出席マシンに使用したいのですが、どうすればいいですか?
これらのオプションのどれも特定の人々の違いを言うほど正確ではありません。それは私が私のプロジェクトで取り組んでいるものです(そしておそらくしばらくの間)。あなたが自動出席のためのより良いオプションを探しているなら、私は顔認識を調べます。Raspberry Piの顔認識にはさらに制限がありますので、注意してください。
pocketsphinx_continuousと4ドルのサウンドカードを使用しました。
スピーチシンセを使用するときにリスニングを停止する必要があるという事実を管理するために、ミキサーへの入力ボリュームの処理にミキサーを使用しました(エンジンを停止すると認識が低下するため、CMUによって推奨されるベストプラクティスです)
echo "SETTING MIC IN TO 15 (94%)" >> ./audio.log
amixer -c 1 set Mic 15 unmute 2>&1 >/dev/null
スピーチシンセの再生時にリスニングをミュートする一致コマンドを使用
FILE: mute.sh
#!/bin/sh
sleep $1;
amixer -c 1 set Mic 0 unmute >/dev/null 2>&1 ;
echo "** MIC OFF **" >> /home/pi/PIXIE/audio.log
ミュートする適切な時間を計算するには、luaを介してsoxiを実行し、unmute.sh(mute.shの反対側)を起動から「x」秒で実行するように設定します。これを処理する多くの方法は間違いありません。この方法の結果に満足しています。
ルアスニペット:
-- Begin parallel timing
-- MUTE UNTIL THE SOUNDCARD FREES UP
-- "filename" is a fully qualified path to a wav file
-- outputted by voice synth in previous operation
-- GET THE LENGTH
local sample_length = io.popen('soxi -D '..filename);
local total_length = sample_length:read("*a");
clean_length = string.gsub(total_length, "\n", "") +1;
sample_length:close();
-- EXAMPLE LOGGING OUTPUT...
--os.execute( 'echo LENGTH WAS "'.. clean_length .. '" Seconds >> ./audio.log');
-- we are about to play something...
-- MUTE, then schedule UNMUTE.sh in x seconds, then play synth output
-- (have unrolled mute.sh here for clarity)
os.execute( 'amixer -c 1 set Mic '..mic_level..' unmute 2>&1 >/dev/null ');
os.execute( 'echo "** MIC OFF **" >> ./audio.log ');
-- EXAMPLE LOGGING OUTPUT...
-- os.execute( 'echo PLAYING: "'.. filename..'" circa ' .. clean_length .. ' Seconds >> ./audio.log ');
os.execute( './unmute.sh "'.. clean_length ..'" &');
-- THEN PLAY THE THING WHILE THE OTHER PROCESS IS SLEEPING
os.execute( './sounds-uncached.sh '..filename..' 21000')
実際に私が使用する円周率の声をつかむには:
pocketsphinx_continuous -bestpath 0 -adcdev plughw:1 -samprate 20000 \
-nfft 512 -ds2 -topn2 -maxwpf 5 -kdtreefn 3000 -kdmaxdepth 7 -kdmaxbbi 15 \
-pl_window 10 -lm ./LANGUAGE/0892-min.lm -dict ./LANGUAGE/0892-min.dic 2>&1 \
| tee -i 2>/dev/null >( sed -u -n -e 's/^.\{9\}: //p' ) \
>( sed -u -n -e 's/^READY//p' \
-e 's/^Listening//p' -e 's/^FATAL_ERROR: \"continuous\.c\"\, //p') \
> /dev/null
繰り返しますが、他の方法もありますが、この方法で私の出力が好きです。
シンセサイザーにはCepstrals fledgling piソリューションを使用しましたが、オンラインで入手することはできません。直接購入して購入を手配する必要があり、購入するには約30ドルです。結果は受け入れられますが、スピーチによって不快なクリックやポップが発生するため、RaspPiがなくなり、製品を改善したくないと同社は答えています。YMMV
音声認識は、「アイドル」時のCPUの約12%に留まり、認識のチャンクを行うと短時間スパイクします。
レンダリング時に音声の作成が約50〜80%に急増します。
プレイ/ソックスの重さはかなり重いですが、演奏するときにレンダリングされたボイスにリアルタイムのエフェクトを適用します;)
piは、不要なサービスを停止するために見つけることができるすべてのガイドを使用して大幅に削減され、完全なCLIモードで実行されます。800MHzのオーバークロック(最小)。
scaling_governorに設定:パフォーマンス
完全に動作しているとき:直射日光下で約50ºC、日陰で38ºCで動作します。ヒートシンクを取り付けています。
最後のポイント:私は実際に、このすべてのギアを「インターネット駆動型」のAIに追加して実行します。
piはこのすべてをシームレスに処理し、ネットワークオーディオをリアルタイムで再生し、オーディオを他のUnixボックスに完全にループします。等
大きなスピーチCPUオーバーヘッドの負荷を処理するために、同じ発言が2回レンダリングされないように、md5sumベースのキャッシュシステムを実装しました。(合計220 mbで約1000ファイルは、私がAIから一般的に返す発話の70%をカバーします)これは、全体のCPU負荷を下げるのに本当に役立ちます。
プレシスではこれはすべて完全に実行可能です。ただし、音声認識は、マイクの品質、言語モデル、対象の音声が元の対象視聴者にどれだけ近いか(私はen_UKの子供にen_USモデルを使用しますが、完璧ではありません)およびその他の細部の詳細のみになります努力すれば、きちんとした結果を得ることができます。
そして、記録のために、私はこれまでに一度キンドルでこれをすべて一度しました(そしてそれはcmuスフィンクスとフリットでもうまくいきました)。お役に立てれば。
はい。音声認識にはPocketSphinxを使用し、音声入力(TTS)にはFestvoxを使用し、ライン入力のあるUSBオーディオ(またはライン入力のある古いサポートされているウェブカメラ)を使用します。
Googleはこれらのソフトウェアパッケージを検索し、「Raspberry Pi」はこれを設定するための多くの例とチュートリアルを提供します。
Lenikが指摘したように、何らかの方法でデコードするには、何らかの方法でオーディオを録音するか、オーディオファイルをRaspberry Piに送信する必要があります。
まず、分類プロセスの単語セットを選択する必要があります。その後、ユーザー/サブジェクトからデータを収集する必要があります。非定常信号になります。計算コストを削減するため、または特徴抽出方法で成功率を向上させるためにデータを削減する必要があるため、アプリケーションに適した特徴抽出方法を探す必要があります。これらの方法の結果として特徴ベクトルを取得できます(平均絶対値、RMS、波形長、ゼロ交差、積分絶対値、AR係数、中央周波数、平均周波数など)。次に、knnやニューラルネットワークなどの分類方法を使用して、データを分類する必要があります。最後に、その精度を確認する必要があります。総括する:
インターネットでRPiを使用したビデオ処理プロジェクトを見たので、この分類を管理できます。
あなたは使用することができNI 6009 USB DAQ任意のアナログデータを収集するために(RPIをサポートしています)が、彼らは少し高価です。
これは、話者を認識するために役立ちます。