1

我正在做一个语音识别项目。我正在使用谷歌语音识别 api。我已经使用 dockerfile 在 GCP flex 环境中部署了 django 项目。

Dockerfile:

FROM gcr.io/google-appengine/python

RUN apt-get update
RUN apt-get install libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 -y
RUN apt-get install python3-pyaudio
RUN virtualenv -p python3.7 /env

ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt

ADD . /app

CMD gunicorn -b :$PORT main:app

app.yaml 文件:

runtime: custom
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 3

用于获取语音输入的代码。

import speech_recognition as sr
r = sr.Recognizer()

with sr.Microphone(device_index=0) as source:
        print("speak")
        audio = r.listen(source)
        try:
            voice_data =" " + r.recognize_google(audio)

我收到错误消息:断言错误 - 设备索引超出范围(0 个设备可用;设备索引应介于 0 和 -1 之间)。

# set up PyAudio
        self.pyaudio_module = self.get_pyaudio()
        audio = self.pyaudio_module.PyAudio()
        try:
            count = audio.get_device_count()  # obtain device count
            if device_index is not None:  # ensure device index is in range
                assert 0 <= device_index < count, "Device index out of range ({} devices available; device index should be between 0 and {} inclusive)".format(count, count - 1) …
            if sample_rate is None:  # automatically set the sample rate to the hardware's default sample rate if not specified
                device_info = audio.get_device_info_by_index(device_index) if device_index is not None else audio.get_default_input_device_info()
                assert isinstance(device_info.get("defaultSampleRate"), (float, int)) and device_info["defaultSampleRate"] > 0, "Invalid device info returned from PyAudio: {}".format(device_info)
                sample_rate = int(device_info["defaultSampleRate"])
        except Exception:
            audio.terminate()

当我访问 url 时,它无法检测到音频设备。我需要检测来自托管 web 应用程序的声音。我可以做些什么来解决这个问题?

4

1 回答 1

0

似乎出现错误是因为 AppEngine 的 VM 实例中没有声卡。即使安装了声卡/驱动程序,我想知道如何将麦克风设备连接到实例。

此问题标有 label google-speech-api,但您共享的代码中未使用Speech API 客户端库。相反,它使用 python 包SpeechRecognition。假设您要使用 Speech API Client Libraries,您需要使用streaming_recognize(),恐怕您需要更改从网络用户麦克风而不是本地设备麦克风获取语音输入的代码。

此链接中,我们可以找到从文件流式传输的示例,请注意流式识别将即时转换语音数据,并且不会像其他方法那样等待操作完成。我不是 python 专家,但从这个例子中,你需要更改这一行以从其他来源(从网络用户的麦克风)读取:

with io.open('./hello.wav', 'rb') as stream:

您需要audio: true在网络应用程序中执行类似以下 ( ) 的操作才能从用户的麦克风中读取信息,请参阅此链接以获取更多参考:

navigator.mediaDevices.getUserMedia({ audio: true, video: false })
      .then(handleSuccess);
  

使用这种方法的完整示例是Google Cloud Speech Node with Socket Playground指南。您可能希望重用一些 NodeJS 代码来将其连接到您当前的 python 应用程序。顺便说一句,NodeJS 也可以在 AppEngine Flex 中使用

于 2020-08-26T20:24:51.060 回答