差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 次のリビジョン両方とも次のリビジョン | ||
p5js:11.speech-recognition [2021/03/09 20:44] – baba | p5js:11.speech-recognition [2021/06/30 01:44] – [シンプルなテンプレート] baba | ||
---|---|---|---|
行 10: | 行 10: | ||
では早速スケッチしていきましょう。 | では早速スケッチしていきましょう。 | ||
- | ===== dd ===== | + | ====== シンプルなテンプレート ====== |
+ | こちらでシンプルなテンプレートを用意しておきました.[[https:// | ||
+ | * 音声認識をstopするメソッドが用意されていない | ||
+ | * continousを利用した連続音声認識だと,タイムアウトまでが非常にながく,喋る内容を順次テキスト化することが困難 | ||
+ | といった点がよろしくないため,少しこちらで改造を加えています.音声認識を利用したアプリケーション開発はこちらのサンプルからスタートすると作りやすいとおもいます. | ||
+ | * 音声認識テンプレート: | ||
+ | |||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | <file html index.html> | ||
+ | < | ||
+ | <html lang=" | ||
+ | < | ||
+ | <script src=" | ||
+ | <script src=" | ||
+ | <link rel=" | ||
+ | <meta charset=" | ||
+ | |||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | <p>by Tetsuaki Baba</ | ||
+ | < | ||
+ | <button id=" | ||
+ | <input type=" | ||
+ | |||
+ | <hr> Log | ||
+ | < | ||
+ | < | ||
+ | |||
+ | < | ||
+ | |||
+ | |||
+ | <script src=" | ||
+ | <script src=" | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | <file js sketch.js> | ||
+ | var myRec = new p5.SpeechRec(); | ||
+ | var is_recognition_activated = false; | ||
+ | |||
+ | var words = []; | ||
+ | |||
+ | function setup() { | ||
+ | // キャンバスは使わない | ||
+ | noCanvas(); | ||
+ | |||
+ | // スピーチの切れ目があったときに呼び出す関数を登録 | ||
+ | myRec.onEnd = endSpeech; | ||
+ | |||
+ | // 随時音声入力をテキスト化する際に呼び出される関数を登録 | ||
+ | myRec.onResult = parseResult; | ||
+ | |||
+ | // 連続した音声認識は行わない.プログラム内で適時音声認識のstopとstartを制御する | ||
+ | myRec.continuous = false; // no continuous recognition | ||
+ | |||
+ | // 読み上げている最中の認識途中の文字列も利用する場合 | ||
+ | myRec.interimResults = true; // allow partial recognition (faster, less accurate) | ||
+ | |||
+ | // プログラム制御用変数(true: | ||
+ | is_recognition_activated = false; | ||
+ | |||
+ | // 認識言語は日本語 | ||
+ | myRec.rec.lang = " | ||
+ | |||
+ | // start/stop のDOMボタンを押したときに音声認識切り替えを行う | ||
+ | select("# | ||
+ | } | ||
+ | |||
+ | // 認識途中随時呼び出される関数(認識途中の文字列を取得できる) | ||
+ | function parseResult() { | ||
+ | document.getElementById(" | ||
+ | document.getElementById(" | ||
+ | } | ||
+ | |||
+ | function toggleSpeechRecognition() { | ||
+ | |||
+ | // 認識ステータスを反転させる(trueならfalse,falseならtrue) | ||
+ | is_recognition_activated = !is_recognition_activated; | ||
+ | |||
+ | // 音声認識アクティベート | ||
+ | if (is_recognition_activated == true) { | ||
+ | myRec.rec.lang = " | ||
+ | myRec.start(); | ||
+ | this.html(" | ||
+ | } | ||
+ | // 音声認識を停止させる | ||
+ | else { | ||
+ | // 音声認識をとめる | ||
+ | myRec.stop(); | ||
+ | // ボタンの表示をstartにする | ||
+ | this.html(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function endSpeech() { | ||
+ | |||
+ | // 音声認識アクティベート中なら | ||
+ | if (is_recognition_activated == true) { | ||
+ | |||
+ | // 認識文字列に何も入っていなければ(タイムアウトでendSpeechになった場合) | ||
+ | if (!myRec.resultValue) { | ||
+ | myRec.start(); | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | // 認識文字列になんか入ってれば | ||
+ | if (myRec.resultString.length > 0) { | ||
+ | console.log(" | ||
+ | document.getElementById(" | ||
+ | document.getElementById(" | ||
+ | myRec.resultString + " | ||
+ | document.getElementById(" | ||
+ | console.log(myRec.resultString); | ||
+ | myRec.resultString = ""; | ||
+ | } | ||
+ | myRec.start(); | ||
+ | console.log(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | <WRAP half column> | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== 例 ===== | ||