Spaces:
Runtime error
Runtime error
| from transformers import pipeline | |
| from openai import OpenAI | |
| import gradio as gr | |
| import pandas as pd | |
| import os | |
| import spaces | |
| import soundfile as sf | |
| import numpy as np | |
| import librosa | |
| # تنظیم کلید API از متغیر محیطی | |
| client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) | |
| # بارگذاری مدل Whisper | |
| whisper = pipeline("automatic-speech-recognition", model="openai/whisper-large-v3-turbo", device="cuda") | |
| def speech_to_text(audio_file): | |
| if audio_file is None: | |
| return "خطا: فایل صوتی دریافت نشد. لطفاً یک فایل صوتی آپلود کنید." | |
| try: | |
| # خواندن فایل صوتی | |
| audio_data, sample_rate = sf.read(audio_file) | |
| # اطمینان از نرخ نمونهبرداری 16kHz (استاندارد برای Whisper) | |
| if sample_rate != 16000: | |
| audio_data = librosa.resample(audio_data, orig_sr=sample_rate, target_sr=16000) | |
| # پردازش با Whisper با پشتیبانی از فایلهای طولانی | |
| result = whisper(audio_data, return_timestamps=True) | |
| return result["text"] | |
| except Exception as e: | |
| return f"خطا در پردازش فایل صوتی: {str(e)}" | |
| def summarize_text(text): | |
| if not text or text.startswith("خطا"): | |
| return "خطا: متن معتبر برای خلاصهسازی دریافت نشد." | |
| response = client.chat.completions.create( | |
| model="gpt-3.5-turbo", | |
| messages=[ | |
| {"role": "system", "content": "You are a helpful assistant that summarizes text in Persian."}, | |
| {"role": "user", "content": f"لطفاً متن زیر را به صورت خلاصه و در قالب یک گزارش کوتاه ارائه دهید:\n{text}"} | |
| ], | |
| max_tokens=150 | |
| ) | |
| return response.choices[0].message.content | |
| def create_summary_table(summary): | |
| data = {"خلاصه گزارش": [summary]} | |
| df = pd.DataFrame(data) | |
| return df | |
| def process_audio(audio_file, progress=gr.Progress()): | |
| if audio_file is None: | |
| return "خطا: فایل صوتی دریافت نشد.", "", None | |
| progress(0, desc="در حال پردازش فایل صوتی...") | |
| text = speech_to_text(audio_file) | |
| progress(0.5, desc="در حال خلاصهسازی متن...") | |
| summary = summarize_text(text) | |
| progress(0.9, desc="ایجاد جدول خلاصه...") | |
| table = create_summary_table(summary) | |
| progress(1.0, desc="پردازش کامل شد") | |
| return text, summary, table | |
| with gr.Blocks() as app: | |
| gr.Markdown("## اپلیکیشن تبدیل صوت به متن و خلاصه سازی کال سنتر\n**توجه**: برای بهترین عملکرد، از فایلهای صوتی کوتاه (کمتر از ۵ مگابایت، ۱۰-۲۰ ثانیه) با فرمت MP3، WAV یا M4A استفاده کنید. فایلهای طولانیتر از ۳۰ ثانیه ممکن است زمان پردازش بیشتری نیاز داشته باشند.") | |
| audio_input = gr.Audio(type="filepath", label="فایل صوتی را آپلود کنید (MP3، WAV، M4A)") | |
| text_output = gr.Textbox(label="متن تبدیلشده") | |
| summary_output = gr.Textbox(label="خلاصه گزارش") | |
| table_output = gr.DataFrame(label="جدول خلاصه") | |
| submit_button = gr.Button("پردازش") | |
| submit_button.click( | |
| fn=process_audio, | |
| inputs=audio_input, | |
| outputs=[text_output, summary_output, table_output] | |
| ) | |
| app.launch() |