WebSocket отключен с кодом: 1011 в django
consumers.py
import asyncio
import websockets
import sounddevice as sd
import vosk
import queue
from channels.generic.websocket import AsyncWebsocketConsumer
model_path = "vosk_model/vosk-model-small-en-us-0.15"
model = vosk.Model(model_path)
sample_rate = 16000
audio_queue = queue.Queue()
class SpeechRecognitionConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
self.rec = vosk.KaldiRecognizer(model, sample_rate)
print("WebSocket connection accepted")
async def receive(self, bytes_data):
audio_queue.put(bytes_data)
await self.process_audio()
async def process_audio(self):
while not audio_queue.empty():
data = audio_queue.get()
if self.rec.AcceptWaveform(data):
result = self.rec.Result()
result_dict = json.loads(result)
recognized_text = result_dict.get('text', '')
print("recognized_text: ", recognized_text)
print("Final Result: ", recognized_text)
await self.send(text_data=json.dumps({
'type': 'result',
'text': recognized_text
}))
else:
partial_result = self.rec.PartialResult()
partial_dict = json.loads(partial_result)
partial_text = partial_dict.get('partial', '')
print("Partial Result: ", partial_text)
await self.send(text_data=json.dumps({
'type': 'partial',
'text': partial_text
}))
async def disconnect(self, close_code):
print(f"WebSocket disconnected with code: {close_code}")
audio.py
import asyncio
import websockets
import sounddevice as sd
async def send_audio_data(websocket):
loop = asyncio.get_event_loop()
def audio_callback(indata, frames, time, status):
if status:
print(f"Audio Status: {status}")
audio_data = bytes(indata)
print(f"Received audio data of length: {len(audio_data)}")
asyncio.run_coroutine_threadsafe(websocket.send(audio_data), loop)
with sd.RawInputStream(samplerate=16000, channels=1, dtype='int16', blocksize=1024, callback=audio_callback):
print("Recording and sending audio data...")
while True:
await asyncio.sleep(0.05)
async def main():
uri = "ws://localhost:8000/ws/recognize/"
async with websockets.connect(uri) as websocket:
print("Connected to WebSocket server")
await send_audio_data(websocket)
# Create an event loop
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Я разрабатываю функцию распознавания речи в своем Django-приложении, используя Django Channels и библиотеку Vosk. Однако я столкнулся с проблемой, когда WebSocket-соединение закрывается с кодом состояния 1011.
Когда я запускаю клиент, соединение WebSocket устанавливается, но оно часто закрывается с кодом состояния 1011. Я не знаю, что может быть причиной этой проблемы. Я проверил следующее:
- Журналы сервера: Явных ошибок не обнаружено.
- Аудиоданные: Отправляемые аудиоданные, похоже, действительны, и я могу подтвердить, что они принимаются потребителем.