google-api speech-recognition google-cloud-speech

google api - El resultado de la API de reconocimiento de voz de Google está vacío



google-api speech-recognition (3)

El resultado de la API de reconocimiento de voz de Google podría estar vacío porque los parámetros son incorrectos. Mi sugerencia es primero analizar las propiedades de audio, por ejemplo con herramientas de línea de comandos como ffmpeg.

Lista de formatos de codificación de audio

Información de códigos de idioma

Mi ejemplo completo:

$ 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

luego use la configuración correcta:

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))

Entonces el servicio de transcripción funciona:

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

Estoy realizando una solicitud asincrónica a la API de Google Cloud Speech, y no sé cómo obtener el resultado de la operación:

Solicitud POST: https://speech.googleapis.com/v1beta1/speech:asyncrecognize

Cuerpo:

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

Que devuelve:

{ "name": "469432517" }

Entonces, hago una POST: https://speech.googleapis.com/v1beta1/operations/469432517

Que devuelve:

{ "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" } }

Necesito obtener el resultado de la operación: el texto transcrito.

¿Cómo puedo hacer eso?


Tengo este problema también. El problema puede estar con la codificación y la velocidad. Así es como encontré cuál es la codificación y velocidad apropiadas:

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))


Tienes el resultado de la operación y está vacío. La razón del resultado vacío es la falta de coincidencia de formato. Debería haber enviado el archivo "LINEAR16" (datos PCM sin comprimir, básicamente archivo WAV) e intenta enviar FLAC (formato comprimido).

Otra razón del resultado vacío podría ser una frecuencia de muestreo incorrecta, un número incorrecto de canales, etc.

Por último, el archivo con puro silencio dará como resultado una respuesta vacía.