asterixix's picture
Create main.py
81d850a verified
raw
history blame
3.13 kB
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"
)
@st.cache_resource
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()