Отображение речи в текст Google Cloud

Я пытаюсь использовать Google Cloud Speech-to-Text, и пока у меня есть python transcribe_streaming_mic код работает и выводит транскрипцию живой речи в мой терминал, но как мне заставить его выводить этот текст в реальном времени в текстовое поле веб-сайта, как в примере на своей главной странице?:

Я просмотрел документацию для некоторых примеров кода этого, но если я не был слеп и не видел этого, я не могу найти какой-либо пример кода вывода веб-сайта.

Спасибо!


person user3077842    schedule 13.11.2018    source источник


Ответы (2)


Демонстрация представлена ​​на целевой странице преобразования речи в текст Google:

Преобразование речи в текст

использует некоторый 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 предоставляет несколько примеров того, как записывать аудио от пользователя браузера в своем документе "Основы веб-технологий": Запись аудио от пользователя.

Вам нужно будет 1) записать аудио пользователя, 2) опубликовать аудио в API преобразования речи в текст и 3) отобразить ответ обратно в браузер пользователя.

person lukwam    schedule 14.11.2018

Для серверной части Python вы можете следовать этому код. На стороне клиента вы должны отправить аудиопоток на сервер через соединение через веб-соединение.

Для тестирования сервера Python вы можете использовать этот код

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()
person Dawn T Cherian    schedule 15.11.2018
comment
Спасибо за ваш ответ! Я следил за вашим README, но когда я ввожу ws: //0.0.0.0: 8000 / в свой браузер, появляется сообщение об ошибке «Этот сайт недоступен: ERR_DISALLOWED_URL_SCHEME». Вы знаете, как я могу отобразить веб-страницу на этом адресе после запуска websocket_server.py и websocket_client.py? - person user3077842; 15.11.2018
comment
Вам не нужно принимать его в браузере, записанное звуковое сообщение будет напечатано в терминале, в котором вы запускаете websocket_server.py (это же сообщение также передается обратно клиенту) - person Dawn T Cherian; 15.11.2018
comment
Но в моем вопросе говорилось, что у меня уже есть код, который делает это, как мне заставить его выводить вживую на веб-сайт, когда звучит звук? - person user3077842; 15.11.2018