archivartaunik commited on
Commit
7d946d9
·
verified ·
1 Parent(s): 265d4cc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -43
app.py CHANGED
@@ -1,28 +1,20 @@
1
  import os
2
  import gradio as gr
3
- from google import genai
4
- from google.genai import types
5
  import mimetypes
6
  from pydub import AudioSegment
7
 
8
  # Атрыманне ключоў і мадэляў з пераменных асяроддзя
9
  GEMINI_API_KEY = os.getenv("gemini")
10
  MODEL_NAME_TH = os.getenv("modTH") # Мадэль для транскрыпцыі
11
- MODEL_NAME = os.getenv(
12
- "mod"
13
- ) # Мадэль для выпраўлення фармату і перакладу (можа быць той жа, што і modTH)
14
- PROMPT_TRANSCRIBE = os.getenv(
15
- "p"
16
- ) # Промпт для транскрыпцыі (лепш мець зразумелае імя)
17
-
18
-
19
- # Стварэнне кліента (больш просты спосаб)
20
- client = genai.GenerativeModel(model_name=MODEL_NAME_TH, api_key=GEMINI_API_KEY)
21
- client_general = genai.GenerativeModel(model_name=MODEL_NAME, api_key=GEMINI_API_KEY)
22
 
 
 
23
 
24
  def transcribe_audio(audio_file: str) -> str:
25
- """Транскрыбуе аўдыяфайл з дапамогай Google GenAI."""
26
  try:
27
  mime_type, _ = mimetypes.guess_type(audio_file)
28
  if not mime_type or not mime_type.startswith("audio"):
@@ -34,24 +26,18 @@ def transcribe_audio(audio_file: str) -> str:
34
  with open(audio_file, "rb") as f:
35
  audio_data = f.read()
36
 
37
- response = client.generate_content(
38
- [
39
- PROMPT_TRANSCRIBE,
40
- {"mime_type": mime_type, "data": audio_data},
41
- ] # , # Промпт + дадзеныя
42
- # generation_config=types.GenerationConfig( # можна задаць дадатковыя параметры, напр. temperature
43
- # temperature=0.2,
44
- # )
45
  )
46
- response.resolve() # Яўнае дазвол прамісаў (калі выкарыстоўваецца асінхронны рэжым)
47
- return response.text.strip()
48
 
49
  except FileNotFoundError:
50
  return "Памылка: Файл не знойдзены."
51
  except Exception as e:
52
  return f"Нечаканая памылка: {e}"
53
 
54
-
55
  def fix_subtitles_format(transcript: str) -> str:
56
  """Выпраўляе фармат часу ў субцітрах."""
57
  prompt_fix = (
@@ -60,14 +46,12 @@ def fix_subtitles_format(transcript: str) -> str:
60
  f"{transcript}"
61
  )
62
  try:
63
- response_fix = client_general.generate_content(prompt_fix)
64
- response_fix.resolve()
65
- return response_fix.text.strip()
66
  except Exception as e:
67
  print(f"Памылка пры выпраўленні субцітраў: {e}") # Лагіраванне памылкі
68
  return transcript
69
 
70
-
71
  def create_srt(transcript: str, filename: str = "subtitles.srt") -> tuple[str, str]:
72
  """Стварае SRT-файл з транскрыпцыі."""
73
  try:
