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. )。

cs 复制代码
            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的差别很大。下面的代码就是初始化识别引擎连接。

cs 复制代码
 ClientWebSocket ws= new ClientWebSocket();
 ws.ConnectAsync(new Uri(ConversationMgr.instance.SonioxUrl), CancellationToken.None).Wait();

 // Send start request with correct field names
 var 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);

返回的结果如下

javascript 复制代码
{"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

}

相关推荐
玩泥巴的35 分钟前
.NET驾驭Word之力:数据驱动文档 - 邮件合并与自定义数据填充完全指南
c#·word·.net·com互操作
心疼你的一切4 小时前
使用Unity引擎开发Rokid主机应用的全面配置交互操作
学习·游戏·unity·c#·游戏引擎·交互
Vizio<5 小时前
ERT中正问题和逆问题的传统数学推导
学习·数学建模·机器人·触觉传感器
椒颜皮皮虾྅10 小时前
【DeploySharp 】基于DeploySharp 的深度学习模型部署测试平台:安装和使用流程
人工智能·深度学习·开源·c#·openvino
kalvin_y_liu17 小时前
【MES架构师与C#高级工程师(设备控制方向)两大职业路径的技术】
开发语言·职场和发展·c#·mes
椒颜皮皮虾18 小时前
基于DeploySharp 的深度学习模型部署测试平台:支持YOLO全系列模型
c#
悠哉悠哉愿意19 小时前
【ROS2学习笔记】URDF 机器人建模
笔记·学习·机器人·ros2
武子康19 小时前
AI-调查研究-95-具身智能 机器人场景测试全解析:从极端环境仿真到自动化故障注入
人工智能·深度学习·机器学习·ai·机器人·自动化·具身智能
赤壁淘沙19 小时前
机器人全身控制浅谈:理解 WBC 的原理
机器人
智能交通技术1 天前
iTSTech:智慧物流中自动驾驶、无人机与机器人的协同应用场景分析 2025
人工智能·机器学习·机器人·自动驾驶·无人机