File size: 5,015 Bytes
d13b017 52b606b d13b017 eb8b0a6 d13b017 662fd42 d13b017 eb8b0a6 |
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
from transformers import WhisperProcessor, WhisperForConditionalGeneration
from huggingface_hub import login
import gradio as gr
import numpy as np
import ffmpeg
import torch
import time
import os
login(os.environ["HF"], add_to_git_credential=True)
# Load Whisper Tiny Model
model_name = "Kushtrim/whisper-large-v3-turbo-shqip"
processor = WhisperProcessor.from_pretrained(model_name)
model = WhisperForConditionalGeneration.from_pretrained(model_name)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
def transcribe_chunk(audio_chunk):
"""Përkthe një pjesë të audios duke përdorur Whisper."""
audio_array = np.frombuffer(audio_chunk, dtype=np.int16).astype(np.float32) / 32768.0
inputs = processor(audio_array, sampling_rate=16000, return_tensors="pt").to(device)
generated_ids = model.generate(
inputs.input_features,
forced_decoder_ids=processor.get_decoder_prompt_ids(language="en") # English language
)
return processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
def stream_and_transcribe_radio(stream_url, chunk_duration=5):
"""
Transkripto audio të drejtpërdrejtë nga një stream radioje.
Args:
stream_url (str): URL i stream-it audio.
chunk_duration (int): Kohëzgjatja e secilës pjesë për t'u përpunuar në sekonda.
"""
process = (
ffmpeg.input(stream_url)
.output('pipe:', format='wav', acodec='pcm_s16le', ac=1, ar='16000')
.run_async(pipe_stdout=True, pipe_stderr=True)
)
chunk_size = chunk_duration * 16000 * 2 # 16000 mostra për sekondë, 2 byte për mostër
transcription_log = ""
try:
for i in range(60): # Përpunoni për 5 minuta (60 pjesë nga 5 sekonda)
audio_chunk = process.stdout.read(chunk_size)
if not audio_chunk:
break
transcription = transcribe_chunk(audio_chunk)
current_time = time.strftime("%H:%M:%S", time.localtime())
new_transcription = f"[{current_time}] {transcription}"
transcription_log += new_transcription + "\n"
yield transcription_log # Dërgo përditësimin e transkriptimit
finally:
process.kill()
# Gradio Interface
def transcribe_app(stream_url):
return stream_and_transcribe_radio(stream_url, chunk_duration=5)
with gr.Blocks() as app:
gr.Markdown("""
<h1 style="text-align: center;">🎤 Transkriptim i Radios në Shqip</h1>
<p style="text-align: center;"> Ky aplikacion ju lejon të transkriptoni audio të drejtpërdrejtë nga një stream radioje për 5 minuta. Vendosni URL-në e stream-it dhe klikoni "Fillo Transkriptimin".</p>
<p style="text-align: center;">Radio Llapi: http://radio.1dhe1.com:8555/stream</p>
<p style="text-align: center;">Radio Dukagjini: https://s2.voscast.com:8825/radiodukagjini</p>
<p style="text-align: center;">Autori: Kushtrim Visoka</p>
<p style="text-align: center;">
Modeli i përdorur për transkriptim:
<a href="https://huggingface.co/Kushtrim/whisper-large-v3-turbo-shqip-115h" target="_blank">Kushtrim/whisper-large-v3-turbo-shqip-115h</a>
</p>
""")
# Futja e URL-së së stream-it
stream_url_input = gr.Textbox(label="Vendosni URL-në e stream-it audio", value="https://s2.voscast.com:8825/radiodukagjini")
# Butoni për fillimin e transkriptimit
transcribe_button = gr.Button("Fillo Transkriptimin")
# Luajtësi i audios
audio_player = gr.HTML("""
<div style="text-align: center; margin-top: 20px;">
<audio controls autoplay style="width: 80%; max-width: 600px;">
<source src="https://s2.voscast.com:8825/radiodukagjini" type="audio/mpeg">
Shfletuesi juaj nuk e mbështet elementin audio.
</audio>
</div>
""")
# Dalja e transkriptimit
transcription_output = gr.Textbox(label="Dalja e Transkriptimit", lines=20, interactive=False)
# Përditëso transkriptimin dinamikisht
def update_transcription(stream_url):
for transcription in transcribe_app(stream_url):
yield transcription
# Përditëso luajtësin e audios dinamikisht
def update_audio_player(stream_url):
return f"""
<div style="text-align: center; margin-top: 20px;">
<audio controls autoplay style="width: 80%; max-width: 600px;">
<source src="{stream_url}" type="audio/mpeg">
Shfletuesi juaj nuk e mbështet elementin audio.
</audio>
</div>
"""
# Lidhja e eventeve
transcribe_button.click(
update_transcription,
inputs=stream_url_input,
outputs=transcription_output
)
stream_url_input.change(
update_audio_player,
inputs=stream_url_input,
outputs=audio_player
)
# Rreshtimi i komponentëve
stream_url_input
transcribe_button
audio_player
transcription_output
# Nis aplikacionin
app.launch()
|