Ofiroz91's picture
Update app.py
7f10f20 verified
raw
history blame
2.49 kB
import gradio as gr
from transformers import pipeline
from pydub import AudioSegment
import os
import tempfile
# ื™ืฆื™ืจืช pipeline ืœืชืžืœื•ืœ ื•ืœืกื™ื›ื•ื
transcriber = pipeline("automatic-speech-recognition", model="openai/whisper-base")
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
def summarize_audio_or_video(file_path):
try:
# ื‘ื“ื™ืงื” ืื ื”ืงื•ื‘ืฅ ื”ื•ื ื•ื™ื“ืื• ื•ื”ืžืจืช ื•ื™ื“ืื• ืœืื•ื“ื™ื• ื‘ืžื™ื“ืช ื”ืฆื•ืจืš
if file_path.endswith((".mp4", ".mov", ".avi", ".mkv")):
audio_file = convert_video_to_audio(file_path)
else:
audio_file = file_path
# ื—ืœื•ืงืช ื”ืื•ื“ื™ื• ืœืงื˜ืขื™ื ืฉืœ 30 ืฉื ื™ื•ืช
segments = split_audio(audio_file)
# ืชืžืœื•ืœ ื›ืœ ืงื˜ืข ื•ื”ืฆื˜ืจืคื•ืช ื”ืชืžืœื•ืœ ื”ืกื•ืคื™
transcript = ""
for segment in segments:
segment_text = transcriber(segment, return_timestamps=False)["text"]
transcript += " " + segment_text
# ืกื™ื›ื•ื ื”ืชืžืœื•ืœ
summary = summarizer(transcript, max_length=50, min_length=25, do_sample=False)[0]["summary_text"]
# ืžื—ื™ืงืช ืงื•ื‘ืฅ ื”ืื•ื“ื™ื• ื‘ืžื™ื“ืช ื”ืฆื•ืจืš (ืื ื”ื™ื” ื•ื™ื“ืื•)
if audio_file != file_path:
os.remove(audio_file)
return 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
def split_audio(audio_file, segment_length=30 * 1000): # 30 ืฉื ื™ื•ืช ื‘ืžื™ืœื™ืฉื ื™ื•ืช
audio = AudioSegment.from_file(audio_file)
segments = []
for i in range(0, len(audio), segment_length):
segment = audio[i:i + segment_length]
temp_segment = tempfile.mktemp(suffix=".wav")
segment.export(temp_segment, format="wav")
segments.append(temp_segment)
return segments
# ื”ื’ื“ืจืช ืžืžืฉืง Gradio
interface = gr.Interface(
fn=summarize_audio_or_video,
inputs=gr.Audio(type="filepath"),
outputs="text",
title="ืžืžื™ืจ ืื•ื“ื™ื•/ื•ื™ื“ืื• ืœืกื™ื›ื•ื",
description="ื”ืขืœื” ืงื•ื‘ืฅ ืื•ื“ื™ื• ืื• ื•ื™ื“ืื• ืฉืœ ืžืจืฆื” ื•ืงื‘ืœ ืกื™ื›ื•ื ืงืฆืจ ืฉืœ ื”ืชื•ื›ืŸ."
)
if __name__ == "__main__":
interface.launch()