import os import gradio as gr from groq import Groq # خواندن کلید مخفی شده از تنظیمات هاگینگ فیس GROQ_API_KEY = os.getenv("GROQ_API_KEY") def transcribe_audio(audio_path): if not GROQ_API_KEY: return "خطا: کلید API یافت نشد. لطفا ابتدا GROQ_API_KEY را در تنظیمات اسپیس تعریف کنید.", [] if not audio_path: return "لطفاً ابتدا یک فایل صوتی آپلود کنید.", [] try: # ساخت کلاینت گراک با کلید امن شده client = Groq(api_key=GROQ_API_KEY) # خواندن فایل صوتی آپلود شده توسط کاربر with open(audio_path, "rb") as file: response = client.audio.transcriptions.create( file=(audio_path, file.read()), model="whisper-large-v3", # مدل ویسپر ۳ توربو response_format="verbose_json", # فرمت خروجی حاوی زمان‌بندی language="fa" # زبان فارسی ) # دریافت متن کامل full_text = getattr(response, "text", "") # استخراج و مرتب‌سازی زمان‌بندی جملات segments = [] raw_segments = getattr(response, "segments", []) for idx, segment in enumerate(raw_segments): segments.append({ "بخش": idx + 1, "شروع (ثانیه)": round(segment.get("start", 0), 2), "پایان (ثانیه)": round(segment.get("end", 0), 2), "متن جمله": segment.get("text", "").strip() }) return full_text, segments except Exception as e: return f"خطا در پردازش صوتی: {str(e)}", [] # ساخت محیط وب ساده و تعاملی با Gradio demo = gr.Interface( fn=transcribe_audio, inputs=gr.Audio(type="filepath", label="فایل صوتی خود را اینجا بکشید و رها کنید"), outputs=[ gr.Textbox(label="متن کامل شناسایی شده (Full Text)"), gr.JSON(label="زمان‌بندی دقیق جملات (Segments)") ], title="تست ابزار تبدیل صدا به متن Whisper v3", description="فایل صوتی خود را آپلود کنید تا خروجی متنی و زمان‌بندی دقیق کلمات را در محیط هاگینگ فیس مشاهده کنید." ) if __name__ == "__main__": demo.launch()