asterixix commited on
Commit
81d850a
verified
1 Parent(s): 0439733

Create main.py

Browse files
Files changed (1) hide show
  1. main.py +96 -0
main.py ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import torch
3
+ import librosa
4
+ import numpy as np
5
+ from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
6
+ import io
7
+ from datetime import datetime
8
+
9
+ # Konfiguracja strony
10
+ st.set_page_config(
11
+ page_title="Transkrypcja Audio - Polski",
12
+ page_icon="馃帳",
13
+ layout="wide"
14
+ )
15
+
16
+ @st.cache_resource
17
+ def zaladuj_model():
18
+ """艁aduje model i procesor z cache"""
19
+ nazwa_modelu = "jonatasgrosman/wav2vec2-large-xlsr-53-polish"
20
+ procesor = Wav2Vec2Processor.from_pretrained(nazwa_modelu)
21
+ model = Wav2Vec2ForCTC.from_pretrained(nazwa_modelu)
22
+ return procesor, model
23
+
24
+ def transkrybuj_audio(audio_bytes, procesor, model):
25
+ """Transkrybuje audio z przekazanych bajt贸w"""
26
+ # Konwersja bajt贸w na numpy array
27
+ audio, czestotliwosc = librosa.load(io.BytesIO(audio_bytes), sr=16000)
28
+
29
+ # Przygotowanie danych wej艣ciowych
30
+ dane_wejsciowe = procesor(audio, sampling_rate=16000, return_tensors="pt").input_values
31
+
32
+ # Wykonanie transkrypcji
33
+ with torch.no_grad():
34
+ logity = model(dane_wejsciowe).logits
35
+
36
+ # Dekodowanie transkrypcji
37
+ przewidziane_id = torch.argmax(logity, dim=-1)
38
+ transkrypcja = procesor.batch_decode(przewidziane_id)[0]
39
+
40
+ return transkrypcja
41
+
42
+ def main():
43
+ st.title("馃帳 Transkrypcja Audio w J臋zyku Polskim")
44
+
45
+ st.markdown("""
46
+ ### Instrukcja:
47
+ 1. Wgraj plik audio (WAV, MP3, etc.)
48
+ 2. Poczekaj na transkrypcj臋
49
+ 3. Pobierz wynik jako plik tekstowy
50
+ """)
51
+
52
+ # 艁adowanie modelu
53
+ with st.spinner("艁adowanie modelu..."):
54
+ procesor, model = zaladuj_model()
55
+
56
+ # Upload pliku
57
+ plik_audio = st.file_uploader("Wybierz plik audio", type=['wav', 'mp3', 'ogg', 'm4a'])
58
+
59
+ if plik_audio is not None:
60
+ st.audio(plik_audio)
61
+
62
+ if st.button("Rozpocznij transkrypcj臋"):
63
+ with st.spinner("Trwa transkrypcja..."):
64
+ try:
65
+ # Transkrypcja
66
+ transkrypcja = transkrybuj_audio(plik_audio.getvalue(), procesor, model)
67
+
68
+ # Wy艣wietlenie wyniku
69
+ st.success("Transkrypcja zako艅czona!")
70
+ st.markdown("### Wynik transkrypcji:")
71
+ st.text_area("", transkrypcja, height=200)
72
+
73
+ # Przygotowanie pliku do pobrania
74
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
75
+ nazwa_pliku = f"transkrypcja_{timestamp}.txt"
76
+
77
+ st.download_button(
78
+ label="Pobierz transkrypcj臋",
79
+ data=transkrypcja.encode('utf-8'),
80
+ file_name=nazwa_pliku,
81
+ mime="text/plain"
82
+ )
83
+
84
+ except Exception as e:
85
+ st.error(f"Wyst膮pi艂 b艂膮d podczas transkrypcji: {str(e)}")
86
+
87
+ st.markdown("---")
88
+ st.markdown("""
89
+ ### Informacje:
90
+ - Model: Wav2Vec2-Large-XLSR-53-Polish
91
+ - Obs艂ugiwane formaty: WAV, MP3, OGG, M4A
92
+ - J臋zyk: Polski
93
+ """)
94
+
95
+ if __name__ == "__main__":
96
+ main()