Xamarin效果第二十三篇之离线语音识别

在前面文章中简单玩了玩GIS的基本操作、Mark相关、AR、测距、加载三维白模、可扩展浮动操作和录音效果;今天抽空再来分享一下最近摸索的基于讯飞的离线语音识别效果,其实就简单用了一下离线命令词识别,看效果:

1、先去控制台创建应用:

https://console.xfyun.cn/app/myapp

2、去组合下载SDK(根据自己需求搭配):

https://www.xfyun.cn/sdk/dispatcher

3、然后就是参考文档了:

https://www.xfyun.cn/doc/asr/commandWord/Android-SDK.html

4、最关键的一步绑定第三方库(请大佬“大白”给处理的):

Xamarin.Android.IFlyMSC.1.1140.0-pre.6.nupkg

5、在MainActivity设置Appid:

SpeechUtility.CreateUtility(this, Com.Iflytek.Cloud.SpeechConstant.Appid + "=自己的id");

6、接下来就和前一篇录音异曲同工,共享代码定义接口:

//开始识别
void StartRecognize();
//停止识别
void StopRecognize();
//获取识别结果事件
event GetResultData GetResultDataEvent;

7、实现开始识别:

/// <summary>
/// 开始识别
/// </summary>
public void StartRecognize()
{if(Android.Content.PM.Permission.Denied == Context.CheckSelfPermission(Android.Manifest.Permission.RecordAudio)){MainActivity.Instance.RequestPermissions(new string[]{Android.Manifest.Permission.RecordAudio}, 100);Toast.MakeText(Context, "请开启录音权限", ToastLength.Long).Show();return;}//初始化监听器MyIInitListener myIInitListener = new MyIInitListener();//初始化识别对象mAsr = SpeechRecognizer.CreateRecognizer(MainActivity.Instance, myIInitListener);//构建语法词BuildGrammar();//设置参数bool result = SetParam();if(!result){Console.WriteLine("请先构建语法.");return;}MyIRecognizerListener myIRecognizerListener = new MyIRecognizerListener();//获取识别结果委托myIRecognizerListener.ResultAcion += GetResultData;//开始监听int mRet = mAsr.StartListening(myIRecognizerListener);if(mRet != ErrorCode.Success){Console.WriteLine($ "识别失败,错误码:{mRet}");}
}

8、创建命令词:

private void BuildGrammar()
{//简单几个命令词string mContent = @"#BNF+IAT 1.0 UTF-8;!grammar call;!slot<sendCode>;!start<sendCode>;<callStart>:[<sendCode>];<sendCode>:开机|关机|开灯|关灯|呼叫十年|呼叫AY|呼叫龙哥|呼叫大白;";//清空参数mAsr.SetParameter(SpeechConstant.Params, null);// 设置文本编码格式mAsr.SetParameter(SpeechConstant.TextEncoding, "utf-8");// 设置引擎类型mAsr.SetParameter(SpeechConstant.EngineType, mEngineType);// 设置语法构建路径mAsr.SetParameter(ResourceUtil.GrmBuildPath, grmPath);// 设置资源路径mAsr.SetParameter(ResourceUtil.AsrResPath, getResourcePath());构建语法监听器MyGrammarListener myGrammarListener = new MyGrammarListener();int mRet = mAsr.BuildGrammar(GRAMMAR_TYPE_BNF, mContent, myGrammarListener);if(mRet != ErrorCode.Success){Console.WriteLine("语法构建失败,错误码:" + mRet);}
}

9、设置参数:

