c# 开发语音识别程序

C#开发语音识别程序

概述

语音识别是当前比较热门的领域之一,它可以应用在语音助手、音频转写等领域。本文主要介绍如何使用C#开发语音识别程序。

准备工作

在使用C#开发语音识别程序之前,我们需要安装语音识别的开发库。我们可以使用Microsoft Speech Platform SDK 11来实现对语音的识别,这个库在Windows 7以及之后的版本中默认已经安装了。如果没有安装,则需要从Microsoft官网上下载并安装。

步骤

1.添加引用

打开Visual Studio,新建一个控制台应用程序,并添加对Microsoft.Speech.dll的引用。方法是右键“应用程序名称” -> “添加” -> “引用” -> “浏览”,找到Microsoft.Speech.dll文件,添加即可。

2.配置识别引擎

在程序中添加如下代码,以配置识别引擎

using Microsoft.Speech.Recognition;
using Microsoft.Speech.Recognition.SrgsGrammar;
using System.Collections.Generic;

public class SpeechRecognition
{
    private SpeechRecognitionEngine _recognizer;
    public SpeechRecognition()
    {
        var options = new SpeechRecognitionEngineOptions
        {
            SynchronousGrammarCompilation = true
        };
        _recognizer = new SpeechRecognitionEngine(options);
        AddCommands();
    }

    public void AddCommands()
    {
        var command = new GrammarBuilder(new Choices(new string[] { "hello", "how are you" }));
        var grammar = new Grammar(command);
        _recognizer.LoadGrammar(grammar);
        _recognizer.SpeechRecognized += Recognizer_SpeechRecognized;
    }

    public void Start()
    {
        _recognizer.SetInputToDefaultAudioDevice();
        _recognizer.RecognizeAsync(RecognizeMode.Multiple);
        Console.ReadLine();
    }

    private void Recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        Console.WriteLine("Recognized: " + e.Result.Text.ToString());
    }
}

以上代码中,我们创建了一个名为SpeechRecognition的类,并在构造函数中初始化了一个名为_recognizer的变量对识别引擎进行配置,通过AddCommands方法添加了几个命令,然后通过Start方法启动识别。当用户说出识别的命令时,会在控制台输出“Recognized:”和识别到的命令文本。

3.运行程序

在程序的Main方法中添加如下代码:

var speak = new SpeechRecognition();
speak.Start();

运行程序后,试着对着麦克风说“Hello”或者“How are you”,可以看到程序能够成功识别出语音并输出识别的结果。

示例说明

示例一:简单的计算器

我们可以通过识别语音命令来实现简单的计算器功能。例如,如果用户说:“What is 2 plus 2”,程序可以识别出命令,并输出结果:“4”。

public void AddCommands()
{
    var builder = new SrgsDocument();
    var items = new List<string> { "plus", "minus", "times", "divided by" };
    var operations = new GrammarBuilder(new Choices(items));
    var digits = new SrgsRule("digit", new SrgsRule[] {
        new SrgsAny("1", "2", "3", "4", "5", "6", "7", "8", "9", "0"),
        new SrgsOneOf(new string[]{ "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"}),
        new SrgsOneOf(new string[]{ "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"})
    });
    var digitList = new SrgsZeroOrMore(digits);
    var a = new SrgsIdentifier("a", digitList);
    var b = new SrgsIdentifier("b", digitList);

    var opPlus = new SrgsRule("opPlus", new SrgsItem[]{operations, new SrgsSemanticInterpretationTag("out=\"+\";")});
    var opMinus = new SrgsRule("opMinus", new SrgsItem[]{operations, new SrgsSemanticInterpretationTag("out=\"-\";")});
    var opTimes = new SrgsRule("opTimes", new SrgsItem[]{operations, new SrgsSemanticInterpretationTag("out=\"*\";")});
    var opDividedBy = new SrgsRule("opDividedBy", new SrgsItem[]{operations, new SrgsSemanticInterpretationTag("out=\"/\";")});

    builder.Rules.Add(digits);
    builder.Rules.Add(opPlus);
    builder.Rules.Add(opMinus);
    builder.Rules.Add(opTimes);
    builder.Rules.Add(opDividedBy);

    var main = new SrgsRule(
        "main",
        new SrgsItem[]
        {
            new SrgsSemanticInterpretationTag("out=\"result = \";"),
            new SrgsOneOf(new SrgsItem[] { a, b }),
            new SrgsSemanticInterpretationTag("out+=\" \" + a.value + \" \" + out + \" \" + b.value + \";\";")
        }
    );
    builder.Rules.Add(main);

    builder.Root = main;
    _recognizer.LoadGrammar(new Grammar(builder));
}

以上代码中,我们通过一个GrammarBuilder对象来定义识别语音命令的语法规则。其中包括四个操作符,可以和数字或者纯数字组合成算式。使用SemantcInterpretationTag对命令进行解析并计算结果。

示例二:实时语音翻译

我们还可以使用语音识别来实现实时语音翻译。例如,当用户说“Hello,我是中国人”,程序可以将中文翻译成英文,并输出结果:“Hello, I am Chinese”。

