У меня есть ошибки в распознавании голоса с помощью модели 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 и кодирования кода, но они повторяют то, что они говорят, что не работает

Вернуться на верх