Google parole-texte de l'API en C#
Mon programme, vous obtenez un bon responsable de google lors de la flac fichier enregistré manuel à l'aide de windows sound recorder et le convertir en utilisant un logiciel convertisseur.
Mais quand j'utilise le fichier enregistré par mon programme, j'ai eu "{"result":[]}
"à partir de google. Que dois-je faire?
voici mon code :
l'expéditeur :
private static void CopyStream(FileStream fileStream, Stream requestStream)
{
var buffer = new byte[32768];
int read;
while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
requestStream.Write(buffer, 0, read);
}
}
private static void ConfigureRequest(HttpWebRequest request)
{
request.KeepAlive = true;
request.SendChunked = true;
request.ContentType = "audio/x-flac; rate=44100";
request.UserAgent =
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip,deflate,sdch");
request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-GB,en-US;q=0.8,en;q=0.6");
request.Headers.Set(HttpRequestHeader.AcceptCharset, "ISO-8859-1,utf-8;q=0.7,*;q=0.3");
request.Method = "POST";
}
using (var fileStream = new FileStream(@"C:\Users\Ahmad Mustofa\Documents\Visual Studio 2010\Projects\FP\FP\bin\Debug\voice.flac", FileMode.Open))
{
const string requestUrl = "https://www.google.com/speech-api/v2/recognize?output=json&lang=ar-sa&key=AIzaSyBJ6VJ326Rpb23msih2wGhXENEwU1TF1PA&client=chromium&maxresults=1&pfilter=2";
var request = (HttpWebRequest)WebRequest.Create(requestUrl);
ConfigureRequest(request);
var requestStream = request.GetRequestStream();
CopyStream(fileStream, requestStream);
using (var response = request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
using (var zippedStream = new GZipStream(responseStream, CompressionMode.Decompress))
{
using (var sr = new StreamReader(zippedStream))
{
var res = sr.ReadToEnd();
state.Text = res;
}
}
}
}
}
l'enregistreur wav:
private void sourceStream_DataAvailable(object sender, NAudio.Wave.WaveInEventArgs e)
{
if (waveWriter == null) return;
waveWriter.WriteData(e.Buffer, 0, e.BytesRecorded);
waveWriter.Flush();
}
fileName = "C:\\Users\\Ahmad Mustofa\\Documents\\Visual Studio 2010\\Projects\\FP\\FP\\bin\\debug\\voice.wav";
int deviceNumber = hardware.SelectedItems[0].Index;
try
{
sourceStream = new NAudio.Wave.WaveIn();
sourceStream.DeviceNumber = deviceNumber;
sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels);
sourceStream.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(sourceStream_DataAvailable);
waveWriter = new NAudio.Wave.WaveFileWriter(fileName, sourceStream.WaveFormat);
sourceStream.StartRecording();
}
catch (Exception ex)
{
state.Text = "disini" + ex.Message;
}
flac converter:
string inputFile = Path.Combine("wav ", input);
string outputFile = Path.Combine("flac", Path.ChangeExtension(input, ".flac"));
if (!File.Exists(inputFile))
throw new ApplicationException("Input file " + inputFile + " cannot be found!");
WavReader wav = new WavReader(inputFile);
using (var flacStream = File.Create(outputFile))
{
FlacWriter flac = new FlacWriter(flacStream, wav.BitDepth, wav.Channels, wav.SampleRate);
//Buffer for 1 second's worth of audio data
byte[] buffer = new byte[wav.Bitrate / 8];
int bytesRead;
do
{
bytesRead = wav.InputStream.Read(buffer, 0, buffer.Length);
flac.Convert(buffer, 0, bytesRead);
} while (bytesRead > 0);
flac.Dispose();
flac = null;
}
J'ai exactement le même problème
OriginalL'auteur mustofa27 | 2014-06-04
Vous devez vous connecter pour publier un commentaire.
J'ai été aussi le même problème, mais il est venu avec une solution élégante. J'ai utilisé le Violoneux (http://www.telerik.com/fiddler/) pour comprendre comment Chrome n'est la reconnaissance de la parole et a ensuite créé un code pour émuler chrome envoi de la demande. Cette approche utilise un URI différent et il y a aussi un 16-valeur de caractère appelé paire qui est différent pour chaque demande. J'utilise un tirage aléatoire simple générateur de valeur de la fonction pour en créer une pour la demande et j'ai aussi changé la valeur de sortie 'json'.
Note: Le résultat peut parfois être vide comme dans votre cas ci-dessus, mais il y a aussi un autre objet json dans la réponse qui contient les solutions de rechange.
OriginalL'auteur dubezOniner
Il est clairement mentionné dans le cloud Google api url que j'ai.e
https://cloud.google.com/speech-to-text/docs/async-recognize#speech-async-recognize-gcs-protocol
Si l'opération n'est pas terminée, vous pouvez interroger le point de terminaison à plusieurs reprises de faire la demande jusqu'à ce que le fait de la propriété de la réponse est vrai.
interroger le point de terminaison à plusieurs reprises de faire la demande jusqu'à ce que le fait de la propriété de la réponse est vrai ou vous pouvez vérifier l' "progressPercent": 0 jusqu'à la valeur 100. Une fois les 100% alors fait la propriété devient vrai.
J'ai fait la même dans mon code en utilisant le nom de l'opération, pour référence, voici le code
Dans le but de retarder la requête get:
Obtenir auth jeton:
Enfin, vous obtiendrez le résultat comme:
Choses nécessaires:
Web HTTP demande
Grâce
OriginalL'auteur Jayoti Parkash
L'utiliser et obtenir uterance(une phrase) et de confiance(%)
OriginalL'auteur Mario Sergio
J'étais à la recherche de 3 heures, j'ai gardé gettin {"résultat : []"} lorsque j'imprime le texte. Je pensais que ce n'était pas la conversion de l'audio. Cependant, le Json obj a deux lignes. et la deuxième ligne a l'audio en texte. pour l'imprimer, nous avons besoin de l'analyser. Oh j'ai aussi connu beaucoup de problèmes avec les importations, et les références à l'aide de relevés.
mais enfin, ce code fonctionne.
OriginalL'auteur tnecniv