Google Speech API возвращает пустой результат для некоторых, но не для других (C #)

ПУСТОЙ результат выглядит так:

json[0] "{\"result\":[]}"
json[1] ""

НЕПУСТОЙ результат (желаемый результат) выглядит так:

json[0] "{\"result\":[]}"
json[1] "{\"result\":[{\"alternative\":[{\"transcript\":\"good morning Google how are you feeling today\",\"confidence\":0.987629}],\"final\":true}],\"result_index\":0}"
json[2] ""

У меня есть эта функция, которая должна взять файл ".flac" и превратить его в текст. По какой-то причине только эти два образца файла ".flac" возвращают строку при передаче через Google Speech API, другие файлы flac возвращают ПУСТОЙ результат. Та же проблема, что и у этих парней: ссылка

Вот все мои файлы flac: ссылка

my.flac и this_is_a_test.flac работают отлично, Google Speech API предоставляет мне объект jason с текстом в нем.

однако recorded.flac НЕ работает с Google Speech API и дает мне ПУСТОЙ объект json.

ОТЛАДКА:

  1. Я подумал, что проблема в микрофоне, и я записал recorded.flac много раз, громко и четко, и преобразовал его во flac с помощью ffmpeg. Но Google Speech API по-прежнему не может распознать recorded.flac
  2. # P8 #
    # P9 #
    # P10 #

_HWR_SpeechToText.ContentType = "audio / x-flac; rate = 44100";

Then, none of them worked, not a single flac file. so i changed it back.

Вот мой код API речи Google, который превращает файлы FLAC в ТЕКСТ (я не думаю, что это необходимо, но что угодно):

public void convert_to_text()
    {
        FileStream fileStream = File.OpenRead("recorded.flac");//my.flac
        MemoryStream memoryStream = new MemoryStream();
        memoryStream.SetLength(fileStream.Length);
        fileStream.Read(memoryStream.GetBuffer(), 0, (int)fileStream.Length);
        byte[] BA_AudioFile = memoryStream.GetBuffer();
        HttpWebRequest _HWR_SpeechToText = null;
        _HWR_SpeechToText = (HttpWebRequest)HttpWebRequest.Create("https://www.google.com/speech-api/v2/recognize?output=json&lang=en-us&key=" + ACCESS_GOOGLE_SPEECH_KEY);
        _HWR_SpeechToText.Credentials = CredentialCache.DefaultCredentials;
        _HWR_SpeechToText.Method = "POST";
        _HWR_SpeechToText.ContentType = "audio/x-flac; rate=44100";
        _HWR_SpeechToText.ContentLength = BA_AudioFile.Length;
        Stream stream = _HWR_SpeechToText.GetRequestStream();
        stream.Write(BA_AudioFile, 0, BA_AudioFile.Length);
        stream.Close();
        HttpWebResponse HWR_Response = (HttpWebResponse)_HWR_SpeechToText.GetResponse();

        StreamReader SR_Response = new StreamReader(HWR_Response.GetResponseStream());
        string responseFromServer = (SR_Response.ReadToEnd());

        String[] jsons = responseFromServer.Split('\n');
        foreach (String j in jsons)
        {
            dynamic jsonObject = JsonConvert.DeserializeObject(j);
            if (jsonObject == null || jsonObject.result.Count <= 0)
            {
                continue;
            }
            text = jsonObject.result[0].alternative[0].transcript;
            jsons = null;
        }
        label1.Content = text;
    }

person Awesome_girl    schedule 23.03.2015    source источник
comment
Ссылка на ваши файлы FLAC не работает.   -  person John Wiseman    schedule 10.10.2015


Ответы (1)


Сначала убедитесь, что файл является 16-битным PCM Mono, а не стерео. Легко сделать с http://www.audacityteam.org/

введите описание изображения здесь

Затем вы можете использовать этот простой код для этого:

string api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
string path = @"C:\temp\good-morning-google.flac";

byte[] bytes = System.IO.File.ReadAllBytes(path);

WebClient client = new WebClient();
client.Headers.Add("Content-Type", "audio/x-flac; rate=44100");
byte[] result = client.UploadData(string.Format(
                "https://www.google.com/speech-api/v2/recognize?client=chromium&lang=en-us&key={0}", api_key), "POST", bytes);

string s = client.Encoding.GetString(result);
person Kristofer Källsbo    schedule 12.02.2016