SimpleFrog's picture
Update app.py
6a2a16b verified
raw
history blame
2.48 kB
import streamlit as st
import torch
import tempfile
import os
import librosa
import numpy as np
from transformers import WhisperProcessor, WhisperForConditionalGeneration
from peft import PeftModel
# Configuration de l'interface Streamlit
st.title("🔊 Transcription Audio avec Whisper Fine-tuné (LoRA)")
st.write("Upload un fichier audio et laisse ton modèle fine-tuné faire le travail !")
# 🔹 Charger le modèle Whisper Large et appliquer l’adaptateur LoRA
@st.cache_resource # Permet de ne charger qu'une seule fois le modèle
def load_model():
base_model_name = "openai/whisper-large" # Modèle de base
adapter_model_name = "SimpleFrog/whisper_finetuned" # Adaptateur LoRA
# Charger le modèle de base
model = WhisperForConditionalGeneration.from_pretrained(base_model_name)
# Charger l'adaptateur LoRA et l'appliquer au modèle
model = PeftModel.from_pretrained(model, adapter_model_name)
# Charger le processeur audio
processor = WhisperProcessor.from_pretrained(base_model_name)
model.eval() # Mode évaluation
return processor, model
processor, model = load_model()
# 🔹 Upload d'un fichier audio
uploaded_file = st.file_uploader("Upload un fichier audio", type=["mp3", "wav", "m4a"])
if uploaded_file is not None:
# Sauvegarder temporairement l'audio
with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio:
temp_audio.write(uploaded_file.read())
temp_audio_path = temp_audio.name
# Charger et traiter l'audio
st.write("📄 **Transcription en cours...**")
# 🔹 Charger l'audio et convertir en waveform
audio, sr = librosa.load(temp_audio_path, sr=16000) # Whisper attend du 16kHz
audio = np.expand_dims(audio, axis=0) # Ajouter une dimension batch
# 🔹 Préparer les entrées pour Whisper
inputs = processor(audio, sampling_rate=16000, return_tensors="pt")
# 🔹 Générer la transcription
with torch.no_grad():
predicted_ids = model.generate(inputs.input_features)
# 🔹 Décoder la sortie
transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)[0]
# 🔹 Afficher la transcription
st.subheader("📝 Transcription :")
st.text_area("", transcription, height=200)
# Supprimer le fichier temporaire après l'affichage
os.remove(temp_audio_path)
st.write("🔹 Modèle utilisé :", "Whisper Large + Adaptateur LoRA (SimpleFrog/whisper_finetuned)")