Day20
来源:互联网 发布:互联网金融平台源码 编辑:程序博客网 时间:2024/06/06 03:54
Day20 - 语言识别系统中文指南
本文出自:春哥个人博客
作者:©黎跃春-追时间的人
简介:JavaScript30 是 Wes Bos 推出的一个 30 天挑战。项目免费提供了 30 个视频教程、30 个挑战的起始文档和 30 个挑战解决方案源代码。目的是帮助人们用纯 JavaScript 来写东西,不借助框架和库,也不使用编译器和引用。现在你看到的是这系列指南的第 20 篇。完整中文版指南及视频教程在 从零到壹全栈部落。
运行项目
$ npm install$ npm start
浏览器打开http://localhost:3000/index-FINISHED.html
效果图如下:
程序源码
HTML代码
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Speech Detection</title></head><body> <div class="words" contenteditable> </div> <style> html { font-size: 10px; } body { background: #ffc600; font-family: 'helvetica neue'; font-weight: 200; font-size: 20px; } .words { max-width: 500px; margin: 50px auto; background: white; border-radius: 5px; box-shadow: 10px 10px 0 rgba(0, 0, 0, 0.1); padding: 1rem 2rem 1rem 5rem; background: -webkit-gradient(linear, 0 0, 0 100%, from(#d9eaf3), color-stop(4%, #fff)) 0 4px; background-size: 100% 3rem; position: relative; line-height: 3rem; } p { margin: 0 0 3rem; } .words:before { content: ''; position: absolute; width: 4px; top: 0; left: 30px; bottom: 0; border: 1px solid; border-color: transparent #efe4e4; } </style></body></html>
JS代码
<script> // 根据浏览器之间的兼容性,需要同时添加浏览器前缀 window.SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; // 实例化SpeechRecognition对象 const recognition = new SpeechRecognition(); // interimResults 属性的默认值是 false ,代表语音识别器的返回值不会改变。在这个演示中,我们把它设置为 true ,这样随着我们的输入,识别结果有可能会改变。仔细观看演示,灰色的文字是临时性的,有时会改变,而黑色文本是最终结果,不会改变。 recognition.interimResults = true; // 创建p便签,附加到DOM树中 let p = document.createElement('p'); const words = document.querySelector('.words'); words.appendChild(p); // 监听recognition的result事件,获取到语音输入的文字 recognition.addEventListener('result', (e) => { const results = Array.from(e.results) // e.results中保存的是识别的结果,本来并不是数组,需要将其转换为数组,方便使用其map、join等方法。 .map(result => result[0]) .map(result => result.transcript) // 获取到每一段话,是一个数组类型 .join(''); // 将每一段话连接成字符串 // 可以动态的将其中的某一个词语换掉 const poopScript = results.replace(/good/gi, '��'); p.textContent = poopScript; // 如果当前一段输入结束了,也就是有停顿,就会新建一个p便签 if (e.results[0].isFinal) { p = document.createElement('p'); words.appendChild(p); } }); // 监听recognition的end事件,当前输入结束后,再次开始,使其一直处于输入状态 recognition.addEventListener('end', recognition.start); // 开启recognition recognition.start(); </script>
JS实现思路
- 新建一个语音识别的对象
- 开启该语音识别对象的识别服务
- 监听
result
事件,实时获取语音输入内容 - 监听
end
事件,当结束时再次开启语音识别,使其持续监听
JS源码解析
SpeechRecognition参考文档
其中监听
result
事件,根据事件返回值获取到语音输入的内容
可以看到transcript
中保存的是语音输入的内容。其中可以看到还有一个属性为confidence
,代表这段话是别的精度,越大正确率越高。
-SpeechRecognition
属性
<!--新建语音识别的对象-->var recognition = new SpeechRecognition();<!--continuous默认值为false,当continuous值为true时,表示,一句话结束后,语音识别继续识别-->recognition.continuous = false;<!--设置按照什么语言来识别-->recognition.lang = 'en-US';<!--interimResults 属性的默认值是 false ,代表语音识别器的返回值不会改变。在这个演示中,我们把它设置为 true ,这样随着我们的输入,识别结果有可能会改变。仔细观看演示,灰色的文字是临时性的,有时会改变,而黑色文本是最终结果,不会改变。-->recognition.interimResults = false;...
第20天的内容就到这里,主要学习SpeechRecognition
相关属性的使用。
源码下载
Github Source Code
阅读全文
0 0
- day20
- day20
- Day20
- day20
- DAY20
- day20-笔记
- day20 Io
- day20:Echarts02
- day20笔记
- 传智播客学习日记Day20
- 字节流(day20)
- iOS study Day20-UIView
- day20,page40,total420+295
- java学习day20
- java学习day20
- Day20-列表控件
- day20/FileDemo1.java
- day20/FileDemo3.java
- JAVA虚拟机体系结构
- mui 原生等待框显示showWaiting
- HDU
- 数组迭代要优先使用for循环而不是for...in循环
- 初学HADOOP(MAPREDUCE-WORLD COUNT/HIVE/SQOOP)
- Day20
- (转)POJ3101 Astronomy【素因子分解】【大数乘法】
- 数组二分查找
- React Native之FlexBox布局上的一些心得
- SQL 优化
- HDU1233 还是畅通工程
- Connection接口及DriverManager类
- Linux进程间通讯一--无名管道PIPE
- PayPal联合创始人 彼得·蒂尔 汉密尔顿学院毕业演讲