音声認識 - 裏打ちされた音声認識への記録のフロントエンド

遠位サーバーへのオーディオブロブを記録達成、その後、サーバーBaiduのAI音声認識結果は、フロントエンドに返されます

記事は、BaiduのAI音声認識でNodejs SDK再びプレゼンテーションのバージョン、特定された結果は、前面表示に戻り、ここでは完全なフロントエンド記録され、次にオーディオオブジェクトを圧縮したBlobBaiduのAIの音声サーバを使用して、サーバーに識別、最終的な認識結果がフロントエンドに表示するために戻りました。

サードパーティのライブラリを呼び出すBenpian Recorder.jsキャプチャする方法ライブラリを呼び出し、オーディオをローカルサーバまたはダウンロードにアップロードして、あなたがこの閲覧できますブログを、それがにアップロードされた説明に、私はに基づいて変更したサーバ、建物サーバー。これは、このブログの音声認識結果です:HTML5WAVPHPNodeWebsocket

ここに画像を挿入説明

Baiduの音声認識

あなたは、リアルタイムの音声認識を実現したい場合、私は、知りたいビューの文書情報、時間の長い期間、音声、ウェイクアップワード機能、意味解析機能、使用AndroidIOS SDKまたはLinux C++ SDKバージョン、および私が使用しているがNodejs SDK、サポートされていません。

1、要求仕様

  • 長い60代としてライン上の声は、話を超えてエラーを返した場合

  • オリジナル記録ファイルpcmwavまたはamrフォーマット、大文字と小文字を区別しないが、使用することをお勧めしますpcm

  • 録音サンプリングレートは16000チャネルシングルチャネルであります

  • 北京語、英語、広東、四川方言でサポート

  • プロジェクト構造

    AIは、音声認識のためのBaiduのプラットフォームを呼び出しNodejs SDK、参照ドキュメントクイックスタートを、あなたはどのように呼び出しを見ることができます。

    まずnodejs-sdkのダウンロード、ダウンロードディレクトリはなりspeechプロジェクトフォルダにフォルダをコピーしassetsた音声録音を保存する場所ですし、enter node依存関係をインストールしたフォルダの場所を:

    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私のファイルサーバ。

ビルド・Websocketサーバーを

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前に渡されたが、それはラベルに表示することができます。
ここに画像を挿入説明

おすすめ

転載: www.cnblogs.com/suRimn/p/11425284.html