@@ -77,7 +61,6 @@ def create_srt(transcript: str, filename: str = "subtitles.srt") -> tuple[str, s
77
  except Exception as e:
78
  return f"Памылка пры запісе SRT-файла: {e}", ""
79
 
80
-
81
  def process_audio(audio_path: str) -> tuple[str, str]:
82
  """Апрацоўвае аўдыёфайл: транскрыбуе і стварае SRT."""
83
  transcript = transcribe_audio(audio_path)
@@ -88,7 +71,6 @@ def process_audio(audio_path: str) -> tuple[str, str]:
88
  text, srt_file = create_srt(fixed_transcript)
89
  return text, srt_file
90
 
91
-
92
  def extract_audio_from_video(video_file: str) -> tuple[str, str]:
93
  """Выдзяляе аўдыёдарожку з відэафайла."""
94
  try:
@@ -99,7 +81,6 @@ def extract_audio_from_video(video_file: str) -> tuple[str, str]:
99
  except Exception as e:
100
  return "", f"Памылка пры выдзяленні аўдыё з відэафайла: {e}"
101
 
102
-
103
  def process_video(video_path: str) -> tuple[str, str]:
104
  """Апрацоўвае відэафайл: выдзяляе аўдыё, транскрыбуе і стварае SRT."""
105
  audio_path, error = extract_audio_from_video(video_path)
@@ -107,7 +88,6 @@ def process_video(video_path: str) -> tuple[str, str]:
107
  return error, ""
108
  return process_audio(audio_path)
109
 
110
-
111
  def process_file(audio_path: str | None, video_path: str | None) -> tuple[str, str]:
112
  """Апрацоўвае файл (аўдыё або відэа)."""
113
  if audio_path:
@@ -117,17 +97,14 @@ def process_file(audio_path: str | None, video_path: str | None) -> tuple[str, s
117
  else:
118
  return "Няма файла для апрацоўкі.", ""
119
 
120
-
121
  def update_on_audio_change(audio_path: str | None) -> gr.update:
122
  """Абнаўляе інтэрфейс пры змене аўдыёфайла."""
123
  return gr.update(value=None, interactive=not bool(audio_path))
124
 
125
-
126
  def update_on_video_change(video_path: str | None) -> gr.update:
127
  """Абнаўляе інтэрфейс пры змене відэафайла."""
128
  return gr.update(value=None, interactive=not bool(video_path))
129
 
130
-
131
  def translate_transcript(
132
  transcript: str, target_language: str
133
  ) -> tuple[str, str]:
@@ -137,16 +114,13 @@ def translate_transcript(
137
  "Астатняе пакінь як ёсць.\nТэкст:\n{transcript}"
138
  )
139
  try:
140
- response = client_general.generate_content(prompt_text)
141
- response.resolve()
142
- translated = response.text.strip()
143
  translated_srt_filename = "translated_subtitles.srt"
144
  return create_srt(translated, translated_srt_filename) # Перавыкарыстанне create_srt
145
  except Exception as e:
146
  return f"Памылка пры перакладзе: {e}", ""
147
 
148
-
149
-
150
  with gr.Blocks() as demo:
151
  gr.Markdown("# Транскрыпцыя аўдыя для беларускай мовы")
152
  gr.Markdown(
@@ -161,7 +135,7 @@ with gr.Blocks() as demo:
161
  audio_input = gr.Audio(type="filepath", label="Аўдыёфайл")
162
  video_input = gr.Video(label="Відэафайл")
163
 
164
- # Больш кампактны спосаб абнаўлення інтэрактыўнасці
165
  audio_input.change(
166
  fn=update_on_audio_change, inputs=audio_input, outputs=video_input
167
  )
@@ -192,4 +166,4 @@ with gr.Blocks() as demo:
192
  outputs=[translation_output, translation_file_output],
193
  )
194
 
195
- demo.launch()
 
1
  import os
2
  import gradio as gr
3
+ import google.generativeai as genai
 
4
  import mimetypes
5
  from pydub import AudioSegment
6
 
7
  # Атрыманне ключоў і мадэляў з пераменных асяроддзя
8
  GEMINI_API_KEY = os.getenv("gemini")
9
  MODEL_NAME_TH = os.getenv("modTH") # Мадэль для транскрыпцыі
10
+ MODEL_NAME = os.getenv("mod") # Мадэль для выпраўлення фармату і перакладу
11
+ PROMPT_TRANSCRIBE = os.getenv("p") # Промпт для транскрыпцыі
 
 
 
 
 
 
 
 
 
12
 
13
+ # Наладжваем API-ключ
14
+ genai.configure(api_key=GEMINI_API_KEY)
15
 
16
  def transcribe_audio(audio_file: str) -> str:
17
+ """Транскрыбуе аўдыяфайл з дапамогай Google Generative AI."""
18
  try:
19
  mime_type, _ = mimetypes.guess_type(audio_file)
20
  if not mime_type or not mime_type.startswith("audio"):
 
26
  with open(audio_file, "rb") as f:
27
  audio_data = f.read()
28
 
29
+ response = genai.generate_text(
30
+ model=MODEL_NAME_TH,
31
+ prompt=[PROMPT_TRANSCRIBE, {"mime_type": mime_type, "data": audio_data}],
32
+ # Пры жаданні можна дадаць дадатковыя параметры, напр. temperature=0.2
 
 
 
 
33
  )
34
+ return response.result.strip()
 
35
 
36
  except FileNotFoundError:
37
  return "Памылка: Файл не знойдзены."
38
  except Exception as e:
39
  return f"Нечаканая памылка: {e}"
40
 
 
41
  def fix_subtitles_format(transcript: str) -> str:
42
  """Выпраўляе фармат часу ў субцітрах."""
43
  prompt_fix = (
 
46
  f"{transcript}"
47
  )
48
  try:
49
+ response_fix = genai.generate_text(model=MODEL_NAME, prompt=prompt_fix)
50
+ return response_fix.result.strip()
 
51
  except Exception as e:
52
  print(f"Памылка пры выпраўленні субцітраў: {e}") # Лагіраванне памылкі
53
  return transcript
54
 
 
55
  def create_srt(transcript: str, filename: str = "subtitles.srt") -> tuple[str, str]:
56
  """Стварае SRT-файл з транскрыпцыі."""
57
  try:
 
61
  except Exception as e:
62
  return f"Памылка пры запісе SRT-файла: {e}", ""
63
 
 
64
  def process_audio(audio_path: str) -> tuple[str, str]:
65
  """Апрацоўвае аўдыёфайл: транскрыбуе і стварае SRT."""
66
  transcript = transcribe_audio(audio_path)
 
71
  text, srt_file = create_srt(fixed_transcript)
72
  return text, srt_file
73
 
 
74
  def extract_audio_from_video(video_file: str) -> tuple[str, str]:
75
  """Выдзяляе аўдыёдарожку з відэафайла."""
76
  try:
 
81
  except Exception as e:
82
  return "", f"Памылка пры выдзяленні аўдыё з відэафайла: {e}"
83
 
 
84
  def process_video(video_path: str) -> tuple[str, str]:
85
  """Апрацоўвае відэафайл: выдзяляе аўдыё, транскрыбуе і стварае SRT."""
86
  audio_path, error = extract_audio_from_video(video_path)
 
88
  return error, ""
89
  return process_audio(audio_path)
90
 
 
91
  def process_file(audio_path: str | None, video_path: str | None) -> tuple[str, str]:
92
  """Апрацоўвае файл (аўдыё або відэа)."""
93
  if audio_path:
 
97
  else:
98
  return "Няма файла для апрацоўкі.", ""
99
 
 
100
  def update_on_audio_change(audio_path: str | None) -> gr.update:
101
  """Абнаўляе інтэрфейс пры змене аўдыёфайла."""
102
  return gr.update(value=None, interactive=not bool(audio_path))
103
 
 
104
  def update_on_video_change(video_path: str | None) -> gr.update:
105
  """Абнаўляе інтэрфейс пры змене відэафайла."""
106
  return gr.update(value=None, interactive=not bool(video_path))
107
 
 
108
  def translate_transcript(
109
  transcript: str, target_language: str
110
  ) -> tuple[str, str]:
 
114
  "Астатняе пакінь як ёсць.\nТэкст:\n{transcript}"
115
  )
116
  try:
117
+ response = genai.generate_text(model=MODEL_NAME, prompt=prompt_text)
118
+ translated = response.result.strip()
 
119
  translated_srt_filename = "translated_subtitles.srt"
120
  return create_srt(translated, translated_srt_filename) # Перавыкарыстанне create_srt
121
  except Exception as e:
122
  return f"Памылка пры перакладзе: {e}", ""
123
 
 
 
124
  with gr.Blocks() as demo:
125
  gr.Markdown("# Транскрыпцыя аўдыя для беларускай мовы")
126
  gr.Markdown(
 
135
  audio_input = gr.Audio(type="filepath", label="Аўдыёфайл")
136
  video_input = gr.Video(label="Відэафайл")
137
 
138
+ # Больш кампактны спосаб абнаўлення інтэрактыўнасці
139
  audio_input.change(
140
  fn=update_on_audio_change, inputs=audio_input, outputs=video_input
141
  )
 
166
  outputs=[translation_output, translation_file_output],
167
  )
168
 
169
+ demo.launch()