Spaces:
Sleeping
Sleeping
import streamlit as st | |
import torch | |
import librosa | |
import numpy as np | |
from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor | |
import io | |
from datetime import datetime | |
# Konfiguracja strony | |
st.set_page_config( | |
page_title="Transkrypcja Audio - Polski", | |
page_icon="馃帳", | |
layout="wide" | |
) | |
def zaladuj_model(): | |
"""艁aduje model i procesor z cache""" | |
nazwa_modelu = "jonatasgrosman/wav2vec2-large-xlsr-53-polish" | |
procesor = Wav2Vec2Processor.from_pretrained(nazwa_modelu) | |
model = Wav2Vec2ForCTC.from_pretrained(nazwa_modelu) | |
return procesor, model | |
def transkrybuj_audio(audio_bytes, procesor, model): | |
"""Transkrybuje audio z przekazanych bajt贸w""" | |
# Konwersja bajt贸w na numpy array | |
audio, czestotliwosc = librosa.load(io.BytesIO(audio_bytes), sr=16000) | |
# Przygotowanie danych wej艣ciowych | |
dane_wejsciowe = procesor(audio, sampling_rate=16000, return_tensors="pt").input_values | |
# Wykonanie transkrypcji | |
with torch.no_grad(): | |
logity = model(dane_wejsciowe).logits | |
# Dekodowanie transkrypcji | |
przewidziane_id = torch.argmax(logity, dim=-1) | |
transkrypcja = procesor.batch_decode(przewidziane_id)[0] | |
return transkrypcja | |
def main(): | |
st.title("馃帳 Transkrypcja Audio w J臋zyku Polskim") | |
st.markdown(""" | |
### Instrukcja: | |
1. Wgraj plik audio (WAV, MP3, etc.) | |
2. Poczekaj na transkrypcj臋 | |
3. Pobierz wynik jako plik tekstowy | |
""") | |
# 艁adowanie modelu | |
with st.spinner("艁adowanie modelu..."): | |
procesor, model = zaladuj_model() | |
# Upload pliku | |
plik_audio = st.file_uploader("Wybierz plik audio", type=['wav', 'mp3', 'ogg', 'm4a']) | |
if plik_audio is not None: | |
st.audio(plik_audio) | |
if st.button("Rozpocznij transkrypcj臋"): | |
with st.spinner("Trwa transkrypcja..."): | |
try: | |
# Transkrypcja | |
transkrypcja = transkrybuj_audio(plik_audio.getvalue(), procesor, model) | |
# Wy艣wietlenie wyniku | |
st.success("Transkrypcja zako艅czona!") | |
st.markdown("### Wynik transkrypcji:") | |
st.text_area("", transkrypcja, height=200) | |
# Przygotowanie pliku do pobrania | |
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | |
nazwa_pliku = f"transkrypcja_{timestamp}.txt" | |
st.download_button( | |
label="Pobierz transkrypcj臋", | |
data=transkrypcja.encode('utf-8'), | |
file_name=nazwa_pliku, | |
mime="text/plain" | |
) | |
except Exception as e: | |
st.error(f"Wyst膮pi艂 b艂膮d podczas transkrypcji: {str(e)}") | |
st.markdown("---") | |
st.markdown(""" | |
### Informacje: | |
- Model: Wav2Vec2-Large-XLSR-53-Polish | |
- Obs艂ugiwane formaty: WAV, MP3, OGG, M4A | |
- J臋zyk: Polski | |
""") | |
if __name__ == "__main__": | |
main() | |