Unity 讯飞实时语音转写(三)—— 分析转写结果
目录
Unity 讯飞实时语音转写(一)—— 使用WebSocket连接讯飞语音服务器
Unity 讯飞实时语音转写(二)—— 接收转写结果
Unity 讯飞实时语音转写(三)—— 分析转写结果
(应该没有后续了)
说在前面
这段时间一直在忙其他事情,所以语音识别的工作暂时交接到了同事手中,今天同事将后边的工作完成了,我就把源代码要了过来,也在此做一下记录。
分析结果如下:
上面是原文,下面是解析语音后的结果。
这个是加上了热词高亮的样子
正文
一、连接字符串
在上一篇文中说到,我们已经可以得到讯飞返回给我们的转写结果,只不过是某种格式的json字符串,可读性差,那么就需要我们将该json字符串中有用的字段提取出来。
/// <summary>/// 获取识别并返回字符串/// </summary>/// <param name="data">所获取的识别的Json字符串</param>/// <returns>所识别的连贯的一句话</returns>void AnalysisResult(string data){Data result = JsonUtility.FromJson<Data>(data); // 等效于 JsonConvert.DeserializeObject<Data>(data)StringBuilder stringBuilder = new StringBuilder();//Debug.Log(result.cn.st.rt[0].ws.Length);for (int i = 0; i < result.cn.st.rt[0].ws.Length; i++){//******只有w字段有用,将其提取出来即可******stringBuilder.Append(result.cn.st.rt[0].ws[i].cw[0].w);}string _thisType = result.cn.st.type;string testing = stringBuilder.ToString();//Debug.Log(stringBuilder + "***" + _thisType);//type 结果类型标识 0-最终结(即这句话说完了);1-中间结果(即这句话没说完,下一句转写结果可能推翻前面的内容)if (_thisType.Equals("0")){endText = endText + testing;_text.text = endText;}else{_text.text = endText + testing;}}
这样我们就能得到一段连续的,可读性非常好的一句话。
二、个性化热词
下一步我们想要能够在转写的结果中找到一些热词,这些热词可以是当前流行的,或是某个行业的(金融、游戏等等),也可以是我们自定义的一些热词。
那如何设置自定义热词呢,讯飞官方已经给我们提供了一些接口。
打开讯飞开放平台,以此找到:语音识别-实时语音转写-个性化热词,然后按照要求填写热词,然后保存热词即可。
官方要求:
热词配置格式:每行一句热词(2000行以内,每行不多于10个字),以回车键隔开。
热词内容要求:限UTF-8 编码中文字符,不能有数字和字母。
需要注意的是中英文都是各占一个字符,比如hologarment是11个字符,就不能作为热词,可以拆分成holo,garment两个关键词。
三、热词筛选
有了热词后,接下来就是如何在程序中识别热词,并高亮显示热词。
- 首先在工程中新建一个txt文档,然后将网站上的热词保存进去。之后让Unity以文本资源的形式读取成字符串。
void Start(){path = Application.streamingAssetsPath + "/hologarment.txt";ReadText();}
- 然后按行读取文本,并存储到一个字符串中
public void ReadText(){string line;using (StreamReader stream = new StreamReader(path)){while ((line=stream.ReadLine())!=null){//Debug.Log(line);keyWord.Add(line.Trim());//keyWord就是热词的集合readText.text = readText.text + "\n" + line;}}}
- 识别热词算法如下:
/// <summary>/// 关键词标识/// </summary>/// <param name="content">待处理文本</param>/// <param name="keyWord">关键字集合</param>/// <param name="befordLabel">关键词前加入string</param>/// <param name="afterLabel">关键词后加入</param>/// <returns></returns>public string SclectKeyWord(string content,List<string> keyWord,string befordLabel, string afterLabel){char[] charArr = content.ToCharArray();List<string> keyArr = keyWord;List<char> listArr = new List<char>();int matchCount = 0;string buffWord = "";for (int i = 0; i < charArr.Length; i++){matchCount = keyArr.Where(r => r.StartsWith(buffWord + charArr[i].ToString())).Count();if (matchCount == 0){if (buffWord.Length > 0){if (keyArr.Contains(buffWord)){listArr.AddRange((befordLabel + buffWord + afterLabel).ToCharArray());}else{listArr.AddRange(buffWord.ToCharArray());}buffWord = "";matchCount = keyArr.Where(r => r.StartsWith(buffWord + charArr[i].ToString())).Count();if (matchCount > 0){buffWord += charArr[i];}else{listArr.Add(charArr[i]);}}else{listArr.Add(charArr[i]);}}else{if (matchCount == 1){if (keyArr.Contains(buffWord + charArr[i])){listArr.AddRange((befordLabel + buffWord + charArr[i] + afterLabel).ToCharArray());buffWord = "";}else{buffWord += charArr[i];}}else{buffWord += charArr[i];}}//收尾判断if (i == charArr.Length - 1){if (keyArr.Contains(buffWord)){listArr.AddRange((befordLabel + buffWord + afterLabel).ToCharArray());}else{listArr.AddRange(buffWord.ToCharArray());}}}return string.Join("", listArr);}
- 使用Unity的富文本红色高亮显示热词
public string SetKeyWordColor(string contont){string resutl= SclectKeyWord(contont, keyWord, "<color=#FF0000>", "</color>");return resutl;}
至此,功能暂时告一段落。
这是我们老板的一段演讲词,我们以这段话为例
可能有小伙伴发现并非所有的热词都被识别出来了,表明热词识别算法有待优化,以后有时间再搞吧。。。
三、示例工程
考虑了一下,还是附上完整的工程文件吧,希望可以帮助正在测试该功能的小伙伴们。加油哦!
如何测试
- 下载后解压工程,Unity打开工程(我使用的是Unity 2019.4.9f1,需要Crack的同学可以看下我这篇文章)
- 找到脚本VisualCommunication.cs,在166,167行修改appid,appkey为你自己项目的对应值
- 启动工程,点击“开始转写”,然后对着麦克风说话;说完后点击“结束转写”,或者直接关闭程序都行,讯飞官方会在15s内没有接到转写请求时,自动关闭WebSocket连接,不用担心时长被意外耗尽
转载注明出处!!!
Unity 讯飞实时语音转写(三)—— 分析转写结果相关推荐
- Unity 讯飞实时语音转写(二)—— 接收转写结果
目录 Unity 讯飞实时语音转写(一)-- 使用WebSocket连接讯飞语音服务器 Unity 讯飞实时语音转写(二)-- 接收转写结果 Unity 讯飞实时语音转写(三)-- 分析转写结果 正文 ...
- 讯飞实时语音转写 python3.6.1 可完美运行 解析返回的json字符串 输出所获语音文字
百度语音识别对录音要求较高(可能是我的问题,sdk和在线api都试过了(滑稽保命)),失败后选择讯飞语音,官方提供的文档是python2版本的 ,经过修改后可在python3中运行 ,解析返回的jso ...
- 讯飞智能语音鼠标G50:AI语音、转写翻译、记录截图一键搞定!
随着互联网的发展,智能鼠标已经成为我们生活和工作中不可或缺的组成部分.然而,鼠标滚轮异响.按键失灵.驱动难用.手感不合适等一系列问题仍时有发生,所以选择一款智能鼠标尤为重要,它不仅可以提高我们的工作效 ...
- 讯飞离线语音命令词识别
讯飞离线语音命令词识别 强烈推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来! 网址:http://www.captainbed.net/yancyang ...
- Android 讯飞离线语音听写/离线语音识别SDK
平台 Android + 讯飞离线语音SDK SDK包 下载路径及方法见讯飞官方SDK文档: 离线语音听写 Android SDK 文档 # 在开发者控制台, 可以直接下载SDK. SDK包中的文件结 ...
- Unity接讯飞在线语音API
本文意在讲解如何利用讯飞官方提供的API通过讯飞服务实时的进行文字转语音. 先决条件:需要在讯飞官网注册自己的账号,拿到讯飞给的APPID.APISecret.APIKey,这三个字段是访问讯飞服务器 ...
- asr语音转写_python 腾讯/百度/讯飞 ASR 语音转文字
因为项目中有需要把微信里的语音转成文本处理, 本次只说语音转文本. 需要注意的是平台对语音的格式有要求, 所以我们需要对语音进行转换格式. 语音转换 使用的工具是ffmpeg, ffmpeg的安装和配 ...
- 讯飞智能语音先锋者:等到人机交互与人类交流一样自然时,真正的智能时代就来了...
作者 | 夕颜 出品 | CSDN(ID:CSDNnews) 「AI 技术生态论」 人物访谈栏目是 CSDN 发起的百万人学 AI 倡议下的重要组成部分.通过对 AI 生态顶级大咖.创业者.行业 KO ...
- 讯飞智能语音先锋者:等到人机交互与人类交流一样自然时,真正的智能时代就来了!...
受访者 | 刘聪 记者 | 夕颜 出品 | CSDN(ID:CSDNnews) 「AI 技术生态论」 人物访谈栏目是 CSDN 发起的百万人学 AI 倡议下的重要组成部分.通过对 AI 生态顶级大咖. ...
- springboot 讯飞语音_讯飞智能语音鼠标实际体验感受
这几天入手一个科大讯飞智能语音鼠标,我的实际体验感受就是"用嘴打字的体会,你体会不了!简称"嘴强王者"" 我拿到手的是lite版本,讯飞一共出了三款智能鼠标,分 ...
最新文章
- angularjs结合d3js实现资源展示
- jQuery 分页插件 jPages 使用
- serverless 框架_Serverless计算这么强大
- 云炬Android开发笔记 5-7网络框架优化与完善
- 计算机信息管理相关课题论文,计算机信息管理课题论文[].doc
- Jeecg-Boot上传附件异常问题处理
- 纯css单击事件,纯css实现点击事件
- echarts 曲线面积对比图
- 云计算学习4——Nova组件服务
- 【数据结构】悬空指针和野指针
- 校招linux基础知识,校招笔试整理 牛客网 2020小米校招(1)
- 首批小程序出炉,小游戏?
- 即席查询(Ad Hoc)如何做到又快又稳?
- IT行业专业术语_其他(学习笔记)
- myeclipse部署时An internal error occurred 错误的几种情况
- pmp-关键路径法之顺推和逆推
- 发明专利申请的必要条件
- php红包算法拼手气加普通红包
- 【大物实验数据处理】分光计的调节与应用,C++
- 用python批量获取cad中线段点组成的凸包 + 面积
热门文章
- DMG Canvas 3 for Mac 共享版 – 优秀的DMG安装包制作软件
- echarts雷达图显示数值
- PS安装失败解决方法
- [对于蓝桥杯要说的一二体会]
- 【STC单片机】STC15单片机读取MPU6050模块数据并串口输出
- 参数曲面matlab,MATLAB空间曲面的实现方法
- 网页制作 网页下拉菜单HTML+CSS制作
- 菜鸟驿站是什么快递_菜鸟驿站是什么快递(菜鸟驿站和快递点的区别)
- iis启动服务时提示在本地计算机 无法启动iis admin服务,iis 依存服务和组没法启动...
- 【设计心理学】格式塔理论