# 语音识别(预训练模型)

  • 什么是语音识别?

模型接受声音信息,输出分类信息

  • 声音在计算机里面是声谱图,因此也可以使用卷积神经网络

  • 使用的是 tensorFlow 官方的语音命令包

# 代码展示

import * as speechCommands from '@tensorflow-models/speech-commands';

const MODEL_PATH = 'http://127.0.0.1:8080/speech';

window.onload = async () => {
  /* 创建语音识别器 */
  const recognizer = speechCommands.create(
    'BROWSER_FFT', // 傅立叶变换
    null, // 想要识别哪些单词(null为默认)
    MODEL_PATH + '/model.json', // 自定义模型的url
    MODEL_PATH + '/metadata.json' // 自定义源信息的url(训练信息)
  );

  await recognizer.ensureModelLoaded(); // 确保识别器加载完成

  const labels = recognizer.wordLabels().slice(2); // 看一下模型能识别哪些内容
  console.log('labels', labels);

  const resultEl = document.querySelector('#result');
  resultEl.innerHTML = labels
    .map(
      (l) => `
      <div>${l}</div>
  `
    )
    .join('');

  recognizer.listen(
    // 监听函数
    (result) => {
      // console.log('result', result);
      const { scores } = result;
      const maxVal = Math.max(...scores); // 获取最大值
      const index = scores.indexOf(maxVal) - 2; // 拿到最大值的index(因为数据前两个无用截取掉了)
      console.log('labels', labels[index]);
      resultEl.innerHTML = labels
        .map(
          (l, i) => `
        <div style="background: ${i === index && 'green'}">${l}</div>
        `
        )
        .join('');
    },
    {
      overlapFactor: 0.1, // 识别频率(0-1越高识别次数越多)
      probabilityThreshold: 0.9, // 可能性的预值(高于这个预值listen的回调才会执行)
    }
  );
};

# 重点笔记

  • tfjs-models 包是 tfjs 官方的模型库,里面有各种各样的官方训练包 其中的 speech-commands 包是关于语音训练的模型 tfjs-models speech-commands

  • 语音识别器的方法

recognizer.ensureModelLoaded() // 确保识别器加载完成

recognizer.wordLabels() // 看一下模型能识别哪些内容

recognizer.listen() // 监听识别

recognizer.stopListening() // 停止识别