У меня есть ошибки в распознавании голоса с помощью модели tflight на python с использованием django
import os
import numpy as np
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import tensorflow as tf
from django.shortcuts import render
from django.conf import settings
import logging
# 모델 파일 경로 설정
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)
def initialize_interpreter():
interpreter = tf.lite.Interpreter(r"C:\Users\Yaggo\OneDrive\Desktop\py\django\advan\audio_project\model.tflite")
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
return interpreter, input_details, output_details
def home(request):
return render(request, 'audio_app/audio_recorder.html')
@csrf_exempt
def upload_audio(request):
try:
if request.method == 'POST' and request.FILES.get('audio_data'):
audio_file = request.FILES['audio_data']
audio_data = np.frombuffer(audio_file.read(), dtype=np.int16)
# 데이터 길이가 int16의 크기로 나누어 떨어지는지 확인
if len(audio_data) % 2 != 0:
audio_data = audio_data[:-1] # 마지막 바이트 제거
# 데이터 정규화 및 모델 입력 크기 조정
audio_data = audio_data.astype(np.float32) / 16384.0 #32768.0
interpreter, input_details, output_details = initialize_interpreter()
print(f"Model input shape: {input_details[0]['shape']}")
if audio_data.size < input_details[0]['shape'][1]:
audio_data = np.pad(audio_data, (0, input_details[0]['shape'][1] - audio_data.size), 'constant')
elif audio_data.size > input_details[0]['shape'][1]:
audio_data = audio_data[:input_details[0]['shape'][1]]
audio_data = np.reshape(audio_data, input_details[0]['shape'])
# TensorFlow Lite 모델 실행
interpreter.set_tensor(input_details[0]['index'], audio_data)
interpreter.invoke()
# 예측 결과 가져오기
output_data = interpreter.get_tensor(output_details[0]['index'])[0]
print("Model output:", output_data)
logger.debug(f"Model output: {output_data}")
return JsonResponse({
'audio_data': audio_data.tolist(), # audio_data 값을 반환
'predicted_indices': output_data.tolist() # JSON 직렬화 가능한 형태로 변환
})
else:
return JsonResponse({'error': 'No audio file provided'}, status=400)
except Exception as e:
logger.error('Error processing audio file: %s', str(e))
return JsonResponse({'error': str(e)}, status=500)
это view.py и
document.addEventListener('DOMContentLoaded', function() {
const recordButton = document.getElementById('recordButton');
const statusElement = document.getElementById('status');
const audioDataElement = document.getElementById('audioData');
recordButton.addEventListener('click', function() {
let isRecording = false;
function startRecording() {
if (isRecording) return;
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
const mediaRecorder = new MediaRecorder(stream);
let audioChunks = [];
mediaRecorder.start();
isRecording = true;
statusElement.textContent = "Recording for 5 seconds...";
mediaRecorder.addEventListener("dataavailable", event => {
audioChunks.push(event.data);
});
setTimeout(() => {
mediaRecorder.stop();
stream.getTracks().forEach(track => track.stop());
}, 5000);
mediaRecorder.addEventListener("stop", () => {
let audioBlob = new Blob(audioChunks);
sendDataToServer(audioBlob);
audioChunks = [];
isRecording = false;
});
}).catch(error => {
console.error("Error accessing media devices.", error);
statusElement.textContent = "Error: Audio permission is required.";
});
}
startRecording();
setInterval(() => {
if (!isRecording) {
startRecording();
}
}, 8000);
});
function sendDataToServer(audioBlob) {
const formData = new FormData();
formData.append("audio_data", audioBlob);
fetch("/audio/upload-audio/", {
method: "POST",
body: formData
})
.then(response => {
if (!response.ok) {
throw new Error(`Server responded with a status: ${response.status}`);
}
return response.json();
})
.then(data => {
if (audioDataElement) {
audioDataElement.textContent = "Model Output: " + new Date().toLocaleTimeString() + " - " + data.predicted_indices.join(', ');
} else {
console.error("audioData element not found");
statusElement.textContent = "Error: audioData element not found";
}
})
.catch(error => {
console.error("Error handling response: ", error);
statusElement.textContent = "Error: " + error.message;
});
}
});
это record.js
from django.urls import path
from . import views
from .views import upload_audio
urlpatterns = [
path('upload-audio/', upload_audio, name='upload_audio'),
path('', views.home, name='home'),
]
это app/urls.py
from django.urls import path, include
from audio_app.views import home # views를 임포트하는 부분이 추가되어야 합니다.
from audio_app.views import upload_audio
urlpatterns = [
path('', home, name='home'), # 홈 페이지 URL
path('audio/upload-audio/', upload_audio, name='upload_audio'),
]
В заключение, этот проект/urls.py
у меня две проблемы ERROR:audio_app.views:Error processing audio file: buffer size must be a multiple of element size Внутренняя ошибка сервера: /audio/upload-audio/ ERROR:django.request:Internal Server Error: /audio/upload-audio/
и вывод модели не работает она должна выводить[0.xxxx,0.xxxx,0.xxxx], но выводит только[0,1,0]. Можете ли вы, ребята, помочь молодому и вдохновленному студенту.... не обращайте внимания на корейские комментарии
я пытался добавить logcontainer но он делает много ошибок я не знаю почему и я пробовал много вопросов для gpt4 и 4o и кодирования кода, но они повторяют то, что они говорят, что не работает