import gradio as gr from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline import torch import librosa import numpy as np # ١. دیاریکردنی جۆری ئامێر (Device) device = "cuda:0" if torch.cuda.is_available() else "cpu" torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32 # ٢. بارکردنی مۆدێلەکە لە ڕێپۆکەی خۆتەوە model_id = "Za6na/sorani2" model = AutoModelForSpeechSeq2Seq.from_pretrained( model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True, use_safetensors=True ) model.to(device) processor = AutoProcessor.from_pretrained(model_id) # ٣. دروستکردنی پیمپلاین (Pipeline) pipe = pipeline( "automatic-speech-recognition", model=model, tokenizer=processor.tokenizer, feature_extractor=processor.feature_extractor, max_new_tokens=128, chunk_length_s=30, batch_size=16, return_timestamps=True, torch_dtype=torch_dtype, device=device, ) # ٤. فەنکشن بۆ وەرگێڕانی دەنگ def transcribe(audio): if audio is None: return "تکایە دەنگێک تۆمار بکە یان فایلێک بار بکە." # خوێندنەوەی دەنگەکە sr, y = audio y = y.astype(np.float32) y /= np.max(np.abs(y)) # ناردن بۆ مۆدێل result = pipe(y, generate_kwargs={"language": "persian"}) # یان "kurdish" ئەگەر پشتگیری بکات return result["text"] # ٥. دروستکردنی ڕووکاری Gradio iface = gr.Interface( fn=transcribe, inputs=gr.Audio(sources=["microphone", "upload"], type="numpy", label="دەنگەکەت لێرە تۆمار بکە"), outputs="text", title="تێستکردنی مۆدێلی سۆرانی (Za6na/sorani2)", description="فەرموو قسە بکە، مۆدێلەکە دەیکات بە نووسین.", ) iface.launch()