JavaScriptにおけるWeb音声APIを用いた音声認識
27286 ワード
WebスピーチAPIは、Webアプリに音声データを組み込むために使用されます.このチュートリアルでは、Web音声APIを使用して音声認識を実装する簡単なWebページを構築します.Web音声APIのブラウザ互換性を確認できますhere .
このチュートリアルでは次のようにします. HTMLとJavaScriptの基本的な理解. コードエディター.私は使用するVisual Studio Code . Webページを表示するブラウザGoogle Chrome or Firefox .
音声認識に焦点を合わせるために、いくつかのスターターコードを用意しました.あなたはそれをクローンすることができますfrom this repository Githubについて指示のために倉庫のREADMEに続いてください.
最後のコードについては、これを見ることができますGitHub Repository .
スターターコードでは、言語と方言の選択メニュー、音声認識を開始/停止する2つのボタン、およびトランスクリプトを表示するボックスを設定しました.使いましたBootstrap Webページのスタイルを設定します.
まず、新しいJavaScriptファイルを作成し、名前を付けます
我々が今から書くすべては、中で行きます
を作成しましょう
では、このプロパティを設定しましょう
音声認識オブジェクトは、ユーザーが話すのを止めた後に聞くのを止めることができるか、ユーザーがそれを止めるまで、それが聞くのを続けることができます.場合は、フレーズや単語を認識する場合は
中間結果はまだ最終的ではない結果です.このプロパティを有効にすると
これはユーザが話す言語です.このプロパティを設定するには、Localeコードを使用する必要があります.すべての言語がまだこの機能で利用可能であることに注意してください.
選択メニューからユーザーが選んだ言語を設定しましょう.ダイアログを選択し、その値をLanguageプロパティに使用する必要があります.
あなたのようなイベントのコールバックを提供することができます
このイベントは、ユーザーによって音声認識が開始されるときに引き起こされる.音声認識インスタンスがウェブページで聞いていることを示すコールバック関数を通過しましょう.
スターターコードでは
設定しましょう
このイベントは、ユーザによる音声認識が終了したときに発生する.ステータスを隠すコールバック関数を渡しましょう
設定しましょう
音声認識に何らかの誤りがあるとき、このイベントは引き起こされます.ステータスを隠すコールバック関数を渡しましょう
設定しましょう
このイベントは
これは、Webページの転写ボックスのHTMLコードです.中間結果は中間結果と最終結果を区別するために異なる色で着色される.
結果イベントは
コールバック関数の外部の最終転写物の変数と、コールバック関数内の中間転写体の変数を宣言しましょう.
最後に、認識を始めて停止しましょう.
スタートのOnClickプロパティを設定し、ボタンを停止して音声認識を開始したり停止したりする必要があります.
プロジェクトの配備されたバージョンを見ることができますhere .
我々は、githubリポジトリからスターターコードをクローンしました. 新しいJavaScriptファイルを作成し、HTMLファイルにリンクしました. 我々は の新しいインスタンスを作成しました いくつかのプロパティを設定します 別のイベントのコールバックメソッドを追加しました スタートのOnClickプロパティを設定し、ボタンを停止して音声認識を開始して停止します. おめでとう.🥳 あなたはそれをした.
読書ありがとう!
必要条件
このチュートリアルでは次のようにします.
起動コードのクローニング
音声認識に焦点を合わせるために、いくつかのスターターコードを用意しました.あなたはそれをクローンすることができますfrom this repository Githubについて指示のために倉庫のREADMEに続いてください.
最後のコードについては、これを見ることができますGitHub Repository .
スターターコードでは、言語と方言の選択メニュー、音声認識を開始/停止する2つのボタン、およびトランスクリプトを表示するボックスを設定しました.使いましたBootstrap Webページのスタイルを設定します.
コードしましょう
まず、新しいJavaScriptファイルを作成し、名前を付けます
speechRecognition.js
. 次に、script
アフタータグbody
タグ.Adding the
script
tag after thebody
tag will make sure that the script file is loaded after all the elements have been loaded to the DOM which aids performance.
<script src="./speechRecognition.js"></script>
さて、スクリプトファイルの中でwebkitSpeechRecognition
クラスはwindow
オブジェクト.そうでないならconsole.log
それで、それは利用できません.if ("webkitSpeechRecognition" in window) {
// Speech Recognition Stuff goes here
} else {
console.log("Speech Recognition Not Available")
}
初期設定
我々が今から書くすべては、中で行きます
if
コンディション.を作成しましょう
webkitSpeechRecognition
オブジェクト.let speechRecognition = new webkitSpeechRecognition();
プロパティ
では、このプロパティを設定しましょう
speechRecognition
オブジェクト.連続リスニング
音声認識オブジェクトは、ユーザーが話すのを止めた後に聞くのを止めることができるか、ユーザーがそれを止めるまで、それが聞くのを続けることができます.場合は、フレーズや単語を認識する場合は
false
. このチュートリアルではtrue
.speechRecognition.continuous = true;
中間結果
中間結果はまだ最終的ではない結果です.このプロパティを有効にすると
speechRecognition
オブジェクトは最終結果と共に中間結果を返します.設定しましょうtrue
.speechRecognition.interimResults = true;
言語
これはユーザが話す言語です.このプロパティを設定するには、Localeコードを使用する必要があります.すべての言語がまだこの機能で利用可能であることに注意してください.
選択メニューからユーザーが選んだ言語を設定しましょう.ダイアログを選択し、その値をLanguageプロパティに使用する必要があります.
speechRecognition.lang = document.querySelector("#select_dialect").value;
イベントとコールバック
あなたのようなイベントのコールバックを提供することができます
onStart
, onEnd
, onResult
, and onError
.オンスタート
このイベントは、ユーザーによって音声認識が開始されるときに引き起こされる.音声認識インスタンスがウェブページで聞いていることを示すコールバック関数を通過しましょう.
スターターコードでは
<p>
ステータスというIDを持つ要素Listening...
. CSSを使用して、要素の表示プロパティをNoneに設定することで非表示になります.設定しましょう
display: block
音声認識が始まるとき.speechRecognition.onstart = () => {
document.querySelector("#status").style.display = "block";
};
オンエンド
このイベントは、ユーザによる音声認識が終了したときに発生する.ステータスを隠すコールバック関数を渡しましょう
<p>
Webページの要素.設定しましょう
display: none
音声認識が始まるとき.speechRecognition.onend = () => {
document.querySelector("#status").style.display = "none";
};
エラー
音声認識に何らかの誤りがあるとき、このイベントは引き起こされます.ステータスを隠すコールバック関数を渡しましょう
<p>
Webページの要素.設定しましょう
display: none
音声認識が始まるとき.speechRecognition.onError = () => {
document.querySelector("#status").style.display = "none";
};
結果
このイベントは
speechRecognition
オブジェクトは認識からいくつかの結果を有する.これは最終結果と中間結果が含まれます.結果をそれぞれに設定するコールバック関数を渡しましょう<span>
転写ボックス内.これは、Webページの転写ボックスのHTMLコードです.中間結果は中間結果と最終結果を区別するために異なる色で着色される.
<div class="p-3" style="border: 1px solid gray; height: 300px; border-radius: 8px;">
<span id="final" class="text-light"></span>
<span id="interim" class="text-secondary"></span>
</div>
我々は、中間結果をspan
ID中間と最終結果をspan
IDファイナルで.結果イベントは
event
コールバック関数へのオブジェクト.このオブジェクトは結果を配列形式で含みます.配列の各要素にはisFinal
その項目が中間結果か最終結果であるかどうかを示す.コールバック関数の外部の最終転写物の変数と、コールバック関数内の中間転写体の変数を宣言しましょう.
let final_transcript = "";
speechRecognition.onresult = (event) => {
// Create the interim transcript string locally because we don't want it to persist like final transcript
let interim_transcript = "";
};
では、結果配列から文字列を作りましょう.結果項目が最終であるならば、ループを通してそれを走らせて、結果項目を最終的な転写物に加えなければなりません.そうでなければ、中間結果ストリングにそれを加えなければなりません.// Loop through the results from the speech recognition object.
for (let i = event.resultIndex; i < event.results.length; ++i) {
// If the result item is Final, add it to Final Transcript, Else add it to Interim transcript
if (event.results[i].isFinal) {
final_transcript += event.results[i][0].transcript;
} else {
interim_transcript += event.results[i][0].transcript;
}
}
最後に、転写値をDOMを更新しましょう.document.querySelector("#final").innerHTML = final_transcript;
document.querySelector("#interim").innerHTML = interim_transcript;
これは、onResult
イベント.let final_transcript = "";
speechRecognition.onresult = (event) => {
// Create the interim transcript string locally because we don't want it to persist like final transcript
let interim_transcript = "";
// Loop through the results from the speech recognition object.
for (let i = event.resultIndex; i < event.results.length; ++i) {
// If the result item is Final, add it to Final Transcript, Else add it to Interim transcript
if (event.results[i].isFinal) {
final_transcript += event.results[i][0].transcript;
} else {
interim_transcript += event.results[i][0].transcript;
}
}
// Set the Final franscript and Interim transcript.
document.querySelector("#final").innerHTML = final_transcript;
document.querySelector("#interim").innerHTML = interim_transcript;
};
スタート/ストップ認識
最後に、認識を始めて停止しましょう.
スタートのOnClickプロパティを設定し、ボタンを停止して音声認識を開始したり停止したりする必要があります.
document.querySelector("#start").onclick = () => {
speechRecognition.start();
};
document.querySelector("#stop").onclick = () => {
speechRecognition.stop();
};
これが最後のコードですspeechRecognition.js
:if ("webkitSpeechRecognition" in window) {
// Initialize webkitSpeechRecognition
let speechRecognition = new webkitSpeechRecognition();
// String for the Final Transcript
let final_transcript = "";
// Set the properties for the Speech Recognition object
speechRecognition.continuous = true;
speechRecognition.interimResults = true;
speechRecognition.lang = document.querySelector("#select_dialect").value;
// Callback Function for the onStart Event
speechRecognition.onstart = () => {
// Show the Status Element
document.querySelector("#status").style.display = "block";
};
speechRecognition.onerror = () => {
// Hide the Status Element
document.querySelector("#status").style.display = "none";
};
speechRecognition.onend = () => {
// Hide the Status Element
document.querySelector("#status").style.display = "none";
};
speechRecognition.onresult = (event) => {
// Create the interim transcript string locally because we don't want it to persist like final transcript
let interim_transcript = "";
// Loop through the results from the speech recognition object.
for (let i = event.resultIndex; i < event.results.length; ++i) {
// If the result item is Final, add it to Final Transcript, Else add it to Interim transcript
if (event.results[i].isFinal) {
final_transcript += event.results[i][0].transcript;
} else {
interim_transcript += event.results[i][0].transcript;
}
}
// Set the Final transcript and Interim transcript.
document.querySelector("#final").innerHTML = final_transcript;
document.querySelector("#interim").innerHTML = interim_transcript;
};
// Set the onClick property of the start button
document.querySelector("#start").onclick = () => {
// Start the Speech Recognition
speechRecognition.start();
};
// Set the onClick property of the stop button
document.querySelector("#stop").onclick = () => {
// Stop the Speech Recognition
speechRecognition.stop();
};
} else {
console.log("Speech Recognition Not Available");
}
結果
プロジェクトの配備されたバージョンを見ることができますhere .
再生しましょう
webkitSpeechRecognition
クラスはwindow
オブジェクト.webkitSpeechRecognition
クラス.continuous
, interimResults
, and language
その音声認識のインスタンス.onStart
, onEnd
, onError
, and onResult
. 読書ありがとう!
Reference
この問題について(JavaScriptにおけるWeb音声APIを用いた音声認識), 我々は、より多くの情報をここで見つけました https://dev.to/zolomohan/speech-recognition-using-the-web-speech-api-in-javascript-36b0テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol