4

I downloaded Google Cloud SDK by following https://cloud.google.com/sdk/docs/quickstart-debian-ubuntu . And I downloaded Google Speech API by following https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/speech/cloud-client . When I run python transcribe.py resources/audio.raw, the error happens. I got an error,TransportError: HTTPSConnectionPool(host='accounts.google.com', port=443): Max retries exceeded with url: /o/oauth2/token (Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)'),)) )>)

Traceback is

E1019 18:46:20.868555489    3813 plugin_credentials.c:74]    Getting metadata from plugin failed with error: Traceback (most recent call last):
  File "src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi", line 154, in grpc._cython.cygrpc.plugin_get_metadata (src/python/grpcio/grpc/_cython/cygrpc.c:7054)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/grpc/_plugin_wrapping.py", line 106, in __call__
    AuthMetadataPluginCallback(wrapped_cygrpc_callback))
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/auth/transport/grpc.py", line 73, in __call__
    callback(self._get_authorization_headers(context), None)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/auth/transport/grpc.py", line 61, in _get_authorization_headers
    headers)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/auth/credentials.py", line 121, in before_request
    self.refresh(request)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/oauth2/credentials.py", line 117, in refresh
    self._client_secret))
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/oauth2/_client.py", line 189, in refresh_grant
    response_data = _token_endpoint_request(request, token_uri, body)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/oauth2/_client.py", line 104, in _token_endpoint_request
    method='POST', url=token_uri, headers=headers, body=body)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/auth/transport/requests.py", line 115, in __call__
    raise exceptions.TransportError(exc)
TransportError: HTTPSConnectionPool(host='accounts.google.com', port=443): Max retries exceeded with url: /o/oauth2/token (Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)'),))

Traceback (most recent call last):
  File "transcribe.py", line 94, in <module>
    transcribe_file(args.path)
  File "transcribe.py", line 52, in transcribe_file
    response = client.recognize(config, audio)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/cloud/gapic/speech/v1/speech_client.py", line 201, in recognize
    return self._recognize(request, options)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/gax/api_callable.py", line 452, in inner
    return api_caller(api_call, this_settings, request)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/gax/api_callable.py", line 438, in base_caller
    return api_call(*args)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/gax/api_callable.py", line 376, in inner
    return a_func(*args, **kwargs)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/gax/retry.py", line 127, in inner
    ' classified as transient', exception)
google.gax.errors.RetryError: RetryError(Exception occurred in retry method that was not classified as transient, caused by <_Rendezvous of RPC that terminated with (StatusCode.UNAUTHENTICATED, Traceback (most recent call last):
  File "src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi", line 154, in grpc._cython.cygrpc.plugin_get_metadata (src/python/grpcio/grpc/_cython/cygrpc.c:7054)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/grpc/_plugin_wrapping.py", line 106, in __call__
    AuthMetadataPluginCallback(wrapped_cygrpc_callback))
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/auth/transport/grpc.py", line 73, in __call__
    callback(self._get_authorization_headers(context), None)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/auth/transport/grpc.py", line 61, in _get_authorization_headers
    headers)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/auth/credentials.py", line 121, in before_request
    self.refresh(request)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/oauth2/credentials.py", line 117, in refresh
    self._client_secret))
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/oauth2/_client.py", line 189, in refresh_grant
    response_data = _token_endpoint_request(request, token_uri, body)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/oauth2/_client.py", line 104, in _token_endpoint_request
    method='POST', url=token_uri, headers=headers, body=body)
  File "/home/pi/py2env/local/lib/python2.7/site-packages/google/auth/transport/requests.py", line 115, in __call__
    raise exceptions.TransportError(exc)
TransportError: HTTPSConnectionPool(host='accounts.google.com', port=443): Max retries exceeded with url: /o/oauth2/token (Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)'),))
)>)

I installed module can be used https to ubuntu,so I really cannnot understand why this error happens.Authentication of Google Cloud API is ok,so I do not know this is for what kind of error.How should I fix this?

wescpy
  • 10,689
  • 3
  • 54
  • 53
user8504021
  • 303
  • 5
  • 23

1 Answers1

0

It looks a grpcio issue that's causing the error. I suggest installing the latest version the Cloud Speech API client library (which specifies its required version of grpcio) and try again. Rather than downloading it from GH, I suggest using pip install instead.

"Hello World" s2t-demo.py example (Py2&3 compatible):

from __future__ import print_function
from google.cloud import speech

# Py2 vs. 3 library compatibility
recogcfg = speech.RecognitionConfig if hasattr(
        speech, 'RecognitionConfig') else speech.enums.RecognitionConfig

# build request metadata
FILE = 'gs://YOUR_BUCKET/AUDIO_FILE.wav'
body = {
    'audio': {'uri': FILE},
    'config': {
        'language_code': 'en-US',
        'encoding': recogcfg.AudioEncoding.LINEAR16,
    },
}

# call Speech-to-Text API to transcribe text from specified audio file
S2T = speech.SpeechClient()
rsp = S2T.recognize(**body).results[0].alternatives[0]
print('** %.2f%% confident of this transcript of %r:\n\t%r' % (
        rsp.confidence*100., FILE, rsp.transcript))

Recommended steps (recommend using a virtualenv):

  1. gcloud auth application-default login - setup credentials
  2. pip install -U pip google-cloud-speech - update pip and install client library
  3. pip list - confirm google-cloud-speech v1.3.4+ and grpcio 1.41.1+
  4. gsutil cp AUDIO_FILE.wav gs://YOUR_BUCKET - copy audio file to Cloud Storage
  5. python s2t-demo.py - run app and see audio file transcription

Example output:

$ python s2t-demo.py
** 93.05% confident of this transcript of 'gs://bucket/text.wav':
        'Google headquarters in Mountain View unveiled the new Android phone at the Consumer Electronics Show Sundar pichai said in his keynote that users love their new Android phones'

The code sample works for both Python 2 and 3 in case you want to upgrade sooner than later.

wescpy
  • 10,689
  • 3
  • 54
  • 53