MyIVR / app.py
JabriA's picture
Add Moroccan Darija extraction app2
61e1f2a
raw
history blame
2.44 kB
import gradio as gr
import torch
from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC, pipeline
import soundfile as sf
# Load models
# Transcription model for Moroccan Darija
processor = Wav2Vec2Processor.from_pretrained("boumehdi/wav2vec2-large-xlsr-moroccan-darija")
transcription_model = Wav2Vec2ForCTC.from_pretrained("boumehdi/wav2vec2-large-xlsr-moroccan-darija")
# Summarization model
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
# Function to transcribe audio
def transcribe_audio(audio_path):
audio_input, sample_rate = sf.read(audio_path)
if sample_rate != 16000:
raise ValueError("Audio must be sampled at 16kHz.")
inputs = processor(audio_input, sampling_rate=sample_rate, return_tensors="pt", padding=True)
with torch.no_grad():
logits = transcription_model(**inputs).logits
predicted_ids = torch.argmax(logits, dim=-1)
transcription = processor.batch_decode(predicted_ids)[0]
return transcription
# Function to filter text by keywords
def filter_text_by_keywords(text, keywords):
keyword_list = keywords.split(",")
filtered_sentences = [
sentence for sentence in text.split(". ") if any(keyword.strip().lower() in sentence.lower() for keyword in keyword_list)
]
return ". ".join(filtered_sentences) if filtered_sentences else text
# Function to transcribe and summarize
def transcribe_and_summarize(audio_file, keywords):
transcription = transcribe_audio(audio_file)
filtered_text = filter_text_by_keywords(transcription, keywords)
summary = summarizer(filtered_text, max_length=100, min_length=30, do_sample=False)[0]["summary_text"]
return transcription, summary
# Gradio Interface
inputs = [
gr.Audio(type="filepath", label="Upload your audio file"),
gr.Textbox(label="Enter Keywords (comma-separated)", placeholder="e.g., customer, service, retention")
]
outputs = [
gr.Textbox(label="Transcription"),
gr.Textbox(label="Summary")
]
app = gr.Interface(
fn=transcribe_and_summarize,
inputs=inputs,
outputs=outputs,
title="Moroccan Darija Audio Transcription and Summarization",
description=(
"Upload an audio file in Moroccan Darija to get its transcription and a summarized version. "
"Specify relevant keywords (comma-separated) to filter the transcription before summarization."
)
)
# Launch the app
if __name__ == "__main__":
app.launch()