How to import google cloud speech recognition in Google App Engine (python)

若如初见. 提交于 2020-01-11 06:49:11

问题


I want to use google.cloud library on my Google App Engine python application. In my local all my tests work since I installed this library on my local. I was expecting it to be supported in GAE by default but it's not supported.

This the error I got:

from google.cloud import speech
ImportError: No module named cloud

I had a look at adding 3rd party libraries at https://cloud.google.com/appengine/docs/standard/python/tools/using-libraries-python-27

After following the instructions I got another error.

(/base/alloc/tmpfs/dynamic_runtimes/python27/54c5883f70296ec8_unzipped/python27_lib/versions/1/google/appengine/runtime/wsgi.py:263)
Traceback (most recent call last):
  File "/base/alloc/tmpfs/dynamic_runtimes/python27/54c5883f70296ec8_unzipped/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/base/alloc/tmpfs/dynamic_runtimes/python27/54c5883f70296ec8_unzipped/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/base/alloc/tmpfs/dynamic_runtimes/python27/54c5883f70296ec8_unzipped/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 85, in LoadObject
    obj = __import__(path[0])
  File "/base/data/home/apps/s~goooogle-translate/20180126t023051.407206565499030997/main.py", line 18, in <module>
    from google.cloud import speech
  File "/base/data/home/apps/s~goooogle-translate/20180126t023051.407206565499030997/lib/google/cloud/speech/__init__.py", line 22, in <module>
    from google.cloud.speech.client import Client
  File "/base/data/home/apps/s~goooogle-translate/20180126t023051.407206565499030997/lib/google/cloud/speech/client.py", line 25, in <module>
    from google.cloud.speech._gax import GAPICSpeechAPI
  File "/base/data/home/apps/s~goooogle-translate/20180126t023051.407206565499030997/lib/google/cloud/speech/_gax.py", line 17, in <module>
    from google.cloud.gapic.speech.v1.speech_client import SpeechClient
  File "/base/data/home/apps/s~goooogle-translate/20180126t023051.407206565499030997/lib/google/cloud/gapic/speech/v1/speech_client.py", line 31, in <module>
    from google.gapic.longrunning import operations_client
  File "/base/data/home/apps/s~goooogle-translate/20180126t023051.407206565499030997/lib/google/gapic/longrunning/operations_client.py", line 45, in <module>
    from google.gax import api_callable
  File "/base/data/home/apps/s~goooogle-translate/20180126t023051.407206565499030997/lib/google/gax/__init__.py", line 36, in <module>
    import multiprocessing as mp
  File "/base/alloc/tmpfs/dynamic_runtimes/python27/54c5883f70296ec8_unzipped/python27_dist/lib/python2.7/multiprocessing/__init__.py", line 65, in <module>
    from multiprocessing.util import SUBDEBUG, SUBWARNING
  File "/base/alloc/tmpfs/dynamic_runtimes/python27/54c5883f70296ec8_unzipped/python27_dist/lib/python2.7/multiprocessing/util.py", line 41, in <module>
    from subprocess import _args_from_interpreter_flags
ImportError: cannot import name _args_from_interpreter_flags

I hardly understand this one. If you have done this before please let me know how to setup google.cloud inside GAE.


回答1:


As already answered in this other Stack Overflow post about using Client Libraries in App Engine Standard, GAE Standard does not support Google Client Libraries, so you can either go with App Engine Flexible, a Compute Engine instance or work with the REST API (which also has a Python library that works in App Engine Standard).

If you specifically need to use the google.cloud library, you will have to use App Engine Flexible and not Standard, but in case you would rather work with the Standard environment, below I share the code for a sample App Engine Standard application using Cloud Speech API through the Google API Python Client Library. This library is not built-in for GAE Standard, so you will have to vendor it as if it was a third-party library. To do so, you will have to create the lib folder in your local application's directory, and the requirements.txt file I share below, and then install this library with the command pip install -t lib/ -r requirements.txt.

Files needed to run this sample GAE Application:

requirements.txt

google-api-python-client

appengine_config.py

from google.appengine.ext import vendor

# Add any libraries install in the "lib" folder.
vendor.add('lib')

app.yaml

runtime: python27
api_version: 1
threadsafe: True

handlers:
- url: /.*
  script: main.app

main.py

import webapp2
from apiclient.discovery import build
from oauth2client.client import GoogleCredentials

class MainPage(webapp2.RequestHandler):
    # Presentation page
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write('This is a sample App Engine Standard application working with Cloud Speech API! :)\n\nGo to /speechAPI to transcribe your audio file (you will need to upload it to one of your Cloud Storage buckets)!')

class Recognize(webapp2.RequestHandler):
    # Working with Python API Client Library (NOT NEW CLIENT LIBRARIES)
    def get(self):
        # Add credentials
        credentials = GoogleCredentials.get_application_default()
        service = build('speech', 'v1', credentials=credentials)

        # Methods available in: https://developers.google.com/resources/api-libraries/documentation/speech/v1/python/latest/index.html
        collection = service.speech()

        # Build the data structure JSON-like
        data = {}
        data['audio'] = {}
        data['audio']['uri'] = 'gs://<BUCKET>/<FOLDER>/<FILE>'
        data['config'] = {}
        data['config']['encoding'] = '<ENCODING>'
        data['config']['languageCode'] = '<LANGUAGE_CODE>'
        data['config']['sampleRateHertz'] = <SAMPLE_RATE>

        # Build the request and execute it
        request = collection.recognize(body=data)
        res = request.execute()

        # Webapp2 Response
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write(res)


app = webapp2.WSGIApplication([
    ('/', MainPage),
    ('/speechAPI', Recognize),
], debug=True)

This application also works in the Local Development Server, so you can test it with the command dev_appserver.py app.yaml before deploying it to App Engine.




回答2:


Try this: sudo pip install --upgrade google-cloud-speech

Or:

I using another library,
Does this method help you up?

import speech_recognition as sp
import time

print("Say something!")

while True:
    rec = sp.Recognizer()
    with sp.Microphone() as mic:
        audio = rec.listen(mic)
    try:
        print(rec.recognize_google(audio))
    except sp.UnknownValueError:
        print("I cannot understand what you said")
        time.sleep(0.5)
        print("Say again")
    except sp.RequestError as e:
        print("Error".format(e))
    word = rec.recognize_google(audio)

    if word == 'goodbye':
        break

Installation:

sudo pip install SpeechRecognition

sudo pip install pyaudio

If you found an error:

sudo apt-get install python-pyaudio

sudo apt-get install libjack-jackd2-dev portaudio19-dev

Then again:

sudo pip install pyaudio

If you found error try this:

sudo pip install --upgrade pyaudio


来源:https://stackoverflow.com/questions/48459712/how-to-import-google-cloud-speech-recognition-in-google-app-engine-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!