public bool SetParam()
{bool result = false;// 清空参数mAsr.SetParameter(SpeechConstant.Params, null);// 设置识别引擎类型mAsr.SetParameter(SpeechConstant.EngineType, mEngineType);//设置本地识别资源mAsr.SetParameter(ResourceUtil.AsrResPath, getResourcePath());//设置语法构建路径,以在本地识别时使用mAsr.SetParameter(ResourceUtil.GrmBuildPath, grmPath);// 设置返回结果格式mAsr.SetParameter(SpeechConstant.ResultType, mResultType);// 设置本地识别使用语法idmAsr.SetParameter(SpeechConstant.LocalGrammar, "call");// 设置识别的门限值mAsr.SetParameter(SpeechConstant.MixedThreshold, "30");mAsr.SetParameter(SpeechConstant.Domain, "iat");mAsr.SetParameter(SpeechConstant.NlpVersion, "2.0");mAsr.SetParameter("asr_sch", "1");result = true;// 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限mAsr.SetParameter(SpeechConstant.AudioFormat, "wav");string asrAudioPath = Android.App.Application.Context.GetExternalFilesDir("").AbsolutePath + "/asr.wav";mAsr.SetParameter(SpeechConstant.AsrAudioPath, asrAudioPath);return result;}

10、关于停止识别:

public void StopRecognize(){mAsr.StopListening();Console.WriteLine("停止识别");}

11、关于SDK&API 错误码查询:

https://www.xfyun.cn/document/error-code

最终简单的效果先这样吧7c7cad1d933f4409b2fb2208928efc41.png;以后有时间的话,可以再去摸索一下更复杂的效果7da09906ecd71378fe705a67e3deefde.png;编程不息、Bug不止、无Bug、无生活9a01f38a1bde39abe1ea1fb6dce3f5ec.png;改bug的冷静、编码的激情、完成后的喜悦、挖坑的激动 、填坑的兴奋;这也许就是屌丝程序员的乐趣吧;今天就到这里吧;希望自己有动力一步一步坚持下去;生命不息,代码不止;大家抽空可以看看今天分享的效果,有好的意见和想法,可以在留言板随意留言;我看到后会第一时间回复大家,多谢大家的一直默默的关注和支持!如果觉得不错,那就伸出您的小手点个赞并关注一下,多谢您的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux脚本漏洞,Silver Peak VX跨站脚本漏洞(CVE-2014-2975)

发布日期&#xff1a;2014-07-28更新日期&#xff1a;2014-07-30受影响系统&#xff1a;silver peak Silver Peak VX描述&#xff1a;--------------------------------------------------------------------------------BUGTRAQ ID: 68923CVE(CAN) ID: CVE-2014-2975Silver P…

JSON.parse()和JSON.stringify()

为什么80%的码农都做不了架构师&#xff1f;>>> parse用于从一个字符串中解析出json对象,如 var str {"name":"huangxiaojian","age":"23"} 结果&#xff1a; JSON.parse(str) Object age: "23"name: "hu…

如果编程语言是女孩子

试想一下&#xff0c;当Java、C、Python、Ruby、PHP、C#、JS等编程语言变成了动漫人物会是怎样的一幅场景呢&#xff1f;下面就一起看看在日本作家渡辺将人的笔下&#xff0c;各种编程语言都是哪类可爱的女孩子的吧&#xff01; 究竟心里有多喜欢&#xff0c;才能画出如此可爱的…

在MAUI中使用Masa Blazor

Masa Blazor是什么在此之前我们已经介绍过什么是Masa Blazor&#xff0c;以及如何使用Masa Blazor&#xff0c;如果还有不了解Masa Blazor的同学可以看我上篇文章【初识Masa Blazor】。那么今天就带大家探索一下如何在MAUI中使用Masa Blazor,那么我们先来了解一下什么是MAUI&am…

exchange2013 owa-outlook界面语言

环境&#xff1a;Exchange 2013客户需求&#xff1a;在海外有分支机构&#xff0c;希望这些人的owa和outlook都是英文一般在登陆owa时&#xff0c;通过用户名和密码验证完成后会提示选择语言和时区&#xff0c;根据客户端的浏览器里面的语言会有一个默认选项英文系统中文系统Ou…

测试网速_使用Speedtest CLI测试你的网速

在本文中我们将使用一个名为speedtest-cli的命令行工具来测试网速。它是用Python语言编写的工具&#xff0c;系统通过向speedtest.net网站上传和下载数据来测试带宽。环境Centos7安装speedtest-cli工具在安装speedtest-cli之前&#xff0c;我们需要安装先安装python3-pip包管理…

C# IEnumerator IEnumerable接口

前言使用linq的时候大家应该都知道IEnumerable和IEnumerator接口&#xff01;解释一下IEnumerable 它利用 GetEnumerator() 返回 IEnumerator 集合访问器,声明实现该接口的class是“可枚举(enumerable)”的 通俗点说就是可进行迭代操作的类型。IEnumerator解释&#xff1a;它是…

filter与servlet对照

最近在开java物自&#xff0c;还记得刚开始使用servlet这是一个调试ajax什么时候&#xff0c;然后&#xff0c;我不知道怎么用&#xff0c;你知道写的路径来调用&#xff0c;总是提示404错&#xff0c;&#xff0c;到最后自己一点点的调通了&#xff0c;知道servlet是须要serve…

vc++ 提取网页上的文字_网页内容不让你复制?老师傅教的这招太绝了,1键提取全网文字...

在网上冲浪&#xff0c;看到了一些不错的文字&#xff0c;想要复制下来&#xff0c;可是网站就不让你复制&#xff0c;非要你注册登录账号&#xff0c;更有甚者要你购买VIP才能复制文字&#xff0c;这不是天方夜谭吗&#xff1f;今天老师傅就教你一招&#xff0c;学会了网页文字…

使用 C# 生成 EMF 矢量图形文件

前言公众号上有网友询问我如何生成 EMF 文件的问题&#xff1a;本以为非常简单&#xff0c;我快速给出了解决方案&#xff1a;var bitmap new Bitmap(640, 480);var g Graphics.FromImage(bitmap);g.DrawString("My IO", new Font(FontFamily.GenericSerif, 10), B…

php register_shutdown_function响应error 配合error_get_last 捕获错误

register_shutdown_function 函数,当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,我们的这个函数将会 被调用&#xff0c;可以配合 error_get_last 使用&#xff0c;代码如下&#xff0c;注释已经解释了代码了&#xff1a; error_get_last 稍后解释 <?php //a bo…

嵌入式开发linux工具,嵌入式Linux开发入门之MfgTool工具的使用

介绍嵌入式linux开发的环境搭建&#xff1a;一、PC端环境搭建2、Ubuntu装好后&#xff0c;在终端安装minicom工具&#xff0c;安装命令&#xff1a;sudo apt-get install minicom注&#xff1a;该工具在后面烧录开发板可以调试使用&#xff0c;对以后的嵌入式程序开发也是不可获…

【足迹C++primer】52、,转换和继承虚函数

转换和继承,虚函数 Understanding conversions between base and derived classes is essential to understanding how object-oriented programming works in C. 理解基类和派生类之间的转换是不可缺少的 理解面向对象编程在。 Like built-in pointers, the smart pointer cla…

聊一聊Redis的离线分析

背景 Redis 或许是我们大部分场景都会用到的一个利器&#xff0c;虽然是利器&#xff0c;用的姿势不对的话&#xff0c;终究还是会整出幺蛾子的。比较常见的问题&#xff0c;不外乎内存暴增&#xff0c;慢查询等情况。那么对于内存问题&#xff0c;可以借助redis自带的bigkey分…

虚拟机VMware安装XP系统错误解决办法

虚拟机给我的编程工作确实带了很多方便&#xff0c;但是虚拟机的一个最大挑战是硬件赶不上&#xff0c;速度太慢了。最近一直在致力于虚拟机上Win7专业版平台上SQL Server 2005Visual Studio 2012系统开发&#xff0c;最初还可以&#xff0c;但是越到后面速度越慢。最后决定重新…

【Python】猜数小游戏(文件操作)

人生苦短&#xff0c;我用Python 关键词 1.多用户 2.字典记录所有成绩 3.每次游戏轮数&总游戏次数&平均每次游戏需要多少轮 字典Dictionary、列表List、元组Tuple差异化理解 from random import randintname input(请输入你的名字&#xff1a;)#输入玩家名字 #读取文件…

100ms的SQL把服务器搞崩溃了

前言一个项目上线了两个月&#xff0c;除了一些反馈的优化和小Bug之外&#xff0c;项目一切顺利&#xff1b;前期是属于推广阶段&#xff0c;可能使用人员没那么多&#xff0c;当然对于项目部署肯定提前想到并发量了&#xff0c;所以早就把集群安排上&#xff0c;而且还在测试环…

需求分析工程师岗位的职责描述(合集)

需求分析工程师岗位的职责描述1 职责&#xff1a; 1&#xff0c;负责需求调研&#xff0c;对需求进行分析&#xff0c;编写解决方案、需求规格说明书等 2&#xff0c;根据需求制作原型&#xff0c;并负责原型展示以及客户沟通等工作 3&#xff0c;负责向技术团队精确地传达业务…

nginx 下配置使用Thinkphp5解决跨目录活动并且设置网站根目录

由于TP5框架的一些特性规则&#xff0c;在nginx下导致跨目录的一些访问不能执行 最开始我尝试配置文件夹目录&#xff0c;导致出现各种奇葩错误&#xff0c;然后搜了以下资料发现原来只要简单的修改几个配置文件即可。 声明系统环境&#xff1a; **系统&#xff1a;Centos6.版本…

如何使用CPU来加速你的Linux命令

我们都知道 grep, bzip2, wc, awk, sed等等&#xff0c;都是单线程的&#xff0c;只能使用一个CPU内核。那么如何才能使用这些内核? 要想让Linux命令使用所有的CPU内核&#xff0c;我们需要用到GNU Parallel命令&#xff0c;它让我们所有的CPU内核在单机内做神奇的map-reduce操…