Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -12,46 +12,40 @@ genai.configure(api_key=GEMINI_API_KEY)
|
|
12 |
# Функцыя для транскрыпцыі аўдыя з даданым промптам для стварэння субтытраў з часовымі меткамі
|
13 |
def transcribe_audio(audio_file):
|
14 |
try:
|
15 |
-
# Вызначаем mime_type
|
16 |
mime_type, _ = mimetypes.guess_type(audio_file)
|
17 |
if mime_type is None:
|
18 |
-
return "Немагчыма вызначыць тып файла.
|
19 |
-
|
20 |
-
# Загружаем файл
|
21 |
with open(audio_file, "rb") as f:
|
22 |
audio_data = f.read()
|
23 |
|
24 |
-
# Дадатковы промпт для стварэння субтытраў з часовымі меткамі
|
25 |
prompt_text = (
|
26 |
"зрабі транскрыпцыю аўдыяфайла для стварэння субтытрыў з часовымі меткамі\n"
|
27 |
"вось прыклад фармату\n"
|
28 |
"0:00:28.373,0:00:32.347 Нешта маналітнае, цэльнае, а тут чалавек эвалюцыянаваў.\n"
|
29 |
"0:00:32.898,0:00:37.061 Ды зрабіў круты паварот у сваіх поглядах яшчэ да развалу эсэсэ.\n"
|
30 |
"0:00:37.901,0:00:41.504 Забываем даражэнькія пра падабайку і падпіску на наш канал, добра."
|
|
|
|
|
31 |
)
|
32 |
|
33 |
-
# Ствараем запыт да Gemini з даданнем промпту і audio_data model = genai.GenerativeModel("gemini-2.0-flash")
|
34 |
model = genai.GenerativeModel("gemini-2.0-pro-exp-02-05")
|
35 |
response = model.generate_content(
|
36 |
[prompt_text, {"mime_type": mime_type, "data": audio_data}]
|
37 |
)
|
38 |
|
39 |
-
|
40 |
-
# Атрыманне тэксту транскрыпцыі (які ўжо змяшчае часовыя меткі)
|
41 |
if response.text:
|
42 |
transcript = response.text.strip()
|
43 |
else:
|
44 |
-
transcript = "Не атрымалася транскрыбаваць аўдыя.
|
45 |
return transcript
|
46 |
except FileNotFoundError:
|
47 |
return "Памылка: Файл не знойдзены."
|
48 |
except genai.APIError as e:
|
49 |
-
return f"Памылка API
|
50 |
except Exception as e:
|
51 |
return f"Нечаканая памылка: {str(e)}"
|
52 |
|
53 |
-
|
54 |
-
# Функцыя для стварэння SRT-файла, у якім субтытры ўжо змяшчаюць часовыя меткі
|
55 |
def create_srt(transcript):
|
56 |
srt_path = "subtitles.srt"
|
57 |
try:
|
@@ -61,29 +55,26 @@ def create_srt(transcript):
|
|
61 |
except Exception as e:
|
62 |
return f"Памылка пры запісе SRT-файла: {str(e)}", None
|
63 |
|
64 |
-
|
65 |
# Функцыя для апрацоўкі аўдыя
|
66 |
def process_audio(audio):
|
67 |
transcript = transcribe_audio(audio)
|
68 |
if transcript.startswith("Памылка"):
|
69 |
-
return transcript, None
|
70 |
text, srt_file = create_srt(transcript)
|
71 |
return text, srt_file
|
72 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
|
74 |
-
|
75 |
-
iface = gr.Interface(
|
76 |
-
fn=process_audio,
|
77 |
-
inputs=gr.Audio(type="filepath"),
|
78 |
-
outputs=[gr.Textbox(label="Транскрыпцыя"), gr.File(label="SRT-файл")],
|
79 |
-
title="Транскрыпцыя аўдыя для беларускай мовы",
|
80 |
-
description="""
|
81 |
-
## Стварэнне субтытраў для беларускай мовы
|
82 |
-
Загрузіце аўд��ёфайл, і субтытры будуць аўтаматычна згенераваны разам з файлам для юцюба, які можна адразу імпартаваць. Падтрымліваюцца фарматы WAV, MP3.
|
83 |
-
[Далучайцеся да беларускаймоўнай суполкі ў ТГ](https://t.me/belarusai)
|
84 |
-
**Падтрымаць праект:** [Buy me a coffee](https://buymeacoffee.com/tuteishygpt)
|
85 |
-
"""
|
86 |
-
)
|
87 |
-
|
88 |
-
if __name__ == "__main__":
|
89 |
-
iface.launch()
|
|
|
12 |
# Функцыя для транскрыпцыі аўдыя з даданым промптам для стварэння субтытраў з часовымі меткамі
|
13 |
def transcribe_audio(audio_file):
|
14 |
try:
|
|
|
15 |
mime_type, _ = mimetypes.guess_type(audio_file)
|
16 |
if mime_type is None:
|
17 |
+
return "Немагчыма вызначыць тып файла. Падтрымліваюцца толькі аўдыяфайлы."
|
|
|
|
|
18 |
with open(audio_file, "rb") as f:
|
19 |
audio_data = f.read()
|
20 |
|
|
|
21 |
prompt_text = (
|
22 |
"зрабі транскрыпцыю аўдыяфайла для стварэння субтытрыў з часовымі меткамі\n"
|
23 |
"вось прыклад фармату\n"
|
24 |
"0:00:28.373,0:00:32.347 Нешта маналітнае, цэльнае, а тут чалавек эвалюцыянаваў.\n"
|
25 |
"0:00:32.898,0:00:37.061 Ды зрабіў круты паварот у сваіх поглядах яшчэ да развалу эсэсэ.\n"
|
26 |
"0:00:37.901,0:00:41.504 Забываем даражэнькія пра падабайку і падпіску на наш канал, добра."
|
27 |
+
"не пішы нічога, акрамя транскрыпцыі ў зададзеным фармаце"
|
28 |
+
|
29 |
)
|
30 |
|
|
|
31 |
model = genai.GenerativeModel("gemini-2.0-pro-exp-02-05")
|
32 |
response = model.generate_content(
|
33 |
[prompt_text, {"mime_type": mime_type, "data": audio_data}]
|
34 |
)
|
35 |
|
|
|
|
|
36 |
if response.text:
|
37 |
transcript = response.text.strip()
|
38 |
else:
|
39 |
+
transcript = "Не атрымалася транскрыбаваць аўдыя. Магчыма, памылка з API."
|
40 |
return transcript
|
41 |
except FileNotFoundError:
|
42 |
return "Памылка: Файл не знойдзены."
|
43 |
except genai.APIError as e:
|
44 |
+
return f"Памылка API: {str(e)}"
|
45 |
except Exception as e:
|
46 |
return f"Нечаканая памылка: {str(e)}"
|
47 |
|
48 |
+
# Функцыя для стварэння SRT-файла з субтытрамі
|
|
|
49 |
def create_srt(transcript):
|
50 |
srt_path = "subtitles.srt"
|
51 |
try:
|
|
|
55 |
except Exception as e:
|
56 |
return f"Памылка пры запісе SRT-файла: {str(e)}", None
|
57 |
|
|
|
58 |
# Функцыя для апрацоўкі аўдыя
|
59 |
def process_audio(audio):
|
60 |
transcript = transcribe_audio(audio)
|
61 |
if transcript.startswith("Памылка"):
|
62 |
+
return transcript, None
|
63 |
text, srt_file = create_srt(transcript)
|
64 |
return text, srt_file
|
65 |
|
66 |
+
# Выкарыстанне gr.Blocks для стварэння інтэрфейсу з вертыкальным размяшчэннем
|
67 |
+
with gr.Blocks() as demo:
|
68 |
+
gr.Markdown("# Транскрыпцыя аўдыя для беларускай мовы")
|
69 |
+
gr.Markdown("### Загрузіце аўдыёфайл і атрымаеце транскрыпцыю разам з SRT-файлам")
|
70 |
+
|
71 |
+
audio_input = gr.Audio(type="filepath", label="Аўдыёфайл")
|
72 |
+
|
73 |
+
# Кампаненты размешчаны адзін пад адным
|
74 |
+
transcript_output = gr.Textbox(label="Транскрыпцыя", lines=10)
|
75 |
+
file_output = gr.File(label="SRT-файл")
|
76 |
+
|
77 |
+
btn = gr.Button("Апрацаваць")
|
78 |
+
btn.click(process_audio, inputs=audio_input, outputs=[transcript_output, file_output])
|
79 |
|
80 |
+
demo.launch()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|