【问题标题】:Displaying Google Cloud Speech-to-Text显示 Google Cloud Speech-to-Text
【发布时间】:2019-04-16 19:43:36
【问题描述】:

我正在尝试使用 Google Cloud Speech-to-Text,到目前为止,我已经让 python transcribe_streaming_mic 代码正常工作,它正在向我的终端输出实时语音转录,但是如何让它输出该文本像their front page? 上的例子一样活到一个网站文本框?:

我已经查看了文档中的一些示例代码,但除非我已经失明并且没有看到它,否则我找不到任何网站输出示例代码。

谢谢!

【问题讨论】:

    标签: javascript python google-cloud-platform audio-streaming speech-to-text


    【解决方案1】:

    Google's Speech-to-Text landing page 上的演示:

    使用some JavaScript处理音频文件的上传和现场录制以展示API:

    <div class="l-showcase">
      <div class="text-center">
        <p class="text-title">Convert your speech to text right now</p>
        <p class="text-body">Select a language and click "Start Now" to begin recording</p>
      </div>
      <!-- DEMO -->
      <div
          id="streaming_demo_section"
          data-embed="sp-app"
          data-force-polling="true"
          data-polyfill-url="https://www.gstatic.com/external_hosted/polymer/v2/webcomponents-lite.js"
          data-url="https://www.gstatic.com/cloud-site-ux/speech/speech.min.html">
      </div>
    </div>
    

    Google 在其 Web Fundamentals 文档中提供了一些有关如何录制来自浏览器用户的音频的示例:Recording Audio from the User

    您必须 1) 录制用户的音频,2) 将音频发布到 Speech-To-Text API,以及 3) 将响应显示回用户的浏览器。

    【讨论】:

      【解决方案2】:

      对于 Python 服务器部分,您可以关注此code。 在客户端,您必须通过 websocket 连接将音频流发送到服务器。

      为了测试 Python 服务器,你可以使用这个code

      import asyncio
      import websockets
      import json
      import threading
      from six.moves import queue
      from google.cloud import speech
      from google.cloud.speech import types
      
      
      IP = '0.0.0.0'
      PORT = 8000
      
      class Transcoder(object):
          """
          Converts audio chunks to text
          """
          def __init__(self, encoding, rate, language):
              self.buff = queue.Queue()
              self.encoding = encoding
              self.language = language
              self.rate = rate
              self.closed = True
              self.transcript = None
      
          def start(self):
              """Start up streaming speech call"""
              threading.Thread(target=self.process).start()
      
          def response_loop(self, responses):
              """
              Pick up the final result of Speech to text conversion
              """
              for response in responses:
                  if not response.results:
                      continue
                  result = response.results[0]
                  if not result.alternatives:
                      continue
                  transcript = result.alternatives[0].transcript
                  if result.is_final:
                      self.transcript = transcript
      
          def process(self):
              """
              Audio stream recognition and result parsing
              """
              #You can add speech contexts for better recognition
              cap_speech_context = types.SpeechContext(phrases=["Add your phrases here"])
              client = speech.SpeechClient()
              config = types.RecognitionConfig(
                  encoding=self.encoding,
                  sample_rate_hertz=self.rate,
                  language_code=self.language,
                  speech_contexts=[cap_speech_context,],
                  model='command_and_search'
              )
              streaming_config = types.StreamingRecognitionConfig(
                  config=config,
                  interim_results=False,
                  single_utterance=False)
              audio_generator = self.stream_generator()
              requests = (types.StreamingRecognizeRequest(audio_content=content)
                          for content in audio_generator)
      
              responses = client.streaming_recognize(streaming_config, requests)
              try:
                  self.response_loop(responses)
              except:
                  self.start()
      
          def stream_generator(self):
              while not self.closed:
                  chunk = self.buff.get()
                  if chunk is None:
                      return
                  data = [chunk]
                  while True:
                      try:
                          chunk = self.buff.get(block=False)
                          if chunk is None:
                              return
                          data.append(chunk)
                      except queue.Empty:
                          break
                  yield b''.join(data)
      
          def write(self, data):
              """
              Writes data to the buffer
              """
              self.buff.put(data)
      
      
      async def audio_processor(websocket, path):
          """
          Collects audio from the stream, writes it to buffer and return the output of Google speech to text
          """
          config = await websocket.recv()
          if not isinstance(config, str):
              print("ERROR, no config")
              return
          config = json.loads(config)
          transcoder = Transcoder(
              encoding=config["format"],
              rate=config["rate"],
              language=config["language"]
          )
          transcoder.start()
          while True:
              try:
                  data = await websocket.recv()
              except websockets.ConnectionClosed:
                  print("Connection closed")
                  break
              transcoder.write(data)
              transcoder.closed = False
              if transcoder.transcript:
                  print(transcoder.transcript)
                  await websocket.send(transcoder.transcript)
                  transcoder.transcript = None
      
      start_server = websockets.serve(audio_processor, IP, PORT)
      asyncio.get_event_loop().run_until_complete(start_server)
      asyncio.get_event_loop().run_forever()
      

      【讨论】:

      • 感谢您的回复!我已按照您的自述文件进行操作,但是当我在浏览器中输入 ws://0.0.0.0:8000/ 时,出现错误“无法访问此站点:ERR_DISALLOWED_URL_SCHEME”。你知道我在运行 websocket_server.py 和 websocket_client.py 后如何让网页显示在那个地址上吗?
      • 您不必在浏览器中获取它,转录的音频消息将在您运行 websocket_server.py 的终端中打印(同样的消息也会传递回客户端)
      • 但是我的问题是我已经有了可以做到这一点的代码,我如何让它在音频被朗读时实时输出到网站上?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 2019-03-15
      相关资源
      最近更新 更多