рд╣рдорд╛рд░реЗ .NET рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ Google рд╡реЙрдЗрд╕ рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛



Google Chrome рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рднрд╛рд╖рдг рдорд╛рдиреНрдпрддрд╛ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ ред

рдЪреВрдВрдХрд┐ рдореВрд▓ рдХреНрд░реЛрдорд┐рдпрдо рдЦреБрд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдмрд╛рдд рдХреА рдЬрд╛рд╕реВрд╕реА рдХрд░рдиреЗ рдХреА рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдЗрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рддрдХрдиреАрдХ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдкреГрдереНрд╡реА рдкрд░ рд╢рд╛рдВрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рд╛рд░реНрдереА рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдкрддреЗ рдкрд░ POST рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ www.google.com/speech-api/v1/recognize FLAC рдпрд╛ Speex рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рдеред рд╣рдо C # рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ WAVE рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдорд╛рдиреНрдпрддрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред


рдореВрд▓ рд╡рд┐рд╖рдп рдХреЗ рд▓реЗрдЦрдХ рдХреА рддрд░рд╣, рд╣рдо Speex рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдзреНрд╡рдирд┐ рдХреЛ рд╡реЗрд╡ рдлреЙрд░реНрдореЗрдЯ рд╕реЗ FLAC рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ Cuetools рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдЗрд╕рдХреЗ рдХреЛрдб рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рджреЛ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪреИрдирд▓реЛрдВ рдХреЗ рд╕рд╛рде FLAC рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рдереА, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдЪреЗрдХ рдХреЛ рдХреЗрд╡рд▓ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдХреЗ, Google рджреНрд╡рд╛рд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореЛрдиреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

/// <summary>  wav-  flac </summary> /// <returns> </returns> public static int Wav2Flac(String wavName, string flacName) { int sampleRate = 0; IAudioSource audioSource = new WAVReader(wavName, null); AudioBuffer buff = new AudioBuffer(audioSource, 0x10000); FlakeWriter flakewriter = new FlakeWriter(flacName, audioSource.PCM); sampleRate = audioSource.PCM.SampleRate; FlakeWriter audioDest = flakewriter; while (audioSource.Read(buff, -1) != 0) { audioDest.Write(buff); } audioDest.Close(); audioDest.Close(); return sampleRate; } 


рдЕрдЧрд░ рдХрд┐рд╕реА рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд╕реНрдерд╛рдпреА FLAC рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬреЗ рдмрд┐рдирд╛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдиреЛрдЯрд┐рд╕ рдХрд┐рдпрд╛ рдХрд┐ Google рдиреЗ 400 рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЙрдЪреНрдЪ рдирдореВрдирд╛ рджрд░ (44100) рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреАред рдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдЖрд╡реГрддреНрддрд┐, 8 рдФрд░ 16 kHz рдХреЗ рдХрд╛рдо рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ред

Google Voice рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХреА рдореБрдЦреНрдп рд╡рд┐рдзрд┐:
  public static String GoogleSpeechRequest(String flacName, int sampleRate) { WebRequest request = WebRequest.Create("https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=ru-RU"); request.Method = "POST"; byte[] byteArray = File.ReadAllBytes(flacName); // Set the ContentType property of the WebRequest. request.ContentType = "audio/x-flac; rate=" + sampleRate; //"16000"; request.ContentLength = byteArray.Length; // Get the request stream. Stream dataStream = request.GetRequestStream(); // Write the data to the request stream. dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); // Get the response. WebResponse response = request.GetResponse(); dataStream = response.GetResponseStream(); // Open the stream using a StreamReader for easy access. StreamReader reader = new StreamReader(dataStream); // Read the content. string responseFromServer = reader.ReadToEnd(); // Clean up the streams. reader.Close(); dataStream.Close(); response.Close(); return responseFromServer; } 


рд╣рдо рдпрд╣рд╛рдВ рдбреЗрдЯрд╛рд╕реЙрдиреНрдЯреНрд░реИрдХреНрдЯрд╕рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ JSON рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдбрд┐рд╕реЗрд░рд▓рд╛рдЗрдЬреЗрд╢рди рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдореИрдВ рдордЬрдмреВрдд рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Google рд╕реЗ рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрд╢рд╛ рдлреЙрд░реНрдо рдореЗрдВ рдЖрдП:

{"status":0,"id":"4531050901df65542082eacfebf3bb1b-1","hypotheses":[{"utterance":" ","confidence":0.89697623}]}

рдЗрд╕рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд░рд▓ deserialization рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рдерд╛, рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгреА рд╕реБрдирдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

 [DataContract] public class RecognizedItem { [DataMember] public string utterance; [DataMember] public float confidence; } [DataContract] public class RecognitionResult { [DataMember] public string status; [DataMember] public string id; [DataMember] public RecognizedItem[] hypotheses; } public static RecognitionResult Parse(String toParse) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(RecognitionResult)); MemoryStream stream1 = new MemoryStream(ASCIIEncoding.UTF8.GetBytes(toParse)); RecognitionResult result= (RecognitionResult)ser.ReadObject(stream1); return result; } 




рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдкрд░, "рдмрд╛рдЗрдХ рдЦрд░реАрджреЗрдВ" рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рдЧрдпрд╛ рдерд╛, "рдПрдХ рджреЛ рдмрд╛рд░" рдХреЛ "1 2 рд░рд╕" рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рджреА рдЧрдИ рдереАред рд╕реЛрд░реНрд╕ рдХреЛрдб рдЖрд░реНрдХрд╛рдЗрд╡ рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред

рддрдХрдиреАрдХ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ рдЬрдм рддрдХ рдЖрдк рдЗрд╕реЗ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддреЗ, рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдмрд┐рдирд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ!

Source: https://habr.com/ru/post/In117234/


All Articles