Невозможно получить результаты от Google текста к речи API при потоковой передаче аудио из Интернета - PullRequest
14 голосов
/ 09 мая 2019

Я хочу транслировать аудио из Интернета и конвертировать его в текст, используя python google-cloud-speech API.Я включил это в мой код каналов django.

для внешнего интерфейса Я непосредственно скопировал этот код , и бэкэнд имеет этот код (см. Ниже).Теперь, что касается проблемы, я не получаю никаких исключений или ошибок, но я не получаю никаких результатов от Google API ...

Что я пробовал:

  • Я поставил отладкууказывает внутри цикла для функции process, элемент управления никогда не достигает внутри цикла.
  • Я прошел java-код здесь и попытался понять, что ... Я настроил этот java-код в своем локальном приложении и отладил его.Одна вещь, которую я понял, в Java-коде, метод onWebSocketBinary получает целочисленный массив, из внешнего интерфейса мы отправляем что-то подобноезатем отправка в гугл.Принимая во внимание, что в django я поставил точки отладки и заметил, что я получаю данные в двоичной строке ... поэтому я чувствовал, что мне не нужно ничего делать с этим ... но я попробовал несколько способов, преобразовав их в целое числомассив, но это не сработало, потому что Google ожидает в байтах сам ... (вы можете увидеть прокомментированный код ниже)

  • Я прошел этот пример code и это от Google, и я делаю то же самое, я не понял, что я делаю здесь неправильно.

Может кто-нибудь помочь мне ???

Джанго Код:

import json

from channels.generic.websocket import WebsocketConsumer

# Imports the Google Cloud client library
from google.cloud import speech
from google.cloud.speech import enums
from google.cloud.speech import types

# Instantiates a client
client = speech.SpeechClient()
language_code = "en-US"
streaming_config = None


class SpeechToTextConsumer(WebsocketConsumer):
    def connect(self):
        self.accept()

    def disconnect(self, close_code):
        pass

    def process(self, streaming_recognize_response: types.StreamingRecognitionResult):
        for response in streaming_recognize_response:
            if not response.results:
                continue
            result = response.results[0]
            self.send(text_data=json.dumps(result))

    def receive(self, text_data=None, bytes_data=None):
        global streaming_config
        if text_data:
            data = json.loads(text_data)
            rate = data["sampleRate"]
            config = types.RecognitionConfig(
                encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
                sample_rate_hertz=rate,
                language_code=language_code,
            )
            streaming_config = types.StreamingRecognitionConfig(
                config=config, interim_results=True, single_utterance=False
            )
            types.StreamingRecognizeRequest(streaming_config=streaming_config)
            self.send(text_data=json.dumps({"message": "processing..."}))
        if bytes_data:
            # bytes_data = bytes_data[math.floor(len(bytes_data) / 2) :]
            # bytes_data = bytes_data.lstrip(b"\x00")
            # bytes_data = int.from_bytes(bytes_data, "little")
            stream = [bytes_data]
            requests = (
                types.StreamingRecognizeRequest(audio_content=chunk) for chunk in stream
            )
            responses = client.streaming_recognize(streaming_config, requests)
            self.process(responses)
...