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() |