0

私のコードをチェックした後、wishをロードするのに7秒かかる理由が苦痛であることがわかりました。

$target_path = "uploads/";
exec("./speechdetect.sh uploads/voice.3gp > speech.results");
$myFile = "uploads/voice.3gp";
unlink($myFile);
$myFile = "voice.flac";
unlink($myFile);
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 

私のスクリプトは音声録音を取り、それをspeechdetect.sh経由でグーグルに送信します。次に、グーグルが翻訳したテキストを取り出して話すと、私のプログラムはそれに一致し、それに応じてラジオオンなどのコマンドを実行します。

どうすればこれをより速く、より効率的にすることができますか?lighttpdを使用して、ページの読み込み時間を短縮したいです。

コードのこのセクションがないPSは、私のページが352msで読み込まれます。

また、シェルコードは

#!/bin/bash
sudo rm voice.flac 
# FLAC encoded example
ffmpeg -i $1 voice.flac
curl \
  --data-binary @voice.flac \
  --header 'Content-type: audio/x-flac; rate=8000' \
  'https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&pfilter=0&lang=en-GB&maxresults=1'
4

3 に答える 3

2

時間がかかるのは「speechdetect.sh」スクリプトだと思います。したがって、可能であればシェルスクリプトを最適化するようにしてください。あなたはグーグルにリモートで接続し、データをアップロードしなければならないので、とにかく遅くなります、グーグルはデータを処理するのに少し時間がかかり、それからあなたにそれを送り返すのに少し時間がかかります。

要因は次のとおりです。帯域幅、遅延、データ処理におけるGoogleのパフォーマンス。

あなたができる最善のことは、待つことをもっと喜ばせることです。スクリプトをiframeで実行するか、可能であればAJAXを介してロードし、何らかのロードインジケーターを表示して、ユーザーが何かが起こっていることを認識できるようにします。

編集:

ffmpegは非常に遅い可能性があるため、おそらくffmpegが原因である可能性があります-起動時に大量のコードをロードします。

これを試して、スクリプトのベンチマークを行ってください。

スクリプトが実際に消費する時間を測定します。

次のようにシェルから開始します。

time ./speechdetect.sh uploads/voice.3gp > speech.results

これは次のようなものを出力するはずです:

real    0m1.005s
user    0m0.000s
sys     0m0.008s

実際の部分は実際の実行時間です(この例では1.005秒)。詳細については、manページを確認してください。

PHPスクリプトで簡単なベンチマークを作成します

$target_path = "uploads/";

$time_start = microtime(true);
exec("./speechdetect.sh uploads/voice.3gp > speech.results");
$time_end = microtime(true);

$time = $time_end - $time_start;
echo "Time elapsed: " . $time . " seconds";
// ....

googleまたはffmpegへのアップロードに時間がかかるかどうかの詳細情報を取得します。

シェルスクリプトを変更します(追加時間):

#!/bin/bash
sudo rm voice.flac 
# FLAC encoded example
time ffmpeg -i $1 voice.flac
time curl \
  --data-binary @voice.flac \
  --header 'Content-type: audio/x-flac; rate=8000' \
  'https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&pfilter=0&lang=en-GB&maxresults=1'

実行:(./speechdetect.sh uploads/voice.3gp出力をリダイレクトせずに)

示されている最初のベンチマークはffmpegのベンチマークであり、2番目のベンチマークはcurlの呼び出しからのものです。

于 2013-02-09T12:16:38.903 に答える
1

最善の策は、音声検出をローカルで行うためのツールを見つけることです。あなたはおそらくグーグルへの接続をスピードアップしたり、グーグルエンジンの動作速度を変更したりすることはできません。

于 2013-02-09T12:15:18.030 に答える
0

これは、ファイルの大きさとアップロード接続の速度によって異なります。おそらくそれ以上速くはならないでしょう。

于 2013-02-09T12:14:05.477 に答える