语音识别
- 模型接受声音信息,输出分类信息
- 声音在计算机里是声谱图,因此也可以使用卷积神经网络
加载预训练语音识别模型(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的准确度 就执行参数一的函数
});
};