from fastapi import FastAPI, File, UploadFile import librosa import numpy as np import shutil from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocess from funasr.auto.auto_model import AutoModel import os model_dir = "FunAudioLLM/SenseVoiceSmall" try: model = AutoModel(model=model_dir, vad_model="fsmn-vad", device="cpu", hub="hf") print("✅ Model loaded successfully!") except Exception as e: print("❌ Model loading error:", str(e)) app = FastAPI() # # Load mô hình SenseVoiceSmall # model_dir = "FunAudioLLM/SenseVoiceSmall" # model = AutoModel( # model=model_dir, # vad_model="fsmn-vad", # vad_kwargs={"max_single_segment_time": 30000}, # device="cuda:0", # hub="hf", # ) # # Hàm tính RMS energy # def calculate_rms_energy(audio_path): # y, sr = librosa.load(audio_path) # rms = librosa.feature.rms(y=y)[0] # return np.mean(rms) # # Hàm phát hiện tiếng ồn # def detect_noise(audio_path): # rms_energy = calculate_rms_energy(audio_path) # res = model.generate(input=audio_path, language="auto", audio_event_detection=True) # audio_events = res[0].get("audio_event_detection", {}) # if rms_energy > 0.02: # return "ồn ào" # elif rms_energy > 0.01: # for event_label, event_score in audio_events.items(): # if event_score > 0.7 and event_label in ["laughter", "applause", "crying", "coughing"]: # return f"ồn ào ({event_label})" # return "yên tĩnh" # # API nhận file âm thanh từ Flutter # @app.post("/detect-noise/") # async def detect_noise_api(file: UploadFile = File(...)): # file_path = f"temp/{file.filename}" # with open(file_path, "wb") as buffer: # shutil.copyfileobj(file.file, buffer) # result = detect_noise(file_path) # return {"noise_level": result}