【问题标题】:google cloud speech ImportError: cannot import name 'enums'谷歌云语音导入错误:无法导入名称“枚举”
【发布时间】:2021-06-08 15:41:11
【问题描述】:

我正在为我的项目使用 google-cloud-speech api。我在虚拟环境中使用 pipenv 我用

安装了 google-cloud-speech api

pipenv 安装 google-cloud-speech

pipenv 更新谷歌云语音

我关注了这个文档https://cloud.google.com/speech-to-text/docs/reference/libraries

这是我的代码:

google.py:

# !/usr/bin/env python
# coding: utf-8
import argparse
import io
import sys
import codecs
import datetime
import locale
import os

from google.cloud import speech_v1 as speech
from google.cloud.speech import enums
from google.cloud.speech import types

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.path.join("alt_speech_dev_01-fa5fec6806d9.json")
def get_model_by_language_id(language_id):
    model = ''
    if language_id == 1:
        model = 'ja-JP'
    elif language_id == 2:
        model = 'en-US'
    elif language_id == 3:
        model = "zh-CN"
    else:
        raise ('Not Match Lang')
    return model

def transcribe_gcs_without_speech_contexts(audio_file_path, model):
    client = speech.SpeechClient()
    with io.open(audio_file_path, 'rb') as audio_file:
        content = audio_file.read()
        audio = types.RecognitionAudio(content=content)

    config = {
        "encoding": enums.RecognitionConfig.AudioEncoding.FLAC,
        "sample_rate_hertz": 16000,
        "languageCode": model
        }



    operation = client.long_running_recognize(config, audio)
    print('Waiting for operation to complete...')
    operationResult = operation.result()

    ret=''
    for result in operationResult.results:
      for alternative in result.alternatives:
          ret = alternative.transcript

    return ret

def transcribe_gcs(audio_file_path, model, keywords=None):
    client = speech.SpeechClient()
    with io.open(audio_file_path, 'rb') as audio_file:
        content = audio_file.read()
        audio = types.RecognitionAudio(content=content)

    config = {
        "encoding": enums.RecognitionConfig.AudioEncoding.FLAC,
        "sample_rate_hertz": 16000,
        "languageCode": model,
        "speech_contexts":[{"phrases":keywords}]
        }



    operation = client.long_running_recognize(config, audio)
    print('Waiting for operation to complete...')
    operationResult = operation.result()

    ret=''
    for result in operationResult.results:
      for alternative in result.alternatives:
          ret = alternative.transcript

    return ret

transcribe_gcs_without_speech_contexts('alt_en.wav', get_model_by_language_id(2)) 

当我尝试使用

运行 python 文件时

python google.py

它返回错误 ImportError: cannot import name 'SpeechClient' with the following traceback:

Traceback (most recent call last):
  File "google.py", line 11, in <module>
    from google.cloud import speech_v1 as speech
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/google/cloud/speech_v1/__init__.py", line 17, in <module>
    from google.cloud.speech_v1.gapic import speech_client
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/google/cloud/speech_v1/gapic/speech_client.py", line 18, in <module>
    import pkg_resources
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3241, in <module>
    @_call_aside
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3225, in _call_aside
    f(*args, **kwargs)
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3269, in _initialize_master_working_set
    for dist in working_set
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3269, in <genexpr>
    for dist in working_set
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2776, in activate
    declare_namespace(pkg)
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2275, in declare_namespace
    _handle_ns(packageName, path_item)
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2208, in _handle_ns
    loader.load_module(packageName)
  File "/home/hoanglinh/Documents/practice_speech/google.py", line 12, in <module>
    from google.cloud.speech import enums
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/google/cloud/speech.py", line 19, in <module>
    from google.cloud.speech_v1 import SpeechClient
ImportError: cannot import name 'SpeechClient'

我做错了吗?当我在网上搜索错误时,只有 1 个问题没有答案

更新: 我从

google.cloud 将 Speech_v1 导入为语音

到这里

从 google.cloud 导入语音

现在我遇到了另一个返回错误,就像这样

