Upload 38 files
Browse files- .gitattributes +14 -0
- examples/generated/0x0006de19.wav +3 -0
- examples/generated/0x0008d8e5.wav +3 -0
- examples/generated/0x000f7780.wav +3 -0
- examples/generated/0x000faf94.wav +3 -0
- examples/generated/0x0011ce99.wav +3 -0
- examples/generated/dialogue_1.wav +3 -0
- examples/generated/dialogue_9.wav +3 -0
- examples/original/0x0006de19.wav +3 -0
- examples/original/0x0008d8e5.wav +3 -0
- examples/original/0x000f7780.wav +3 -0
- examples/original/0x000faf94.wav +3 -0
- examples/original/0x0011ce99.wav +3 -0
- examples/original/dialogue_1.wav +3 -0
- examples/original/dialogue_9.wav +3 -0
- src/__pycache__/utils.cpython-310.pyc +0 -0
- src/content/__pycache__/about_tab.cpython-310.pyc +0 -0
- src/content/__pycache__/about_us_tab.cpython-310.pyc +0 -0
- src/content/__pycache__/contact_tab.cpython-310.pyc +0 -0
- src/content/__pycache__/front_image.cpython-310.pyc +0 -0
- src/content/__pycache__/method_tab.cpython-310.pyc +0 -0
- src/content/__pycache__/results_tab.cpython-310.pyc +0 -0
- src/content/__pycache__/transcription_tab.cpython-310.pyc +0 -0
- src/content/about_tab.py +21 -11
- src/content/about_us_tab.py +48 -0
- src/content/method_tab.py +3 -25
- src/content/results_tab.py +62 -0
- src/content/transcription_tab.py +1 -1
- src/models/__pycache__/asr.cpython-310.pyc +0 -0
- src/models/__pycache__/pipeline.cpython-310.pyc +0 -0
- src/models/__pycache__/translation.cpython-310.pyc +0 -0
- src/models/tts/__pycache__/xtts.cpython-310.pyc +0 -0
.gitattributes
CHANGED
|
@@ -42,3 +42,17 @@ examples/0x0011ce99.wav filter=lfs diff=lfs merge=lfs -text
|
|
| 42 |
examples/0x0011cedc.wav filter=lfs diff=lfs merge=lfs -text
|
| 43 |
examples/dialogue_1.wav filter=lfs diff=lfs merge=lfs -text
|
| 44 |
examples/dialogue_9.wav filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
examples/0x0011cedc.wav filter=lfs diff=lfs merge=lfs -text
|
| 43 |
examples/dialogue_1.wav filter=lfs diff=lfs merge=lfs -text
|
| 44 |
examples/dialogue_9.wav filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
examples/generated/0x0006de19.wav filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
examples/generated/0x0008d8e5.wav filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
examples/generated/0x000f7780.wav filter=lfs diff=lfs merge=lfs -text
|
| 48 |
+
examples/generated/0x000faf94.wav filter=lfs diff=lfs merge=lfs -text
|
| 49 |
+
examples/generated/0x0011ce99.wav filter=lfs diff=lfs merge=lfs -text
|
| 50 |
+
examples/generated/dialogue_1.wav filter=lfs diff=lfs merge=lfs -text
|
| 51 |
+
examples/generated/dialogue_9.wav filter=lfs diff=lfs merge=lfs -text
|
| 52 |
+
examples/original/0x0006de19.wav filter=lfs diff=lfs merge=lfs -text
|
| 53 |
+
examples/original/0x0008d8e5.wav filter=lfs diff=lfs merge=lfs -text
|
| 54 |
+
examples/original/0x000f7780.wav filter=lfs diff=lfs merge=lfs -text
|
| 55 |
+
examples/original/0x000faf94.wav filter=lfs diff=lfs merge=lfs -text
|
| 56 |
+
examples/original/0x0011ce99.wav filter=lfs diff=lfs merge=lfs -text
|
| 57 |
+
examples/original/dialogue_1.wav filter=lfs diff=lfs merge=lfs -text
|
| 58 |
+
examples/original/dialogue_9.wav filter=lfs diff=lfs merge=lfs -text
|
examples/generated/0x0006de19.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:22799d5aaf1f1c10bd98b5117585dbf862268336fb0ed43b6213db5014cfd762
|
| 3 |
+
size 200464
|
examples/generated/0x0008d8e5.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:bf4cbd5261c35939b2bcd26fbdcc5ee7f4d861986f67feb4b7e1698a8deb3880
|
| 3 |
+
size 214576
|
examples/generated/0x000f7780.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:daff7d700b3b7da0d4c1d4b1d26ef6a0978ed9bd563d802563fd7535738bfc7f
|
| 3 |
+
size 317124
|
examples/generated/0x000faf94.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:890b88c846f65fe12ca9f7c25cdb0d6b81c3dba6297ae2f21b9e812a82ef74e1
|
| 3 |
+
size 525982
|
examples/generated/0x0011ce99.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:381520ad242a2f2b5292117b264706d5f9a8f02d86125dc953742dd725cae514
|
| 3 |
+
size 419672
|
examples/generated/dialogue_1.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:45d53cc727fe1d3ee851a8cb339e41b201b067094cdbe13b2c98cf2bf54d96de
|
| 3 |
+
size 1763754
|
examples/generated/dialogue_9.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c6d82ae45a082cdee06a54aed78666506b4570885b8674d83707e2823ba1f975
|
| 3 |
+
size 882044
|
examples/original/0x0006de19.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:78d3d9bf2995902a256cedb67c88fa8f3e4725163ddd48709cf61c83ebb786fb
|
| 3 |
+
size 537900
|
examples/original/0x0008d8e5.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:9cb598944972483bb3c9df133e2bc924fe3443a4b940646d2b24b7f39f402705
|
| 3 |
+
size 577324
|
examples/original/0x000f7780.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:bd85ed67a67c1db412f12405eb43b5d322e5ff6c9e161ee88e863a5109780d2d
|
| 3 |
+
size 973100
|
examples/original/0x000faf94.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:556bdd4637f233c678f0b9d8b3157e5b0351a8f49817f4d68a5fb5d7e87c3768
|
| 3 |
+
size 2771244
|
examples/original/0x0011ce99.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:4d9d5c13b288c6c2a78b1dddd46933311df01fd3a496ec757bf2d02c32b19e83
|
| 3 |
+
size 1364268
|
examples/original/dialogue_1.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:961b1c704cdf4e8ccfdd9f982c269e0f0daf4d3ca38f8b77fa1c92fc46104dc9
|
| 3 |
+
size 6350444
|
examples/original/dialogue_9.wav
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8a1f4fabe2a34165a458041ffaac972231483ecbd2c2ad828d8ba6886eb3daec
|
| 3 |
+
size 681544
|
src/__pycache__/utils.cpython-310.pyc
ADDED
|
Binary file (424 Bytes). View file
|
|
|
src/content/__pycache__/about_tab.cpython-310.pyc
ADDED
|
Binary file (2.7 kB). View file
|
|
|
src/content/__pycache__/about_us_tab.cpython-310.pyc
ADDED
|
Binary file (2.74 kB). View file
|
|
|
src/content/__pycache__/contact_tab.cpython-310.pyc
ADDED
|
Binary file (568 Bytes). View file
|
|
|
src/content/__pycache__/front_image.cpython-310.pyc
ADDED
|
Binary file (820 Bytes). View file
|
|
|
src/content/__pycache__/method_tab.cpython-310.pyc
ADDED
|
Binary file (3.21 kB). View file
|
|
|
src/content/__pycache__/results_tab.cpython-310.pyc
ADDED
|
Binary file (3.92 kB). View file
|
|
|
src/content/__pycache__/transcription_tab.cpython-310.pyc
ADDED
|
Binary file (2.07 kB). View file
|
|
|
src/content/about_tab.py
CHANGED
|
@@ -1,16 +1,26 @@
|
|
| 1 |
import gradio as gr
|
| 2 |
|
| 3 |
def about_tab():
|
| 4 |
-
with gr.TabItem("ℹ️
|
| 5 |
-
gr.
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
|
| 13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
-
**Technologie:** Whisper, DeepL, XTTS, Gradio, Python.
|
| 16 |
-
""")
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
|
| 3 |
def about_tab():
|
| 4 |
+
with gr.TabItem("ℹ️ O projekcie"):
|
| 5 |
+
with gr.Column():
|
| 6 |
+
gr.HTML('<div style="font-size: 35px; font-family: Myriad, sans-serif; font-weight: bold; text-align: left;">🎮 Motywacja</div>')
|
| 7 |
+
gr.HTML("""
|
| 8 |
+
<div style="font-size: 18px; font-family: Myriad, sans-serif;">
|
| 9 |
+
Podczas analizy recenzji gier publikowanych na popularnych serwisach, wielokrotnie natrafialiśmy na głosy graczy wyrażających niezadowolenie z braku polskiego dubbingu w produkcjach zagranicznych. Wielu z nich podkreślało, że brak lokalizacji głosowej negatywnie wpływa na immersję i znacznie obniża jakość doświadczenia płynącego z rozgrywki. Zaintrygowani tym problemem postanowiliśmy zgłębić temat. Nasze obserwacje potwierdziły, że główną barierą we wdrażaniu lokalizacji na mniejsze rynki takie jak polski są wysokie koszty oraz długi czas realizacji. W odpowiedzi na tę lukę rynkową podjęliśmy decyzję o stworzeniu systemu do automatycznego generowania dubbingu w języku polskim z wykorzystaniem AI.
|
| 10 |
+
</div>
|
| 11 |
+
""")
|
| 12 |
|
| 13 |
+
gr.HTML('<div style="font-size: 35px; font-family: Myriad, sans-serif; font-weight: bold; text-align: left;">🎯 Cel</div>')
|
| 14 |
+
gr.HTML("""
|
| 15 |
+
<div style="font-size: 18px; font-family: Myriad, sans-serif;">
|
| 16 |
+
Celem naszego projektu jest dostarczenie rozwiązania, które znacząco obniży koszty lokalizacji oraz skróci czas jej realizacji, jednocześnie zachowując wysoką jakość audio i naturalność wypowiedzi.
|
| 17 |
+
</div>
|
| 18 |
+
""")
|
| 19 |
+
|
| 20 |
+
gr.HTML('<div style="font-size: 35px; font-family: Myriad, sans-serif; font-weight: bold; text-align: left;">🛠️ Architektura</div>')
|
| 21 |
+
gr.HTML("""
|
| 22 |
+
<div style="font-size: 18px; font-family: Myriad, sans-serif;">
|
| 23 |
+
Aby osiągnąć nasz cel, opracowaliśmy modularną architekturę systemu umożliwiającego generowanie dubbingu z użyciem nowoczesnych modeli AI. Cały proces został podzielony na trzy główne etapy: przetwarzanie wstępne, tłumaczenie oraz generowanie dźwięku. Każdy z tych komponentów działa niezależnie, co pozwala na łatwą modyfikację lub wymianę modelu na bardziej zaawansowany bez konieczności przebudowy całego potoku przetwarzania.
|
| 24 |
+
</div>
|
| 25 |
+
""")
|
| 26 |
|
|
|
|
|
|
src/content/about_us_tab.py
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
def about_us_tab():
|
| 5 |
+
with gr.Tab("👥 O nas"):
|
| 6 |
+
with gr.Column():
|
| 7 |
+
gr.HTML('<div style="font-size: 35px; font-family: Myriad, sans-serif; font-weight: bold; text-align: left;">👥 O nas</div>')
|
| 8 |
+
|
| 9 |
+
gr.HTML("""
|
| 10 |
+
<div style="font-size: 18px; font-family: Myriad, sans-serif;">
|
| 11 |
+
Jesteśmy studentami kierunku Sztuczna Inteligencja na Politechnice Wrocławskiej. Projekt DubAI zrealizowaliśmy w ramach zajęć, łącząc naszą pasję do gier komputerowych z chęcią zdobywania nowych umiejętności i pogłębiania wiedzy z zakresu przetwarzania dźwięku i języka naturalnego. Naszym celem było stworzenie narzędzia do generowania dubbingu do gier komputerowych, ze szczególnym uwzględnieniem języka polskiego. Pragniemy dzięki temu zapewnić użytkownikom większą immersję oraz satysfakcję z gry.
|
| 12 |
+
<br><br>
|
| 13 |
+
W skład zespołu wchodzą: Natalia Iwańska, Klaudia Janicka, Wiktor Jeżowski, Kajetan Kołodziejczyk oraz Michał Wiktorowski.
|
| 14 |
+
<br>
|
| 15 |
+
Opiekunami projektu są dr hab. inż. Maciej Piasecki oraz dr inż. Piotr Syga.
|
| 16 |
+
</div>
|
| 17 |
+
""")
|
| 18 |
+
|
| 19 |
+
gr.HTML('<div style="font-size: 35px; font-family: Myriad, sans-serif; font-weight: bold; text-align: left;">📩 Kontakt</div>')
|
| 20 |
+
|
| 21 |
+
gr.HTML("""
|
| 22 |
+
<div style="font-size: 18px; font-family: Myriad, sans-serif;">
|
| 23 |
+
<ul>
|
| 24 |
+
<li>
|
| 25 |
+
Natalia Iwańska 📧
|
| 26 |
+
<a href="mailto:262270@student.pwr.edu.pl">262270@student.pwr.edu.pl</a>
|
| 27 |
+
</li>
|
| 28 |
+
<li>
|
| 29 |
+
Klaudia Janicka 📧
|
| 30 |
+
<a href="mailto:262268@student.pwr.edu.pl">262268@student.pwr.edu.pl</a>
|
| 31 |
+
</li>
|
| 32 |
+
<li>
|
| 33 |
+
Wiktor Jeżowski 📧
|
| 34 |
+
<a href="mailto:260426@student.pwr.edu.pl">260426@student.pwr.edu.pl</a>
|
| 35 |
+
</li>
|
| 36 |
+
<li>
|
| 37 |
+
Kajetan Kołodziejczyk 📧
|
| 38 |
+
<a href="mailto:259171@student.pwr.edu.pl">259171@student.pwr.edu.pl</a>
|
| 39 |
+
</li>
|
| 40 |
+
<li>
|
| 41 |
+
Michał Wiktorowski 📧
|
| 42 |
+
<a href="mailto:262330@student.pwr.edu.pl">262330@student.pwr.edu.pl</a>
|
| 43 |
+
</li>
|
| 44 |
+
</ul>
|
| 45 |
+
</div>
|
| 46 |
+
""")
|
| 47 |
+
|
| 48 |
+
|
src/content/method_tab.py
CHANGED
|
@@ -4,13 +4,13 @@ from src.utils import get_base64_image
|
|
| 4 |
def method_tab():
|
| 5 |
with gr.Tab("⚙️ Metoda"):
|
| 6 |
with gr.Column(elem_classes="method-tab"):
|
| 7 |
-
gr.HTML('<div style="font-size:
|
| 8 |
|
| 9 |
gr.HTML("""
|
| 10 |
<div style="font-size: 18px; font-family: Myriad, sans-serif;">
|
| 11 |
Proces rozpoczęto od oczyszczenia nagrań z zakłóceń tła przy użyciu modelu Demucs, który umożliwił skuteczne wydzielenie sygnału mowy. Następnie zastosowano Mossformer2 do separacji mówców, co pozwoliło rozdzielić wypowiedzi różnych osób w nagraniu. Transkrypcja i segmentacja audio zostały przeprowadzone za pomocą modelu Whisper, znanego z wysokiej jakości rozpoznawania mowy. Otrzymane wypowiedzi pogrupowano przy użyciu algorytmu DBSCAN, co ułatwiło identyfikację spójnych segmentów konwersacyjnych.
|
| 12 |
<br><br>
|
| 13 |
-
Do tłumaczenia wykorzystano polski wielojęzyczny model językowy Bielik, który
|
| 14 |
<br><br>
|
| 15 |
Syntezę mowy zrealizowano przy użyciu modelu XTTS-v2, obsługującego 17 języków i umożliwiającego generowanie naturalnego głosu na podstawie jedynie 6-sekundowego nagrania referencyjnego. Został on wybrany ze względu na dobrą jakość dźwięku, szybkość działania oraz lepszą kompatybilność z językiem polskim niż inne dostępne modele. Na końcu przeprowadzono subiektywną ocenę końcowego dźwięku w formie testów odsłuchowych.
|
| 16 |
<br><br>
|
|
@@ -35,26 +35,4 @@ def method_tab():
|
|
| 35 |
gr.HTML(schema_html)
|
| 36 |
gr.HTML('<div style="text-align: center; font-size: 18px; font-family: Myriad, sans-serif;"><strong>Schemat 1.</strong> Przebieg procesu przetwarzania nagrania.</div>')
|
| 37 |
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
gr.HTML('<div style="font-size: 40px; font-family: Myriad, sans-serif; font-weight: bold; text-align: left;">🎵 Nagrania przykładowe</div>')
|
| 41 |
-
with gr.Row():
|
| 42 |
-
with gr.Column():
|
| 43 |
-
gr.Audio("examples/0x000f7780.wav", label="Nagranie 1", type="filepath")
|
| 44 |
-
with gr.Column():
|
| 45 |
-
gr.Audio("examples/0x000faf94.wav", label="Nagranie 2", type="filepath")
|
| 46 |
-
with gr.Row():
|
| 47 |
-
with gr.Column():
|
| 48 |
-
gr.Audio("examples/0x0006de19.wav", label="Nagranie 3", type="filepath")
|
| 49 |
-
with gr.Column():
|
| 50 |
-
gr.Audio("examples/0x0008d8e5.wav", label="Nagranie 4", type="filepath")
|
| 51 |
-
with gr.Row():
|
| 52 |
-
with gr.Column():
|
| 53 |
-
gr.Audio("examples/0x0011ce99.wav", label="Nagranie 5", type="filepath")
|
| 54 |
-
with gr.Column():
|
| 55 |
-
gr.Audio("examples/0x0011cedc.wav", label="Nagranie 6", type="filepath")
|
| 56 |
-
with gr.Row():
|
| 57 |
-
with gr.Column():
|
| 58 |
-
gr.Audio("examples/dialogue_1.wav", label="Dialog 1", type="filepath")
|
| 59 |
-
with gr.Column():
|
| 60 |
-
gr.Audio("examples/dialogue_9.wav", label="Dialog 2", type="filepath")
|
|
|
|
| 4 |
def method_tab():
|
| 5 |
with gr.Tab("⚙️ Metoda"):
|
| 6 |
with gr.Column(elem_classes="method-tab"):
|
| 7 |
+
gr.HTML('<div style="font-size: 35px; font-family: Myriad, sans-serif; font-weight: bold; text-align: left;">⚙️ Metoda</div>')
|
| 8 |
|
| 9 |
gr.HTML("""
|
| 10 |
<div style="font-size: 18px; font-family: Myriad, sans-serif;">
|
| 11 |
Proces rozpoczęto od oczyszczenia nagrań z zakłóceń tła przy użyciu modelu Demucs, który umożliwił skuteczne wydzielenie sygnału mowy. Następnie zastosowano Mossformer2 do separacji mówców, co pozwoliło rozdzielić wypowiedzi różnych osób w nagraniu. Transkrypcja i segmentacja audio zostały przeprowadzone za pomocą modelu Whisper, znanego z wysokiej jakości rozpoznawania mowy. Otrzymane wypowiedzi pogrupowano przy użyciu algorytmu DBSCAN, co ułatwiło identyfikację spójnych segmentów konwersacyjnych.
|
| 12 |
<br><br>
|
| 13 |
+
Do tłumaczenia wykorzystano polski wielojęzyczny model językowy Bielik, który efektywnie przekłada teksty zachowując ich znaczenie. Unikalnym aspektem naszego podejścia jest uwzględnianie kontekstu w postaci sąsiadujących fragmentów dialogu — zarówno wypowiedzi poprzedzających, jak i następujących po tłumaczonym fragmencie. Jakość tłumaczeń jest oceniana automatycznie za pomocą metryk takich jak COMET, BERTScore i BLEU, które zapewniają obiektywną ocenę pod kątem zgodności semantycznej oraz płynności tłumaczonego tekstu.
|
| 14 |
<br><br>
|
| 15 |
Syntezę mowy zrealizowano przy użyciu modelu XTTS-v2, obsługującego 17 języków i umożliwiającego generowanie naturalnego głosu na podstawie jedynie 6-sekundowego nagrania referencyjnego. Został on wybrany ze względu na dobrą jakość dźwięku, szybkość działania oraz lepszą kompatybilność z językiem polskim niż inne dostępne modele. Na końcu przeprowadzono subiektywną ocenę końcowego dźwięku w formie testów odsłuchowych.
|
| 16 |
<br><br>
|
|
|
|
| 35 |
gr.HTML(schema_html)
|
| 36 |
gr.HTML('<div style="text-align: center; font-size: 18px; font-family: Myriad, sans-serif;"><strong>Schemat 1.</strong> Przebieg procesu przetwarzania nagrania.</div>')
|
| 37 |
|
| 38 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/content/results_tab.py
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
from pathlib import Path
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
def get_files(dir_name):
|
| 6 |
+
path = Path(__file__).resolve().parents[2] / 'examples' / dir_name
|
| 7 |
+
files = sorted(path.glob("*.wav"))
|
| 8 |
+
return files
|
| 9 |
+
|
| 10 |
+
ORIGINAL = get_files('original')
|
| 11 |
+
GENERATED = get_files('generated')
|
| 12 |
+
|
| 13 |
+
def results_tab():
|
| 14 |
+
with gr.Tab("📊 Wyniki"):
|
| 15 |
+
with gr.Column(elem_classes="results-tab"):
|
| 16 |
+
gr.HTML('<div style="font-size: 35px; font-family: Myriad, sans-serif; font-weight: bold; text-align: left;">🎵 Przykłady dubbingu</div>')
|
| 17 |
+
with gr.Row():
|
| 18 |
+
gr.HTML('<div style="font-size: 20px; font-family: Myriad, sans-serif; font-weight: bold; text-align: center;">Oryginalne nagranie</div>')
|
| 19 |
+
gr.HTML('<div style="font-size: 20px; font-family: Myriad, sans-serif; font-weight: bold; text-align: center;">Wygenerowany dubbing</div>')
|
| 20 |
+
for file1, file2 in zip(ORIGINAL, GENERATED):
|
| 21 |
+
with gr.Row():
|
| 22 |
+
with gr.Column():
|
| 23 |
+
gr.Audio(file1, label='Oryginał', type="filepath")
|
| 24 |
+
with gr.Column():
|
| 25 |
+
gr.Audio(file2, label='Wygenerowany', type="filepath")
|
| 26 |
+
|
| 27 |
+
gr.HTML('<br><br>')
|
| 28 |
+
|
| 29 |
+
gr.HTML('<div style="font-size: 35px; font-family: Myriad, sans-serif; font-weight: bold; text-align: left;">Przykłady wpływu kontekstu na tłumaczenie</div>')
|
| 30 |
+
gr.HTML("""
|
| 31 |
+
<div style="display:flex; gap:20px; flex-wrap: wrap; color:#000;">
|
| 32 |
+
|
| 33 |
+
<div style="flex:1; background-color:#f5f5f5; color:#000; border:2px solid black; border-radius:20px; padding:15px; min-width:300px;">
|
| 34 |
+
<h3 style="color:#000;">Przykład 1</h3>
|
| 35 |
+
<b>Dialog:</b><br>
|
| 36 |
+
<div style="background-color:#e0e0e0; border-radius:10px; padding:10px; margin-top:5px; margin-bottom:10px; color:#000;">
|
| 37 |
+
Troll - Ick metal. Mouth stings.<br>
|
| 38 |
+
Lambert - <b style="color:black;">You nuts?!</b><br>
|
| 39 |
+
Geralt - Shut up and follow my lead.
|
| 40 |
+
</div>
|
| 41 |
+
<b style="color:black;">Oryginalne:</b> Zwariowałeś?! ⭐<br>
|
| 42 |
+
<b style="color:black;">Bez kontekstu:</b> Ty orzeszku?! <span>👎</span><br>
|
| 43 |
+
<b style="color:black;">Z kontekstem:</b> <b style="color:black;">Czy ty zwariowałeś?!</b> ✅
|
| 44 |
+
</div>
|
| 45 |
+
|
| 46 |
+
<div style="flex:1; background-color:#f5f5f5; color:#000; border:2px solid black; border-radius:20px; padding:15px; min-width:300px;">
|
| 47 |
+
<h3 style="color:#000;">Przykład 2</h3>
|
| 48 |
+
<b>Dialog:</b><br>
|
| 49 |
+
<div style="background-color:#e0e0e0; border-radius:10px; padding:10px; margin-top:5px; margin-bottom:10px; color:#000;">
|
| 50 |
+
Yennefer - Philippa, your eyesight, only just recovered and magically simulated. Didn’t you say you’d need some time to get accustomed?<br>
|
| 51 |
+
Philippa Eilhart - <b style="color:black;">Did I?</b><br>
|
| 52 |
+
Yennefer - I’d forgotten how irritating she can be. Come, Ciri.
|
| 53 |
+
</div>
|
| 54 |
+
<b style="color:black;">Oryginalne:</b> Tak mówiłam? ⭐<br>
|
| 55 |
+
<b style="color:black;">Bez kontekstu:</b> Czy ja? <span style="color:black;">👎</span><br>
|
| 56 |
+
<b style="color:black;">Z kontekstem:</b> <b style="color:black;">Czy ja tak powiedziałam?</b> ✅
|
| 57 |
+
</div>
|
| 58 |
+
</div>
|
| 59 |
+
""")
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
|
src/content/transcription_tab.py
CHANGED
|
@@ -3,7 +3,7 @@ import gradio as gr
|
|
| 3 |
def transcription_tab(full_pipeline):
|
| 4 |
with gr.Tab("🎙️ Aplikacja"):
|
| 5 |
with gr.Column(elem_classes="method-tab"):
|
| 6 |
-
gr.HTML('<div style="font-size:
|
| 7 |
gr.HTML("""
|
| 8 |
<div style="font-size: 18px; font-family: Myriad, sans-serif;">
|
| 9 |
Jesteś ciekawy, jak Twój głos brzmi w innym języku? Możesz to sprawdzić! W ramach projektu udostępniamy wersję demonstracyjną naszej aplikacji. Wystarczy nagrać swoją wypowiedź w języku polskim, a aplikacja automatycznie przetłumaczy ją na język angielski i wygeneruje syntezę głosu. Wystarczy kliknąć przycisk "Uruchom", aby rozpocząć proces.
|
|
|
|
| 3 |
def transcription_tab(full_pipeline):
|
| 4 |
with gr.Tab("🎙️ Aplikacja"):
|
| 5 |
with gr.Column(elem_classes="method-tab"):
|
| 6 |
+
gr.HTML('<div style="font-size: 35px; font-family: Myriad, sans-serif; font-weight: bold; text-align: left;">🎙️ Aplikacja</div>')
|
| 7 |
gr.HTML("""
|
| 8 |
<div style="font-size: 18px; font-family: Myriad, sans-serif;">
|
| 9 |
Jesteś ciekawy, jak Twój głos brzmi w innym języku? Możesz to sprawdzić! W ramach projektu udostępniamy wersję demonstracyjną naszej aplikacji. Wystarczy nagrać swoją wypowiedź w języku polskim, a aplikacja automatycznie przetłumaczy ją na język angielski i wygeneruje syntezę głosu. Wystarczy kliknąć przycisk "Uruchom", aby rozpocząć proces.
|
src/models/__pycache__/asr.cpython-310.pyc
ADDED
|
Binary file (1.55 kB). View file
|
|
|
src/models/__pycache__/pipeline.cpython-310.pyc
ADDED
|
Binary file (756 Bytes). View file
|
|
|
src/models/__pycache__/translation.cpython-310.pyc
ADDED
|
Binary file (1.11 kB). View file
|
|
|
src/models/tts/__pycache__/xtts.cpython-310.pyc
ADDED
|
Binary file (1.21 kB). View file
|
|
|