Объект TranscriptionConsumer не имеет атрибута base_send Websocket DjangoPython

Программы на Python
Ответить
Anonymous
 Объект TranscriptionConsumer не имеет атрибута base_send Websocket Django

Сообщение Anonymous »

Я пытаюсь создать сайт, который переводит аудио .wav в текст в django. У меня здесь проблема. Я использую веб-сокет для немедленной отправки переведенного текста. Но когда я пытаюсь отправить текст, возникает эта ошибка (объект TranscriptionConsumer не имеет атрибута base_send)
views.py

Код: Выделить всё

# this function recognites text and send it to Consumers's function
def get_large_audio_transcription(path,language, consumer ,minutes=2):
sound = AudioSegment.from_file(path)

chunk_length_ms = int(1000*60*minutes)

chunks = [sound[i:i + chunk_length_ms] for i in range(0, len(sound), chunk_length_ms)]

folder_name=str(settings.MEDIA_ROOT) + "/audio-chunks/"

if not os.path.isdir(folder_name):
os.mkdir(folder_name)

whole_text = ""

for i, audio_chunk in enumerate(chunks,start=1):
chunk_filename = os.path.join(folder_name, f"chunk{i}.wav")
audio_chunk.export(chunk_filename, format="wav")

try:
text = transcribe_small_audio(chunk_filename, language=language)

except sr.UnknownValueError as e:
print("Error:", str(e))
else:
text = f"{text.capitalize()}."
print(text)
whole_text += text
json_transcribe = json.dumps({"message": text})
# Sending json text through WebSocket
consumer.send_json(json_transcribe)
# deleting chunk
try:
os.remove(chunk_filename)
except FileNotFoundError:
print("Error: file not found")
return whole_text

@login_required(login_url='login_user')
def index(request):
context = None
audio_form = UploadFileForm()

if request.method == "POST":
audio_form = UploadFileForm(request.POST, request.FILES)

if not audio_form.is_valid():
messages.success(request, ("Error!"))
return render(request, 'recognition/index.html', {"error": "Provide a valid file"})

try:
form = audio_form.save(commit=False)
form.name = request.user
form.save()

file = form.audio # get the audio
file_size = file.size
file_path = str(settings.MEDIA_ROOT) + '/' + str(file.name)

consumer = TranscriptionConsumer()
messages.success(request, ("File size is too big.  We will give you a file with transcription..."))
text = get_large_audio_transcription(file_path,"en-US", consumer)

os.remove(file_path)

context = {
"text" :text,
"AudioForm":audio_form,
"size" : file_size
}

except Exception as ex:
context = {"error": str(ex)}
else:
context = {
"AudioForm" : audio_form
}
return render(request, "recognition/index.html", context )
Мои потребители.py

Код: Выделить всё

import json
from channels.generic.websocket import WebsocketConsumer

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

def send_json(self, text_data):
self.connect()
text_data_json = json.loads(text_data)
text_message = text_data_json["message"]
self.send(text_data=json.dumps({
'message' : text_message
}))
файл index.html

Код: Выделить всё

{% extends 'app/base.html' %}
{% load static %}
{% load crispy_forms_tags %}
{% block content %}
Upload file


{% csrf_token %}
{{ AudioForm | crispy }}

Upload audio



Your file size :
{{ size|filesizeformat }}
{{ size }}
Transcript

{% if error %}
{{ error }}
{% endif %}

{{ text }}


const socket = new WebSocket('ws://' + window.location.host + '/ws/somepath/');

socket.onmessage = function (event) {
const data = JSON.parse(event.data);
console.log(data.message);
document.querySelector('#app').innerText = data.message
};

{% endblock %}
Я ожидаю, что на странице появится распознанный текст, но вместо этого получаю сообщение об ошибке.
Кстати, я новичок в django

Подробнее здесь: https://stackoverflow.com/questions/791 ... ket-django
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»