语音识别

  • 模型接受声音信息,输出分类信息
  • 声音在计算机里是声谱图,因此也可以使用卷积神经网络

加载预训练语音识别模型(tf官网的模型)

  • 开本地静态服务器,获取语音识别模型文件
  • 使用tfjs-models的speech-commands包加载模型
    (tfjs-models是tf官方的模型库)

进行语音识别

  • html

    1
    2
    3
    4
    5
    6
    7
    8
    <script src="script.js"></script>
    <style>
    #result>div {
    float: left;
    padding: 20px;
    }
    </style>
    <div id="result"></div>
  • js

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    // 引入tf-models库提供的语音命令npm包
    import * as speechCommands from '@tensorflow-models/speech-commands';

    //本地静态文件服务器地址
    const MODEL_PATH = 'http://127.0.0.1:8080/speech';

    window.onload = async () => {
    // speechCommands文档:
    // https://github.com/tensorflow/tfjs-models/tree/master/speech-commands
    const recognizer = speechCommands.create(
    'BROWSER_FFT', //傅里叶变换
    null,
    MODEL_PATH + '/model.json',
    MODEL_PATH + '/metadata.json'
    );

    //加载模型
    await recognizer.ensureModelLoaded();

    //显示模型能识别的语音类型
    const labels = recognizer.wordLabels().slice(2);
    const resultEl = document.querySelector('#result');
    resultEl.innerHTML = labels.map(l => `
    <div>${l}</div>
    `).join('');

    //浏览器监听语音
    recognizer.listen(result => {
    const { scores } = result;
    const maxValue = Math.max(...scores);
    //拿到分类中 可能性最大的单词
    const index = scores.indexOf(maxValue) - 2;
    //突出显示
    resultEl.innerHTML = labels.map((l, i) => `
    <div style="background: ${i === index && 'green'}">${l}</div>
    `).join('');
    }, {
    overlapFactor: 0.3, //识别频率
    probabilityThreshold: 0.9 //准确度阈值,超过0.9的准确度 就执行参数一的函数
    });
    };

效果

语音指令识别


代码仓库