当前位置: 首页 > news >正文

Teams Bot机器人实时语音识别的多引擎的处理

之前开发的Teams的Bot 是使用微软的实时语音识别。现在增加了一个选项,可以在Azure 和 Soniox两引擎间切换。

Azure 的实时语音识别

Azure 的实时语音识别 使用  Microsoft.CognitiveServices.Speech.Transcription 进行处理。这个质量很不错,而且可以设置每个人的语音特征(wav audio file for creating voice signatures must be 16-bit, 16 kHz sample rate, in single channel (mono) format. The recommended length for each audio sample is between 30 seconds and two minutes. )。

            byte[] fileBytes = File.ReadAllBytes(fn);var content = new ByteArrayContent(fileBytes);var client = new HttpClient();client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);var response = await client.PostAsync($"https://signature.{region}.cts.speech.microsoft.com/api/v1/Signature/GenerateVoiceSignatureFromByteArray", content);var jsonData = await response.Content.ReadAsStringAsync();var result = JsonConvert.DeserializeObject<VoiceSignature>(jsonData);return JsonConvert.SerializeObject(result.Signature);

设置了语音特征后就可以在实时语音识别中,自动识别说话者。一切都好,唯一的一个问题就是不便宜,目前一个月的费用有几万美元。

Soniox的实时语音识别

Soniox的实时语音识别引擎,是用WebSocket的,这一点和Azure的差别很大。下面的代码就是初始化识别引擎连接。

 ClientWebSocket ws= new ClientWebSocket();ws.ConnectAsync(new Uri(ConversationMgr.instance.SonioxUrl), CancellationToken.None).Wait();// Send start request with correct field namesvar startMessage = Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(new{api_key = ConversationMgr.instance.SonioxKey,audio_format = ConversationMgr.instance.SonioxAudioFormat,sample_rate = int.Parse(ConversationMgr.instance.SonioxSampleRate),num_channels = int.Parse(ConversationMgr.instance.SonioxNumChannels),model = ConversationMgr.instance.SonioxModel,enable_speaker_diarization=true,language_hints = ConversationMgr.instance.SonioxLanguageHints.Replace(" ", "").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)}));ws.SendAsync(new ArraySegment<byte>(startMessage), WebSocketMessageType.Text, true, CancellationToken.None).Wait();

初始化之后,当收到从机器人收到语音包后,就把包的时间发送到Soniox。

var audioChunk = new ArraySegment<byte>(item.Buff, 0, item.Buff.Length);
await ws.SendAsync(audioChunk, WebSocketMessageType.Binary, true, CancellationToken.None);

同时并行一个任务从 Soniox接受识别的结果:

result = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);

返回的结果如下

{"tokens":[{"text":"Wh","start_ms":540,"end_ms":540,"confidence":0.999,"is_final":false,"speaker":"1"},{"text":"at","start_ms":540,"end_ms":600,"confidence":1,"is_final":false,"speaker":"1"},{"text":" is","start_ms":660,"end_ms":720,"confidence":0.998,"is_final":false,"speaker":"1"},{"text":" y","start_ms":780,"end_ms":840,"confidence":1,"is_final":false,"speaker":"1"},{"text":"our","start_ms":840,"end_ms":900,"confidence":1,"is_final":false,"speaker":"1"},{"text":" best","start_ms":960,"end_ms":1020,"confidence":1,"is_final":false,"speaker":"1"}],"final_audio_proc_ms":0,"total_audio_proc_ms":1800}

{
"tokens": [
{
"text": "Wh",
"start_ms": 540,
"end_ms": 540,
"confidence": 0.999,
"is_final": false,
"speaker": "1"
},
{
"text": "at",
"start_ms": 540,
"end_ms": 600,
"confidence": 1,
"is_final": false,
"speaker": "1"
},
{
"text": " is",
"start_ms": 660,
"end_ms": 720,
"confidence": 0.998,
"is_final": false,
"speaker": "1"
},
{
"text": " y",
"start_ms": 780,
"end_ms": 840,
"confidence": 1,
"is_final": false,
"speaker": "1"
},
{
"text": "our",
"start_ms": 840,
"end_ms": 900,
"confidence": 1,
"is_final": false,
"speaker": "1"
},
{
"text": " best",
"start_ms": 960,
"end_ms": 1020,
"confidence": 1,
"is_final": false,
"speaker": "1"
}
],
"final_audio_proc_ms": 0,
"total_audio_proc_ms": 1800
}

http://www.dtcms.com/a/348320.html

相关文章:

  • 【大语言模型 17】高效Transformer架构革命:Reformer、Linformer、Performer性能突破解析
  • 【机器人零件】蜗轮蜗杆减速器
  • Android面试指南(五)
  • 数据挖掘 4.1~4.7 机器学习性能评估参数
  • RandAR训练自己的数据集
  • 多核多线程消息队列传递指针存在可见性问题吗?
  • 如何安全解密受限制的PDF文件
  • 20年AWS服务进化史
  • 基于Spring Boot与Redis的电商场景面试问答解析
  • 鸿蒙中点击响应时延分析
  • 在 AWS ECS Fargate 上将 Datadog 作为 SideCar 运行
  • NLP:Transformer残差连接的作用(特别分享2)
  • elasticsearch 7.17.23 使用spring data es实现高亮分页,scroll查询分页查询
  • AI+SaaS工具实战:如何靠AI赋能CRM/财务SaaS实现企业降本28%+效率提升40%
  • Vue 项目 package.json 终极详解(主流实践 / 逐项说明)
  • element-plus穿梭框transfer的调整
  • Git连接Github远程仓库的代理设置
  • centerpoint训练过程
  • 包含单负介质的夹层结构中的电磁隧穿现象的复现
  • 设计模式:建造者模式
  • linux下camera 详细驱动流程 OV02K10为例(chatgpt版本)
  • css3之flex布局
  • 在 Ruby 客户端里用 ES|QL
  • 知识蒸馏 Knowledge Distillation 0. 基础:自回归分解与逐 token散度
  • 重学python之mro
  • 【科研绘图系列】R语言浮游植物初级生产力与光照强度的关系
  • 28.原型
  • 详解triton.jit及PTX
  • 目标检测数据集 第006期-基于yolo标注格式的汽车事故检测数据集(含免费分享)
  • vue 自定义文件选择器组件- 原生 input实现