public void AddCommands()
{
     var requestURI = "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to=en";
     var request = (HttpWebRequest)WebRequest.Create(requestURI);
     request.Headers.Add("Ocp-Apim-Subscription-Key", "<YOUR_KEY_HERE>");

     var command = new GrammarBuilder();
     command.AppendDictation();
     var grammar = new Grammar(command);

     _recognizer.LoadGrammar(grammar);
     _recognizer.SpeechRecognized += (s, e) => {
        if (e.Result.Text != null)
        {
            var query = e.Result.Text;
            var encodeQuery = HttpUtility.UrlEncode(query);
            var postData = "[{\"Text\": \"" + encodeQuery + "\"}]";
            request.ContentType = "application/json";
            request.Method = "POST";
            var data = Encoding.UTF8.GetBytes(postData);
            using (var stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }
            var response = (HttpWebResponse)request.GetResponse();
            var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
            var translatedText = Regex.Match(responseString, "\"text\": ?\"([^\"]+)\"", RegexOptions.IgnoreCase).Groups[1].Value;
            Console.WriteLine(translatedText);
        }
     };
}

在以上代码中,我们首先定义一个requestURI的变量包含翻译的API地址,然后构造一个命令语法规则,当语音被识别后就发送翻译的请求,然后将得到的翻译结果输出到控制台。

结论

通过上述步骤,我们学习了如何使用C#来开发语音识别程序。在实际应用中,我们可以根据不同的需求来定义语法规则和实现对命令的解析。同时,我们还看到了如何使用语音识别来实现实时语音翻译、计算器等功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c# 开发语音识别程序 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • 体验.NET与文件存储服务MinIO

    对象文件存储服务(OSS)主要用于存储零散的文件,和直接存储到本地文件系统中相比,有以下的几个优势: 跨服务器可用 兼容Amazon S3 API 横向扩容 高可用 支持加密 MinIO就是一个高性能的文件服务,我们使用.NET来操作一下。 部署MinIO 最简单的办法,就是在Docker上运行MinIO。可以使用以下命令启动MinIO: docker ru…

    C# 2023年4月24日
    00
  • C# File.Exists – 判断文件是否存在

    File.Exists方法的作用与使用方法 File.Exists方法的作用 C#的File.Exists方法用于检查文件是否存在。当需要在代码中判断一个文件是否存在时,我们可以使用该方法来判断,避免了在后续文件操作中出现异常的情况。 File.Exists方法的使用方法 File.Exists方法属于C#的System.IO命名空间,使用该方法需要导入该命…

    C# 2023年4月19日
    00
  • C# File.GetAttributes(string path):获取指定文件或目录的属性

    File.GetAttributes(string path) 方法的作用是获取指定路径上的文件或目录的属性。 其使用方法的完整攻略如下: 1. 导入命名空间 在使用该方法之前,需要先导入 System.IO 命名空间,因为此方法是定义在 System.IO.File 类中的静态方法。 using System.IO; 2. 参数说明 该方法的参数 path…

    C# 2023年4月19日
    00
  • PC 端微信扫码注册和登录实例

    下面我将为大家详细讲解“PC 端微信扫码注册和登录实例”的完整攻略。 准备工作 首先,你需要在自己的网站中添加微信扫码登录模块,可以使用第三方登录插件,例如“社会化登录”插件。在使用该插件时,需要先获取自己的应用 ID 和应用密钥等信息。 页面设计 添加微信登录模块后,需要在网站中添加注册和登录页面。可以使用 HTML 和 CSS 设计全新的页面,也可以使用…

    C# 2023年5月31日
    00
  • .NET1.0版本中的异步编程模型(APM)

    .NET 1.0版本中的异步编程模型(APM) 在 .NET 1.0 版本中,使用异步编程模型(Async Programming Model,APM)可以轻松实现异步操作,其主要思想是通过非阻塞式编程模型来提高程序性能和响应时间。通过将耗时操作放入单独的线程中,并在处理完成后通知调用线程,提高了程序并发性和响应时间。 异步编程模型的基本组成部分 异步编程模…

    C# 2023年6月3日
    00
  • Windows 8技巧:Xaml+C#开发第一个Metro Style应用程序的使用

    下面我来详细讲解“Windows 8技巧:Xaml+C#开发第一个Metro Style应用程序的使用”的完整攻略。 概述 本攻略旨在为开发者提供在Windows 8操作系统下使用Xaml+C#开发第一个Metro Style应用程序的详细过程和方法。 步骤 步骤一:安装开发环境 首先,我们需要安装Visual Studio 2012及以上版本的开发环境。在…

    C# 2023年6月7日
    00
  • C#实现串口调试工具

    下面是关于C#实现串口调试工具的完整攻略: 1. 前期准备 在使用C#来实现串口调试工具之前,首先要准备好相关的环境和工具。具体的步骤如下: 安装Visual Studio开发工具,选择适合自己的版本。 新建一个项目,选择“Windows窗体应用程序”。 在项目中添加“串口”控件。 2. 界面设计 接下来要进行的步骤是对调试工具的界面进行设计。通过界面设计,…

    C# 2023年6月6日
    00
  • 用Fine Uploader+ASP.NET MVC实现ajax文件上传[代码示例]

    使用Fine Uploader和ASP.NET MVC实现ajax文件上传是一项非常常见的任务。下面是实现这个任务的完整攻略: 步骤一:安装Fine Uploader 首先,需要从Fine Uploader的官方网站下载Fine Uploader。然后,将下载的Fine Uploader文件解压缩到您的应用程序中。 步骤二:设置文件上传 在您的ASP.NET…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部