我想要從IBM Watson服務器獲得響應。同樣的代碼也適用於Google Speech API。如下面的代碼所示,我正在向Watson API發送正確的音頻。無法將文件上傳到IBM Watson語音文本
try
{
FileStream fileStream = File.OpenRead(data_to_translate);
MemoryStream memoryStream = new MemoryStream();
memoryStream.SetLength(fileStream.Length);
fileStream.Read(memoryStream.GetBuffer(), 0, (int)fileStream.Length);
byte[] BA_AudioFile = memoryStream.GetBuffer();
string auth = string.Format("{0}:{1}", "xxxx", "xxxx");
string auth64 = Convert.ToBase64String(Encoding.ASCII.GetBytes(auth));
string credentials = string.Format("{0} {1}", "Basic", auth64);
HttpWebRequest _HWR_SpeechToText = null;
_HWR_SpeechToText =
(HttpWebRequest)HttpWebRequest.Create(
"https://stream.watsonplatform.net/speech-to-text/api/v1/recognize");
_HWR_SpeechToText.Headers[HttpRequestHeader.Authorization] = credentials;
_HWR_SpeechToText.Method = "POST";
_HWR_SpeechToText.ContentType = "audio/flac; rate=44100 channels=2";
_HWR_SpeechToText.ContentLength = BA_AudioFile.Length;
_HWR_SpeechToText.KeepAlive = false;
_HWR_SpeechToText.ProtocolVersion = HttpVersion.Version10;
_HWR_SpeechToText.ServicePoint.ConnectionLimit = 1;
Stream stream = _HWR_SpeechToText.GetRequestStream();
stream.Write(BA_AudioFile, 0, BA_AudioFile.Length);
stream.Close();
HttpWebResponse HWR_Response = (HttpWebResponse)_HWR_SpeechToText.GetResponse();
if (HWR_Response.StatusCode == HttpStatusCode.OK)
{
StreamReader SR_Response = new StreamReader(HWR_Response.GetResponseStream());
// string text = SR_Response.ReadToEnd();
// jsonResponse json = JsonConvert.DeserializeObject<jsonResponse>(SR_Response.ReadToEnd());
//Speech API response here
var result = SR_Response.ReadToEnd();
Console.WriteLine(result);
var jsons = result.Split('\n');
foreach (var j in jsons)
{
var jsonObject = JsonConvert.DeserializeObject<jsonResponse.SpeechResponse>(j);
if (jsonObject == null || jsonObject.Result.Length <= 0) continue;
if (jsonObject.Result[0].Alternative[0].Confidence > 0.90)
{
Console.WriteLine("text-to-speech van google: " + jsonObject.Result[0].Alternative[0].Transcript + "\nconfidence: " + jsonObject.Result[0].Alternative[0].Confidence);
}
else if (jsonObject.Result[0].Alternative[0].Confidence < 0.90)
{
Console.WriteLine("Watson is te onzeker " + jsonObject.Result[0].Alternative[0].Confidence + " :(\nmaar hier is toch het antwoord: " + jsonObject.Result[0].Alternative[0].Transcript);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.ReadLine();
有人可以向我解釋我做錯了什麼嗎?我想在沒有/ session /的情況下撥打電話,因爲我只需要最終答案+信心。
有了這個代碼,我收到以下錯誤:
System.IO.IOException: Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.Security._SslStream.StartWriting(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security._SslStream.ProcessWrite(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.ConnectStream.InternalWrite(Boolean async, Byte[] buffer, Int32 offset, Int32 size, AsyncCallback callback, Object state)
at System.Net.ConnectStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at GoogleSpeech.speechRecognitionWatson.speechRecognize(String data_to_translate) in C:\Program Files (x86)\School\herkansingen jaar 4\INFAFS\ProofofConcepts\GoogleSpeech\GoogleSpeech\speechRecognitionWatson.cs:line 47
有誰告訴我,我應該添加,刪除或者如果我對IBM的沃森做法是差得遠了?我認爲這將工作,因爲它適用於谷歌API和其他API ...
您能標記第47行是否帶有代碼註釋嗎? – wimh
第47行是stream.Write(BA_AudioFile,0,BA_AudioFile.Length); – LordCas
'rate = 44100'和'channels = 2'之間沒有分號。 – wimh