Результат API распознавания речи Google пуст

Я выполняю асинхронный запрос к Google Cloud Speech 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" }

Итак, я делаю POST: https://speech.googleapis.com/v1beta1/operations/469432517 < / а>

Что возвращает:

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

Мне нужен результат операции: расшифрованный текст.

Как я могу это сделать?


person Bruno    schedule 11.08.2016    source источник


Ответы (3)


У вас есть результат операции, и он пустой. Причина пустого результата - несоответствие формата. Вы должны были отправить файл "LINEAR16" (несжатые данные PCM, в основном файл WAV) и попытаться отправить FLAC (сжатый формат).

Другой причиной пустого результата может быть неправильная частота дискретизации, неправильное количество каналов и так далее.

Наконец, файл с чистой тишиной приведет к пустому ответу.

person Nikolay Shmyrev    schedule 12.08.2016
comment
Я отправлял в асинхронную операцию FLAC с теми же характеристиками, что и синхронизация. Теперь я преобразовал файл WAV в RAW и отлично работает! См. Преобразование sox: sox audio.wav -c 1 -r 16000 -b 16 audio.raw - person Bruno; 12.08.2016
comment
Мне нужно было выполнить следующее преобразование с помощью sox: sox --volume=0.5 audio.wav --encoding=signed-integer --endian=little --channel=1 --rate=16000 --bits=16 audio.raw (см. Также cloud. google.com/speech-to-text/docs/support#troubleshooting) - person asmaier; 13.08.2018

У меня тоже есть эта проблема. Проблема может быть в кодировке и скорости. Вот как я нашел подходящую кодировку и скорость:

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))
person Arman Fatahi    schedule 25.01.2018
comment
поделитесь результатами своего кода для ленивых из нас, пожалуйста? :-) - person Blundell; 18.01.2019
comment
Я только что проверил свои коды год назад. Я предполагаю, что результат будет другим, если они отправят файл с разных клиентов, iOS, Andriod, Web, Win и т. Д. Используйте эту функцию, чтобы узнать, как открыть файл. - person Arman Fatahi; 18.01.2019

Результат API распознавания речи Google может быть пустым из-за неверных параметров. Мое предложение - сначала проанализировать свойства звука, например, с помощью инструментов командной строки, таких как ffmpeg.

Кодирование аудио список форматов

Информация о языковых кодах

Мой полный пример:

$ 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
person alemol    schedule 10.01.2018