【问题标题】:Google Speech Recognition API Result is EmptyGoogle 语音识别 API 结果为空
【发布时间】:2023-03-24 13:26:01
【问题描述】:

我正在向 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" }

所以,我发了一个帖子: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"
                }
}

我需要得到操作的结果:转录文本。

我该怎么做?

【问题讨论】:

    标签: google-api speech-recognition google-cloud-speech


    【解决方案1】:

    你已经得到了操作的结果,它是空的。空结果的原因是格式不匹配。您应该已经提交了“LINEAR16”文件(PCM 未压缩数据,基本上是 WAV 文件),然后您尝试提交 FLAC(压缩格式)。

    空结果的其他原因可能是采样率不正确、通道数不正确等。

    最后,纯静音的文件将导致空响应。

    【讨论】:

    • 我正在向异步操作发送具有与同步相同特征的 FLAC。现在,我将 wav 文件转换为 RAW 并且工作正常!查看 sox 转换:sox audio.wav -c 1 -r 16000 -b 16 audio.raw
    • 我需要对 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
    【解决方案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))
    

    【讨论】:

    • 请为我们这些懒惰的人分享您的代码输出? :-)
    • 我刚刚检查了一年前的代码。我猜如果他们从不同的客户端,iOS,Andriod,Web,Win等发送文件,结果会有所不同。使用该功能识别找出如何打开文件。
    【解决方案3】:

    由于参数不正确,Google Speech Recognition 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
    

    【讨论】:

      猜你喜欢
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多