小例子,C#开发之kinect体感交互设备英文语音识别

本文介绍了一种利用Kinect传感器结合Microsoft Speech API实现语音识别的方法。通过设置Kinect音频源参数并定义语法来识别特定命令词,如“help”、“green”和“blue”。此外,还展示了如何处理语音识别过程中的不同事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

using Microsoft.Kinect;
using Microsoft.Speech.AudioFormat;
using Microsoft.Speech.Recognition;

namespace KinectSpeech
{
class Program
{
static void Main(string[] args)
{
KinectSensor KinectSensor = (from k in KinectSensor.KinectSensors
where k.Status == KinectStatus.Connected
select k).FirstOrDefault();
if (KinectSensor == null)
{
Console.WriteLine("No Kinect Connected\n" + "Press any key to continue.\n");
Console.ReadKey(true);
return;
}
KinectSensor.Start();

        KinectAudioSource audioSource = KinectSensor.AudioSource;
        audioSource.EchoCancellationMode = EchoCancellationMode.None;
        audioSource.AutomaticGainControlEnabled = false;

        RecognizerInfo recognizerInfo = GetKinectRecognizer();
        using (var speechRecognitionEngine = new SpeechRecognitionEngine(recognizerInfo.Id))
        {
            var colors = new Choices();
            colors.Add("help");
            colors.Add("green");
            colors.Add("blue");


            var grammatBuilder = new GrammarBuilder { Culture = recognizerInfo.Culture };
            grammatBuilder.Append(colors);
            var g = new Grammar(grammatBuilder);


            speechRecognitionEngine.LoadGrammar(g);
            speechRecognitionEngine.SpeechRecognized += SreSpeechRecognized;
            speechRecognitionEngine.SpeechHypothesized += SreSpeechHypothesized;
            speechRecognitionEngine.SpeechRecognitionRejected += SreSpeechRecognitionRejected;

            using (Stream s = audioSource.Start())
            {
                speechRecognitionEngine.SetInputToAudioStream(
                    s, new SpeechAudioFormatInfo(EncodingFormat.Pcm,
                    16000, 16, 1, 32000, 2, null));

                Console.WriteLine(
                    "Recognizing speech. Say: 'help', 'green' or 'blue'. Press ENTER to stop");

                speechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
                Console.ReadLine();
                Console.WriteLine("Stopping recognizer ...");
                speechRecognitionEngine.RecognizeAsyncStop();
            }
        }
    }


    private static RecognizerInfo GetKinectRecognizer()
    {
        Func<RecognizerInfo, bool> matchingFunc = r =>
        {
            string value;
            r.AdditionalInfo.TryGetValue("Kinect", out value);
            return "True".Equals(value, StringComparison.InvariantCultureIgnoreCase) &&
                "en-US".Equals(r.Culture.Name, StringComparison.InvariantCultureIgnoreCase);
        };
        return SpeechRecognitionEngine.InstalledRecognizers().Where(matchingFunc).
               FirstOrDefault();
    }

    private static void SreSpeechRecognitionRejected(object sender, SpeechRecognitionRejectedEventArgs e)
    {
        Console.WriteLine("\nSpeech Rejected");
        if (e.Result != null)
        {
            DumpRecordedAudio(e.Result.Audio);
        }
    }


    private static void SreSpeechHypothesized(object sender, SpeechHypothesizedEventArgs e)
    {
        Console.Write("\rSpeech Hypothesized: \t{0}", e.Result.Text);
    }


    private static void SreSpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        if (e.Result.Confidence >= 0.7)
        {
            Console.WriteLine("\nSpeech Recognized: \t{0}\tConfidence:\t{1}",
                e.Result.Text, e.Result.Confidence);
        }
        else
        {
            Console.WriteLine("\nSpeech Recognized but confidence was too low: \t{0}",
                e.Result.Confidence);
            DumpRecordedAudio(e.Result.Audio);
        }
    }

    private static void DumpRecordedAudio(RecognizedAudio audio)
    {
        if (audio == null) return;

        int fileId = 0;
        string filename;
        while (File.Exists((filename = "RetainedAudio_" + fileId + ".wav")))
            fileId++;

        Console.WriteLine("\nWriting file: {0}", filename);
        using (var file = new FileStream(filename, System.IO.FileMode.CreateNew))
            audio.WriteToWaveStream(file);
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值