| 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)}", [] |
|
|
| |
| 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() |