深度解读微软Speech服务:让语音识别走进现实

大家好,今天我们来探讨一个激动人心的技术话题:微软的语音识别服务如何为我们提供强大的语音识别解决方案,特别是在电话录音中识别出不同的说话人。

场景描绘

想象一下,你有一段电话录音,并需要将其中的多个说话人区分开来,这在客户服务、会议记录等场景中尤为重要。通过调研不同的技术方案,我们发现微软的Speech服务提供了高效的解决方案。

认识Speech Studio

首先,让我带大家认识一下微软提供的在线测试平台:Speech Studio。通过这个网址可以直接访问 Speech Studio 进行服务体验。

在正式使用前,我们需要准备两类服务资源:语音服务和语言服务。在Speech Studio中,你可以在线快速测试并体验其功能。

复制代码
https://speech.microsoft.com/portal/callcenter

我们可以看到Speech Studio服务中可以把wav的对话人区分出来,并且可以提取对于的姓名、邮箱等。甚至可以对敏感信息进行过滤处理。

C# SDK实现语音识别

为了在实际项目中应用,接下来我们来看看如何使用C# SDK来实现这一功能。首先,我们需要在项目中引入相关的NuGet包:

复制代码
<PackageReference Include="Microsoft.CognitiveServices.Speech" Version="1.41.1" />

然后,在代码中导入相关命名空间:

复制代码
using Microsoft.CognitiveServices.Speech;using Microsoft.CognitiveServices.Speech.Audio;using Microsoft.CognitiveServices.Speech.Transcription;

核心代码示例

以下是一个完整的代码示例,展示了如何通过C# SDK来实现语音识别及说话人区分:

复制代码
class Program
{
    // 设置环境变量用于存储密钥和区域信息
    static string speechKey = "your_speech_key";
    static string speechRegion = "your_speech_region";

    async static Task Main(string[] args)
    {
        var filepath = @"test.wav";
        var speechConfig = SpeechConfig.FromSubscription(speechKey, speechRegion);
        speechConfig.SpeechRecognitionLanguage = "en-US";
        speechConfig.SetProperty(PropertyId.SpeechServiceResponse_DiarizeIntermediateResults, "true");

        var stopRecognition = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);

        // 使用音频文件创建一个音频流
        using (var audioConfig = AudioConfig.FromWavFileInput(filepath))
        {
            // 创建会话记录器
            using (var conversationTranscriber = new ConversationTranscriber(speechConfig, audioConfig))
            {
                conversationTranscriber.Transcribing += (s, e) =>
                {
                    Console.WriteLine($"TRANSCRIBING: Text={e.Result.Text} Speaker ID={e.Result.SpeakerId}");
                };

                conversationTranscriber.Transcribed += (s, e) =>
                {
                    if (e.Result.Reason == ResultReason.RecognizedSpeech)
                    {
                        Console.WriteLine();
                        Console.WriteLine($"TRANSCRIBED: Text={e.Result.Text} Speaker ID={e.Result.SpeakerId}");
                        Console.WriteLine();
                    }
                    else if (e.Result.Reason == ResultReason.NoMatch)
                    {
                        Console.WriteLine($"NOMATCH: Speech could not be transcribed.");
                    }
                };

                conversationTranscriber.Canceled += (s, e) =>
                {
                    Console.WriteLine($"CANCELED: Reason={e.Reason}");

                    if (e.Reason == CancellationReason.Error)
                    {
                        Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
                        Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
                        Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
                        stopRecognition.TrySetResult(0);
                    }

                    stopRecognition.TrySetResult(0);
                };

                conversationTranscriber.SessionStopped += (s, e) =>
                {
                    Console.WriteLine("\n    Session stopped event.");
                    stopRecognition.TrySetResult(0);
                };

                await conversationTranscriber.StartTranscribingAsync();

                // 等待识别完成
                Task.WaitAny(new[] { stopRecognition.Task });

                await conversationTranscriber.StopTranscribingAsync();
            }
        }
    }
}

代码解析

  1. 环境变量配置:首先,确保设定"speechKey"和"speechRegion",这两个参数是调用微软语音识别服务的基础。

  2. SpeechConfig对象:通过SpeechConfig.FromSubscription方法,使用你的密钥和区域信息创建一个SpeechConfig对象,并设定识别语言为英语(en-US)。

  3. 设定属性:通过SetProperty方法开启中间结果的说话人区分功能。

  4. 创建音频流:利用AudioConfig.FromWavFileInput方法从音频文件中创建一个音频流。

  5. 创建会话记录器:使用ConversationTranscriber类创建一个会话记录器,并订阅相关事件(如Transcribing、Transcribed、Canceled、SessionStopped),以处理实时语音识别和说话人区分结果。

  6. 开启识别:调用StartTranscribingAsync方法开始识别,并等待任务结束,通过事件处理语音识别的各个阶段输出信息。

实际应用效果

上述代码运行起来,将会实时打印出语音识别结果以及每段话的说话人ID。通过这些信息,我们可以非常方便地将识别到的文本进行进一步处理,例如存储、分析等。

价格

我们可以查看官方定价标准:

复制代码
https://azure.microsoft.com/zh-cn/pricing/details/cognitive-services/speech-services/

总结

微软的Speech服务提供了强大的语音识别能力,通过简单的配置和调用C# SDK,我们能够高效地实现电话录音的说话人区分。希望这篇文章能够帮助大家更好地理解和使用这一服务,让我们在实际项目中发挥其强大功能。如果你有任何问题或需要进一步了解更多技术细节,欢迎在评论区留下你的评论!

期待你的关注,我们下期再见!

相关推荐
摩尔线程3 小时前
摩尔线程携手紫光计算机发布《语音识别全栈国产化技术实践白皮书》
人工智能·语音识别·摩尔线程
数据皮皮侠5 小时前
上市公司内源与债权股权融资协同数据(2009-2025)
大数据·人工智能·算法·microsoft·百度
qq_411262427 小时前
基于 ESP32-S3 的四博 AI 双目智能音箱方案设计:双目屏、四路触控、姿态感应、震动反馈与 AI 大模型接入
人工智能·microsoft·智能音箱
小仙女的小稀罕7 小时前
外教课转写工具选择建议 | 实测筛选高口碑实用方案
大数据·人工智能·学习·自然语言处理·语音识别
小侯不躺平.7 小时前
C++ Boost库【4】 --分词器的使用
c++·windows·microsoft
宠..8 小时前
下拉列表框事件绑定
开发语言·qt·microsoft
海天瑞声AI9 小时前
Dolphin-CN-Dialect正式发布:同样的数据,换一种配方,让ASR听懂更多中国话
语音识别
许彰午9 小时前
# OCR与语音识别——政务AI的两个实用场景
人工智能·ocr·语音识别
qq_411262429 小时前
四博 AI 双目智能音箱方案:四路触控、震动马达、IMU 姿态识别、语音克隆与知识库接入
人工智能·microsoft·智能音箱
小仙女的小稀罕10 小时前
外出采访的记者选工具,需警惕语音识别不支持离线问题
人工智能·语音识别