[英]Microsoft Speech Recognition with Custom Speech Protocol (Xamarin Android, Websocket)
[英]Continuous Speech Recognition using Microsoft Cognitive Speech + Websocket - Xamarin
我正在尝试使用Xamarin Android的Microsoft认知语音从麦克风建立连续语音识别 。 我认为没有Xamarin的库,因此我稍微修改了“ Xamarin.Cognitive.BingSpeech ”库(端点等)以使其正常工作。 我有问题
我想通过以下https://docs.microsoft.com/zh-cn/azure/cognitive-services/speech/api-reference-rest/websocketprotocol教程来连接到Microsoft Web套接字。
我尝试使用基本的HttpClient发送HTTPREQUEST并获得了101交换协议的结果(我想我成功了吗?)。
更新:我的HTTP请求是:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
var request = new HttpWebRequest(uriBuilder.Uri);
request.Headers.Add("Authorization", new System.Net.Http.Headers.AuthenticationHeaderValue(Bearer, AuthClient.Token).ToString());
request.Accept=MimeTypes.Json;
request.Host = SpeechEndpoint.Host;
request.Connection = "Upgrade";
request.Headers.Add("Upgrade", "Websocket");
request.KeepAlive = true;
request.Method = "GET";
request.CookieContainer = new CookieContainer();
request.AllowAutoRedirect = true;
request.Date = DateTime.Now;
request.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.CacheIfAvailable);
request.Headers.Add("Sec-WebSocket-Key", "dGhlIHNhbXBsZSBub25jZQ==");
request.Headers.Add("Sec-WebSocket-Version", "13");
request.Headers.Add("Sec-WebSocket-Protocol", "chat, superchat");
request.Headers.Add("X-ConnectionId",xConnectionId = Guid.NewGuid().ToString().ToUpper());
发出HTTPRequest之后,我尝试连接到Websocket,但是我总是得到“无法连接到远程服务器”,而没有任何错误代码或任何其他信息。 (WSS:// XXXXXXXX)。
Uri wsuri = new Uri(AppConfig.BINGWSSURI);
await _socketclient.ConnectAsync(wsuri, CancellationToken.None);
Log.Info("WSOCKETFINISH", _socketclient.State.ToString());
我要实现的第二件事是使用二进制消息将音频从麦克风流传输到Websocket,因此我必须
我想要实现的目标:使用带有Microsoft认知语音,听写模式的麦克风进行语音转文本,因此我需要部分结果,而不是等待录制完成。
我认为您想将语音转换为文本。
由于Xamarin.Cognitive.BingSpeech需要您记录语音并将其作为文件或流发送到服务器。 我认为您可以尝试使用Android语音 。 它还可以将文本转换为语音。 这是一个例子。
如果要使用Xamarin.Cognitive.BingSpeech,则可以使用Audio Recorder插件记录语音,并使用BingSpeechApiClient
发送到服务器。 例如:
BingSpeechApiClient bingSpeechClient = new BingSpeechApiClient ("My Bing Speech API Subscription Key");
var audioFile = "/a/path/to/my/audio/file/in/WAV/format.wav";
var simpleResult = await bingSpeechClient.SpeechToTextSimple (audioFile);
Or
var simpleResult = await bingSpeechClient.SpeechToTextSimple (stream, <sample rate>, <audio record Task>);
这是Xamarin.Cognitive.BingSpeech的示例。
更新:
我总是得到“无法连接到远程服务器”而没有任何错误代码或任何东西。
您在标头中缺少某些值。
client.Options.SetRequestHeader("X-ConnectionId", System.Guid.NewGuid().ToString());
授权
您需要将订阅密钥发布到https://api.cognitive.microsoft.com/sts/v1.0/issueToken 。 您可以使用邮递员来执行此操作。 然后将返回值添加到标题中。
client.Options.SetRequestHeader(“ Authorization”,“ eyJ0eXAiOiJKV1Q .... uW72PAOBRcUvqY”);
所以我需要部分结果而不是等待录制完成
您可以使用GetAudioFileStream()
方法,例如:
var audioRecordTask = await recorder.StartRecording();
using (var stream = recorder.GetAudioFileStream ())
{
//this will get the recording audio data as it continues to record
}
UPDATE2:
websoket部件代码:
var client = new ClientWebSocket();
client.Options.UseDefaultCredentials = true;
client.Options.SetRequestHeader("X-ConnectionId", System.Guid.NewGuid().ToString());
client.Options.SetRequestHeader("Authorization", "eyJ0eXAiOiJKV1QiL....16pbFPOWT3VHXot8");
var a = client.ConnectAsync(new Uri("wss://speech.platform.bing.com/speech/recognition/Dictation/cognitiveservices/v1"), CancellationToken.None);
a.Wait();
注意 :保持您的授权值是最新的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.