Traceback (most recent call last):
  File "google.py", line 11, in <module>
    from google.cloud import speech
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/google/cloud/speech.py", line 19, in <module>
    from google.cloud.speech_v1 import SpeechClient
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/google/cloud/speech_v1/__init__.py", line 17, in <module>
    from google.cloud.speech_v1.gapic import speech_client
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/google/cloud/speech_v1/gapic/speech_client.py", line 18, in <module>
    import pkg_resources
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3241, in <module>
    @_call_aside
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3225, in _call_aside
    f(*args, **kwargs)
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3269, in _initialize_master_working_set
    for dist in working_set
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3269, in <genexpr>
    for dist in working_set
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2776, in activate
    declare_namespace(pkg)
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2275, in declare_namespace
    _handle_ns(packageName, path_item)
  File "/home/hoanglinh/Documents/practice_speech/.venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2208, in _handle_ns
    loader.load_module(packageName)
  File "/home/hoanglinh/Documents/practice_speech/google.py", line 12, in <module>
    from google.cloud.speech import enums
ImportError: cannot import name 'enums'

以前有人试过这个库吗?因为仅遵循其文档似乎存在很多错误

【问题讨论】:

  • 你是怎么解决的?我收到类似的错误:ImportError: cannot import name 'enums' from 'google.cloud.speech_v1' 当我删除 v1 然后得到:ImportError: cannot import name 'enums' from ' google.cloud.speech' 有什么想法可以解决吗?

标签: python import google-speech-api pipenv google-cloud-speech


【解决方案1】:

看到以下错误信息

    from google.cloud.speech import enums
ImportError: cannot import name 'enums' 

如果执行了谷歌语音 api 的“新”安装。请参阅this page

如果您更新了 api,同样地,使用 nanos 属性将导致以下消息

AttributeError: 'datetime.timedelta' object has no attribute 'nanos'

请参阅this page。使用“微秒”而不是“纳米”。

【讨论】:

    【解决方案2】:
    • 第一个解决方案尝试检查您的 python3.6/site-packages/google/cloud 是否有 Speech_v1。如果没有,需要先安装
    • 第二种解决方案尝试检查您的 python3.6/site-packages/google/cloud 是否存在现有语音文件,如果存在则导入的原因是阴影。因为你的别名是'speech' 希望这会有所帮助

    如果您使用 Speech_v1,请尝试这行代码:

    from google.cloud import speech_v1 as speech
    from google.cloud.speech_v1 import enums
    from google.cloud.speech_v1 import types
    

    演讲:

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

    【讨论】:

    • python3.6/site-packages/google/cloud路径下有个speech.py​​文件
    • 更改您的 Speech_v1 别名并添加 from google.cloud import speech
    • 您收到此错误是因为 Speech_v1 没有 SpeechClient() 模块。 SpeechClient() 在 Speech.py​​ 中
    • 现在它从 google.cloud.speech import enums ImportError: cannot import name 'enums' 返回,这听起来像是退后一步:/
    • 该问题与谷歌云语音的新更新有关。检查上面的更新
    【解决方案3】:

    如果您可以查看this link。 Google 已将 AudioEncodings 移至 google.cloud.speech_v1.types 下,您可以通过导入类型然后运行以下代码来使用它:

    from google.cloud.speech_v1 import types
    
    types.RecognitionConfig.AudioEncoding.LINEAR16
    

    【讨论】:

      【解决方案4】:

      来自 Google Cloud 文档:

      枚举和类型 警告:重大变化

      The submodules enums and types have been removed.
      

      之前:

      from google.cloud import videointelligence
      
      features = [videointelligence.enums.Feature.SPEECH_TRANSCRIPTION]
      video_context = videointelligence.types.VideoContext()
      After:
      
      from google.cloud import videointelligence
      
      features = [videointelligence.Feature.SPEECH_TRANSCRIPTION]
      video_context = videointelligence.VideoContext()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-04
        • 1970-01-01
        • 2020-12-22
        • 1970-01-01
        • 2017-08-11
        • 2021-02-19
        • 2014-01-29
        • 2016-11-21
        相关资源
        最近更新 更多