2014-11-29 6 views
1

Я использую Java распознавания речи API - Джарвис, расположенный на https://github.com/lkuza2/java-speech-apiJava Speech API нулевой ответ

Однако, когда я запускаю мое приложение, я получаю сообщение об ошибке: Сервер вернул HTTP-код ответа: 400 для URL: https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=en-US&maxresults=1 (Это это URL-адрес, который этот api использует для получения ответа от Google)

Я также создал ключ API, как упоминалось в предыдущих сообщениях, и попытался использовать URL-адрес (это API версии 2): www.google.com/speech -api/v2/признать? output = json & lang = en-US & key = MYKey ". Но в этом случае я получаю нулевой ответ от Google.

Неужели кто-нибудь скажет мне, как обойти это?

+2

400 - это плохая просьба. Убедитесь, что вы отправляете через API правильно. – Makoto

+0

@Makoto Это URL, который использует API. Я также попытался использовать URL V2 (https://www.google.com/speech-api/v2/recognize?output=json&lang=en-US&key=MYKey). Я вижу, что из Google Консоли разработчика было запрошено 31 запрос на API-интерфейс Google. Но я получаю нулевой ответ. Мой вопрос: «Действительно ли этот API работает?» – Sudatta

+0

BTW Я использую пример, указанный в [link] (http://stackoverflow.com/questions/18815235/can-i-use-google-speech-recognition-api-in-my-desktop-application?rq=1) – Sudatta

ответ

1

я изменить некоторые вещи из класса распознаватель:

я изменю GOOGLE_RECOGNIZER_URL константа:

private static final String GOOGLE_RECOGNIZER_URL = "https://www.google.com/speech-api/v2/recognize?output=json&lang=en-us&key=YOUR_KEY"; 

Тогда я изменил этот метод, поскольку данные отклика 2 линии

private String rawRequest(File inputFile, int maxResults, int sampleRate) throws IOException 

Первая строка (та, которая читается и отправляется) является нулевой (я действительно не знаю почему), а вторая строка имеет ответ распознанной речи. Для этого вы должны прочитать вторую строку (не знаю, если есть лучше способ):

String response = br.readLine(); 
    response = br.readLine(); 
    br.close(); 
    return response; 

Тогда я изменить этот метод, я думаю, что он использует ответ v1 URL или что-то, потому что этот метод ищет высказывание в ответ json, и нет никакого ключа высказывания.

private void parseResponse(String rawResponse, GoogleResponse googleResponse) 
    if (rawResponse == null) 
     return; 

    JSONObject jsonObject = new JSONObject(rawResponse); 
    JSONArray jsonArray= (JSONArray) jsonObject.get("result"); 
    JSONArray jsonArrayResult = (JSONArray) jsonArray.getJSONObject(0).get("alternative"); 
    googleResponse.setResponse(jsonArrayResult.getJSONObject(0).get("transcript").toString()); 
    googleResponse.setConfidence(jsonArrayResult.getJSONObject(0).get("confidence").toString()); 

Я новичок с библиотекой JSon так что может быть лучше и более короткий путь, но это работает для меня!