遠位サーバーへのオーディオブロブを記録達成、その後、サーバーBaiduのAI音声認識結果は、フロントエンドに返されます
記事は、BaiduのAI音声認識でNodejs SDK
再びプレゼンテーションのバージョン、特定された結果は、前面表示に戻り、ここでは完全なフロントエンド記録され、次にオーディオオブジェクトを圧縮したBlob
BaiduのAIの音声サーバを使用して、サーバーに識別、最終的な認識結果がフロントエンドに表示するために戻りました。
サードパーティのライブラリを呼び出すBenpian Recorder.js
キャプチャする方法ライブラリを呼び出し、オーディオをローカルサーバまたはダウンロードにアップロードして、あなたがこの閲覧できますブログを、それがにアップロードされた説明に、私はに基づいて変更したサーバ、建物サーバー。これは、このブログの音声認識結果です:HTML5
WAV
PHP
Node
Websocket
あなたは、リアルタイムの音声認識を実現したい場合、私は、知りたいビューの文書情報、時間の長い期間、音声、ウェイクアップワード機能、意味解析機能、使用Android
、IOS SDK
またはLinux C++ SDK
バージョン、および私が使用しているがNodejs SDK
、サポートされていません。
-
長い60代としてライン上の声は、話を超えてエラーを返した場合
-
オリジナル記録ファイル
pcm
、wav
またはamr
フォーマット、大文字と小文字を区別しないが、使用することをお勧めしますpcm
-
録音サンプリングレートは16000チャネルシングルチャネルであります
-
北京語、英語、広東、四川方言でサポート
-
プロジェクト構造
AIは、音声認識のためのBaiduのプラットフォームを呼び出し
Nodejs SDK
、参照ドキュメントクイックスタートを、あなたはどのように呼び出しを見ることができます。まずnodejs-sdkのダウンロード、ダウンロードディレクトリはなり
speech
プロジェクトフォルダにフォルダをコピーしassets
た音声録音を保存する場所ですし、enternode
依存関係をインストールしたフォルダの場所を:NPM インストール
マイプロジェクトフォルダディレクトリ以下のように:
audio_asr_baidu ├─パッケージ - lock.json └─スピーチ ├─.gitignore ├─資産 │├─16k_test.pcm │└─recorder.wav ├─CPP │├─.gitignore │├─README.md │├─build.shを │└─main.cppに └─ノード ├─.gitignore ├─README.md ├─index.htmlを ├─main.js ├─node_modules ├─パッケージ - lock.json ├─package.json └─style.cssに
そして、中
node
のフォルダindex.html
私のクライアントファイル、main.js
私のファイルサーバ。
でmain.js
、ビルドファイルwebsocket
サーバー、最初にその依存モジュールをインストールします。
標高とS WS
次に設定:
サーバー=は( 'WS'必要ましょう).Server。 CONST WSS = 新しいサーバー({ ポート: 9001 }) // 连接服务器 wss.on( '接続'、WS => { にconsole.log( 'サーバ接続' ); }) ws.on( 'エラー'、誤差= > { にconsole.log( 'エラー:' + 誤差); }) ws.on( 'クローズ'、()=> { にconsole.log( 'のWebSocketが閉じている' ); }) }) // 断开连接 WSS .on( '切断'、WS =>'メッセージ'、MSG => { にconsole.log( 'サーバーrecived MSG:' + MSG)。 }) })
その後でindex.html
、中央:
WS =ましょう新しいのWebSocket( 'WSを:// localhostを:9001' ); ws.onopen = E => { にconsole.log( '開かサーバへの接続' )。 }
サービスを開始します。
ノードmain.js
あなたは、コンソールでこのプリントを見ることができます:
// クライアントの印刷情報: オープンに接続サーバー // 印刷情報サービス側: サーバーが接続され
クライアントの実装を記録した後、圧縮されたオーディオオブジェクトは、Blob
サーバに渡さ:
<!DOCTYPE HTML> <HTML> <HEAD> <メタ文字コード= "UTF-8"> <タイトル>シンプルRecorder.jsデモで記録、停止および一時停止</ TITLE> <メタ名= "ビューポート"コンテンツ= "幅=デバイス幅、初期スケール= 1.0 "> <リンクREL ="スタイルシート」タイプ= "テキスト/ CSS" HREF = "style.cssに"> </ head> <body> <DIV ID = "コントロール"> <ボタンID = "recordButton">録音</ button>の <ボタンID = "stopButton"無効>停止</ボタン> </ div> <p個のID = "アウト-TXT">あなたは言います:</ p> <H3>録音</ H3> <OLのid = "recordingsList"> </ OL> <スクリプトSRC = "https://cdn.rawgit.com/mattdiamond/Recorderjs/08e7abd9/dist/recorder.js"> </スクリプト> // 连接服务器 WS =ましょう新しいのWebSocketを( 'WS:// localhostを:9001' ); ws.onopen = E => { にconsole.log( '開かサーバへの接続' )。 } URL = window.URL || window.webkitURL; VAR gumStream; // getUserMedia()からのストリーム のvar REC。// Recorder.jsオブジェクト のvar入力。// MediaStreamAudioSourceNode VAR AudioContext = window.AudioContext || window.webkitAudioContext; VaRのaudioContextの VARrecordButton =のdocument.getElementById( "recordButton" )。 VAR stopButton =のdocument.getElementById( "stopButton" ); recordButton.addEventListener( "クリック" 、startRecording)。 stopButton.addEventListener( "クリック" stopRecording、); // 录音 関数startRecording(){ にconsole.log( "recordButtonをクリック" )。 VaRの制約= { オーディオ:真、 ビデオ:偽 } recordButton.disabled = 真; stopButton.disabled =偽; // 記録し、記録を開始するために許可を得る navigator.mediaDevices.getUserMedia(制約).then(機能(ストリーム){ はconsole.log( "Recorder.jsを...初期化getUserMedia()成功、作成されたストリーム、" ); AudioContext = 新しい新しいAudioContext(); gumStream = ストリーム; INPUT = audioContext.createMediaStreamSource(ストリーム); REC = 新しい新しいレコーダー(INPUT、{ NUMCHANNELS: 1 // モノ }) // 記録を開始 rec.recordを() console.log("Recording started"); }).catch(function(err) { recordButton.disabled = false; stopButton.disabled = true; }); } // 停止录音 function stopRecording() { console.log("stopButton clicked"); stopButton.disabled = true; recordButton.disabled = false; rec.stop(); gumStream.getAudioTracks()[0].stop(); //ブロブをダウンロードするためにWAV形式を作成 rec.exportWAV(createDownloadLinkを); } // メッセージ受信側サービス配信 ws.onmessage = E => { にconsole.log(e.data) のsetTimeout(() => { document.getElementById( "OUT-TXT")innerHTMLの+ =。e.data }、 3000 ); } // ダウンロードリンク作成 機能createDownloadLink(BLOB){ はconsole.log(BLOB)を、 ws.send(BLOB); VARの URL = URL.createObjectURL(BLOB); VARのAu =のdocument.createElement( 'オーディオ' ); VARリー=のdocument.createElement( 'リー' )。 VaRのリンク=のdocument.createElement( 'A' ); VaRのファイル名= 新しい日付()toISOString(); au.controls = 真; au.src = URL; link.href = URL; link.download =ファイル名+ ".WAV" 。 link.innerHTMLは、「ディスクに保存します」= ; li.appendChild(AU)。 li.appendChild(document.createTextNode(ファイル名 + ".WAV" )) li.appendChild(リンク)。 }
このように、ページがサーバーにダウンロードリンクが作成され、ファイル名の日付を記録するために、あなたがダウンロードすることを選択できますが、また、オーディオオブジェクト。
オーディオストリームを介してバックのフロントは、もはやとして保存されたファイルアップロードのでwav
バイナリ配列のストリームにオーディオフォーマットが、プロセスを、直接、Baiduの音声認識呼び出しSDK
後の符号化送信するためにした後、認識結果を返すようにする方法端、後端と、次に復号されます。
AipSpeechは=( "Baiduの-AIP-SDK"を必要としましょう).speech。 FSの聞かせて =は( 'FS'が必要です)。 サーバーましょう =が( 'WS'が必要です).Server。 CONST WSS = 新しいサーバー({ ポート: 9001 }) resTxtを聞かせて、 wss.on( '接続'、WS => { にconsole.log( '接続されたサーバ' ); CONST transTxtは =(resTxt)=> { ws.send(resTxt); } ws.on( 'メッセージ'、データ=> { にconsole.log( 'サーバーrecivedオーディオBLOB' ); //新しいコンソールを置き換えてくださいBaiduのクラウドBaiduの音声アプリケーションAPIキーと秘密鍵 のletクライアント= 新しい新 AipSpeech(0、「APIキー」、「秘密鍵」); せvoiceBase64 = 新しい新しいバッファ(データ); client.recognize(voiceBase64、 'WAV'、16000).then(関数(結果){ にconsole.log( 'オーディオファイルのローカル音声認識結果:' + JSON.stringify(結果)); resTxtは = JSON.parse(JSON.stringify(結果))。 // フロントエンドに結果 transTxt(resTxt); } 関数(ERR){ にconsole.log(ERR); }); }) ws.on( 'エラー'、エラー=> { にconsole.log( 'エラー:' + 誤差); }) ws.on( 'クローズ'、()=> { にconsole.log( 'のWebSocketが閉じられました' ); }) }) wss.on( '切断'、WS => { ws.on( 'メッセージ'、MSG => { にconsole.log( 'サーバーrecived MSG:' + MSG); }) })
これは、バックステージパス音声認識を話してフロントエンド記録の結果である、結果に使用するwebsocket
前に渡されたが、それはラベルに表示することができます。