|
import gradio as gr |
|
from faster_whisper import WhisperModel |
|
from pydub import AudioSegment |
|
import os |
|
import tempfile |
|
from transformers import pipeline |
|
|
|
|
|
model = WhisperModel("ivrit-ai/faster-whisper-v2-d4") |
|
|
|
|
|
summarizer = pipeline("summarization", model="yam-peleg/Hebrew-Mistral-7B-200K") |
|
|
|
def transcribe_and_summarize(file_path): |
|
try: |
|
|
|
if file_path.endswith((".mp4", ".mov", ".avi", ".mkv")): |
|
audio_file = convert_video_to_audio(file_path) |
|
else: |
|
audio_file = file_path |
|
|
|
|
|
segments, _ = model.transcribe(audio_file, language="he") |
|
transcript = " ".join([segment.text for segment in segments]) |
|
|
|
|
|
summary = summarizer(transcript, max_new_tokens=100)[0]["summary_text"] |
|
|
|
|
|
if audio_file != file_path: |
|
os.remove(audio_file) |
|
|
|
return transcript, summary |
|
|
|
except Exception as e: |
|
return f"ืฉืืืื ืืขืืืื ืืงืืืฅ: {str(e)}", "" |
|
|
|
def convert_video_to_audio(video_file): |
|
|
|
temp_audio = tempfile.mktemp(suffix=".wav") |
|
video = AudioSegment.from_file(video_file) |
|
video.export(temp_audio, format="wav") |
|
return temp_audio |
|
|
|
|
|
interface = gr.Interface( |
|
fn=transcribe_and_summarize, |
|
inputs=gr.Audio(type="filepath"), |
|
outputs=[ |
|
gr.Textbox(label="ืชืืืื"), |
|
gr.Textbox(label="ืกืืืื") |
|
], |
|
title="ืืืืจ ืืืืื/ืืืืื ืืชืืืื ืืกืืืื", |
|
description="ืืขืื ืงืืืฅ ืืืืื ืื ืืืืื ืฉื ืืจืฆื ืืงืื ืชืืืื ืืื ืืกืืืื ืงืฆืจ ืฉื ืืชืืื." |
|
) |
|
|
|
if __name__ == "__main__": |
|
interface.launch() |