2016-08-11 2 views
7

빈, 그리고 나는 작업의 결과를 얻는 방법을 모르는 :구글 음성 인식 API 결과는 내가 Google 클라우드 음성 API에 대한 비동기 요청을 수행하고있어

요청 POST :https://speech.googleapis.com/v1beta1/speech:asyncrecognize

바디 :

{ 
    "config":{ 
       "languageCode" : "pt-BR", 
       "encoding" : "LINEAR16", 
       "sampleRate" : 16000 
      }, 
    "audio":{ 
       "uri":"gs://bucket/audio.flac" 
      } 
} 

반환

전사 된 텍스트 : 나는 작업의 결과를 얻을 필요가

{ 
    "name": "469432517", 
    "metadata": { 
     "@type": "type.googleapis.com/google.cloud.speech.v1beta1.AsyncRecognizeMetadata", 
     "progressPercent": 100, 
     "startTime": "2016-08-11T21:18:29.985053Z", 
     "lastUpdateTime": "2016-08-11T21:18:31.888412Z" 
    }, 
    "done": true, 
    "response": { 
        "@type": "type.googleapis.com/google.cloud.speech.v1beta1.AsyncRecognizeResponse" 
       } 
} 

: 리턴 https://speech.googleapis.com/v1beta1/operations/469432517

:

{ "name": "469432517" }

그래서, 나는 POST을한다.

어떻게하면됩니까?

답변

3

당신은 작업의 결과를 가지고 그것은 비어 있습니다. 결과가 비어있는 이유는 형식이 일치하지 않기 때문입니다. "LINEAR16"파일 (PCM 비 압축 데이터, 기본적으로 WAV 파일)을 제출해야하며 FLAC (압축 형식)을 제출하려고 시도해야합니다. 빈 결과

다른 이유는 등 잘못된 샘플 레이트, 채널의 잘못된 번호를 수 있습니다.

마지막으로, 순수한 침묵을 가진 파일이 비어 응답 발생합니다. 매개 변수가 올바르지 않기 때문에

+1

나는 sync와 동일한 특성으로 비동기 작업을 보내고있었습니다. 이제 wav 파일을 RAW로 변환하고 잘 작동합니다! sox 변환을 참조하십시오. sox audio.wav -c 1 -r 16000 -b 16 audio.raw – Bruno

1

구글 음성 인식 API 결과는 빈 될 수 있습니다. 필자의 제안은 ffmpeg와 같은 명령 줄 도구와 같이 오디오 속성을 먼저 분석하는 것입니다.

Audio encoding formats list

Language codes info

내 완전한 예 :

$ ffmpeg -i 1515244791.flac -hide_banner 

Input #0, flac, from '1515244791.flac': 
    Metadata: 
    ARTIST   : artist 
    YEAR   : year 
    Duration: 00:00:59.98, start: 0.000000, bitrate: 363 kb/s 
    Stream #0:0: Audio: flac, 44100 Hz, mono, s16 

는 다음 올바른 설정 사용 :

import io 
from google.cloud import speech 
from google.cloud.speech import enums 
from google.cloud.speech import types 

LANG = "es-MX" 
RATE = 44100 
ENC = enums.RecognitionConfig.AudioEncoding.FLAC 


def transcribe_streaming(stream_file): 
    """Streams transcription of the given audio file.""" 

    client = speech.SpeechClient() 

    with io.open(stream_file, 'rb') as audio_file: 
     content = audio_file.read() 

    # In practice, stream should be a generator yielding chunks of audio data. 
    stream = [content] 
    requests = (types.StreamingRecognizeRequest(audio_content=chunk) 
       for chunk in stream) 

    config = types.RecognitionConfig(
     encoding=ENC, 
     sample_rate_hertz=RATE, 
     language_code=LANG) 
    streaming_config = types.StreamingRecognitionConfig(config=config) 

    # streaming_recognize returns a generator. 
    print(streaming_config) 

    responses = client.streaming_recognize(streaming_config, requests) 

    for response in responses: 
     print(response) 
     # Once the transcription has settled, the first result will contain the 
     # is_final result. The other results will be for subsequent portions of 
     # the audio. 
     for result in response.results: 
      print('Finished: {}'.format(result.is_final)) 
      print('Stability: {}'.format(result.stability)) 
      alternatives = result.alternatives 
      # The alternatives are ordered from most likely to least. 
      for alternative in alternatives: 
       print('Confidence: {}'.format(alternative.confidence)) 
       print('Transcript: {}'.format(alternative.transcript)) 

그래서 전사 서비스는 작동합니다

config { 
    encoding: FLAC 
    sample_rate_hertz: 44100 
    language_code: "es-MX" 
} 

results { 
    alternatives { 
    transcript: "lo tienes que saber tienes derecho a recibir informaci\303\263n de todas las instituciones que reciben recursos p\303\272blicos M\303\251xico 4324 plataformadetransparencia.org.mx derecho Porque adem\303\241s de defender tu voto te atiende si no se respetan tus derechos pol\303\255tico-electorales imparten justicia cuando existen inconformidades en elecciones internas de partidos pol\303\255ticos comit\303\251s ciudadanos y consejos de los pueblos resuelve controversias en elecciones de autoridades en la Ciudad de M\303\251xico y en consulta ciudadana en tu elecci\303\263n MVS 102.5 espacio a las nuevas voces de la radio continuamos" 
    confidence: 0.9409132599830627 
    } 
    is_final: true 
} 

Finished: True 
Stability: 0.0 
Confidence: 0.9409132599830627 
Transcript: lo tienes que saber tienes derecho a recibir información de todas las instituciones que reciben recursos públicos México 4324 plataformadetransparencia.org.mx derecho Porque además de defender tu voto te atiende si no se respetan tus derechos político-electorales imparten justicia cuando existen inconformidades en elecciones internas de partidos políticos comités ciudadanos y consejos de los pueblos resuelve controversias en elecciones de autoridades en la Ciudad de México y en consulta ciudadana en tu elección MVS 102.5 espacio a las nuevas voces de la radio continuamos 
2

이 문제도 발생합니다. 인코딩 및 속도 문제가있을 수 있습니다. 다음은 적절한 인코딩 및 속도를 찾는 방법입니다.

audio = types.RecognitionAudio(content = content) 

ENCODING = [enums.RecognitionConfig.AudioEncoding.LINEAR16, enums.RecognitionConfig.AudioEncoding.FLAC,enums.RecognitionConfig.AudioEncoding.MULAW,enums.RecognitionConfig.AudioEncoding.AMR,enums.RecognitionConfig.AudioEncoding.AMR_WB,enums.RecognitionConfig.AudioEncoding.OGG_OPUS,enums.RecognitionConfig.AudioEncoding.SPEEX_WITH_HEADER_BYTE] 

SAMPLE_RATE_HERTZ = [8000, 12000, 16000, 24000, 48000] 
for enco in ENCODING: 
    for rate in SAMPLE_RATE_HERTZ: 
     config = types.RecognitionConfig(
      encoding=enco, 
      sample_rate_hertz=rate, 
      language_code='fa-IR') 

     # Detects speech in the audio file 
     response = [] 
     try: 
      response = CLIENT.recognize(config, audio) 
     except: 
      pass 
     print("-----------------------------------------------------") 
     print(str(rate) + " " + str(enco)) 
     print("response: ", str(response))