File size: 2,614 Bytes
30d71ad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0ba67ac
30d71ad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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()