Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -8,16 +8,15 @@ from huggingface_hub import login
|
|
8 |
|
9 |
import tempfile
|
10 |
import os
|
11 |
-
import time
|
12 |
|
13 |
# --- Конфигурация ---
|
14 |
-
HF_TOKEN = os.getenv("HF_ACCESS_TOKEN")
|
15 |
MODEL_NAME = "artyomboyko/whisper-small-ru-v4"
|
16 |
BATCH_SIZE = 8
|
17 |
-
FILE_LIMIT_MB = 1000
|
18 |
|
19 |
# --- Инициализация ---
|
20 |
-
# Попробуйте войти в систему Hugging Face, если токен доступен
|
21 |
try:
|
22 |
if HF_TOKEN:
|
23 |
login(token=HF_TOKEN)
|
@@ -45,13 +44,10 @@ try:
|
|
45 |
print(f"Модель {MODEL_NAME} успешно загружена.")
|
46 |
except Exception as e:
|
47 |
print(f"Ошибка при загрузке модели {MODEL_NAME}: {e}")
|
48 |
-
# Можно добавить выход из программы или обработку ошибки
|
49 |
exit()
|
50 |
|
51 |
|
52 |
# --- Функции ---
|
53 |
-
|
54 |
-
# Функция для транскрибации аудиофайла
|
55 |
def transcribe(filepath, task):
|
56 |
"""
|
57 |
Транскрибирует аудиофайл с помощью загруженной модели Whisper.
|
@@ -70,8 +66,6 @@ def transcribe(filepath, task):
|
|
70 |
|
71 |
print(f"Начало транскрибации файла: {filepath}, Задача: {task}")
|
72 |
try:
|
73 |
-
# generate_kwargs передает параметры для генерации текста моделью
|
74 |
-
# return_timestamps=True указывает, что нужно возвращать временные метки (хотя здесь используется только текст)
|
75 |
result = pipe(filepath, batch_size=BATCH_SIZE, generate_kwargs={"task": task}, return_timestamps=True)
|
76 |
text = result["text"]
|
77 |
print("Транскрибация завершена успешно.")
|
@@ -83,13 +77,10 @@ def transcribe(filepath, task):
|
|
83 |
|
84 |
|
85 |
# --- Создание интерфейса Gradio ---
|
86 |
-
|
87 |
-
# Используем gr.Blocks для создания кастомного интерфейса с вкладками
|
88 |
with gr.Blocks(theme=gr.themes.Default(primary_hue="blue", secondary_hue="neutral")) as demo:
|
89 |
-
# Заголовок и описание приложения с использованием Markdown
|
90 |
gr.Markdown(
|
91 |
f"""
|
92 |
-
# Whisper: Транскрибация аудио
|
93 |
Транскрибируйте длинные аудиозаписи (с микрофона или из файла) одним нажатием кнопки!
|
94 |
Демо использует модель OpenAI Whisper [{MODEL_NAME}](https://huggingface.co/{MODEL_NAME})
|
95 |
через библиотеку 🤗 Transformers для распознавания речи.
|
@@ -98,39 +89,31 @@ with gr.Blocks(theme=gr.themes.Default(primary_hue="blue", secondary_hue="neutra
|
|
98 |
|
99 |
# Создание вкладок
|
100 |
with gr.Tabs():
|
|
|
101 |
# Вкладка 1: Транскрибация с микрофона
|
102 |
with gr.TabItem("Микрофон"):
|
103 |
-
with gr.Row():
|
104 |
-
# Компонент для записи аудио с микрофона
|
105 |
-
# type="filepath" - функция будет получать путь к временному файлу
|
106 |
mic_input = gr.Audio(sources=["microphone"], type="filepath", label="Запись с микрофона")
|
107 |
-
# Компонент для выбора задачи (транскрибация или перевод)
|
108 |
task_mic = gr.Radio(["transcribe", "translate"], label="Задача", value="transcribe")
|
109 |
-
# Компонент для вывода результата транскрибации
|
110 |
output_mic = gr.Textbox(label="Результат", lines=7) # Увеличили количество строк для текста
|
111 |
-
# Кнопка для запуска транскрибации с микрофона
|
112 |
mic_button = gr.Button("Транскрибировать с микрофона")
|
113 |
|
114 |
# Вкладка 2: Транскрибация из файла
|
115 |
with gr.TabItem("Аудиофайл"):
|
116 |
with gr.Row():
|
117 |
-
# Компонент для загрузки аудиофайла
|
118 |
-
# type="filepath" - функция будет получать путь к загруженному файлу
|
119 |
file_input = gr.Audio(sources=["upload"], type="filepath", label="Загрузить аудиофайл")
|
120 |
-
# Компонент для выбора задачи
|
121 |
task_file = gr.Radio(["transcribe", "translate"], label="Задача", value="transcribe")
|
122 |
-
# Компонент для вывода результата
|
123 |
output_file = gr.Textbox(label="Результат", lines=7)
|
124 |
-
# Кнопка для запуска транскрибации файла
|
125 |
file_button = gr.Button("Транскрибировать файл")
|
126 |
|
127 |
|
128 |
# --- Привязка функций к кнопкам ---
|
129 |
-
|
|
|
130 |
mic_button.click(
|
131 |
-
fn=transcribe,
|
132 |
-
inputs=[mic_input, task_mic],
|
133 |
-
outputs=output_mic
|
134 |
)
|
135 |
|
136 |
# Связываем кнопку "Транскрибировать файл" с функцией transcribe
|
@@ -141,8 +124,5 @@ with gr.Blocks(theme=gr.themes.Default(primary_hue="blue", secondary_hue="neutra
|
|
141 |
)
|
142 |
|
143 |
# --- Запуск приложения ---
|
144 |
-
# enable_queue=True - обрабатывает запросы последовательно, полезно для долгих задач
|
145 |
-
# share=True - создает публичную ссылку (если нужно)
|
146 |
-
# debug=True - включает режим отладки для вывода логов Gradio
|
147 |
print("Запуск интерфейса Gradio...")
|
148 |
demo.queue().launch(debug=True, share=False)
|
|
|
8 |
|
9 |
import tempfile
|
10 |
import os
|
11 |
+
import time
|
12 |
|
13 |
# --- Конфигурация ---
|
14 |
+
HF_TOKEN = os.getenv("HF_ACCESS_TOKEN")
|
15 |
MODEL_NAME = "artyomboyko/whisper-small-ru-v4"
|
16 |
BATCH_SIZE = 8
|
17 |
+
# FILE_LIMIT_MB = 1000
|
18 |
|
19 |
# --- Инициализация ---
|
|
|
20 |
try:
|
21 |
if HF_TOKEN:
|
22 |
login(token=HF_TOKEN)
|
|
|
44 |
print(f"Модель {MODEL_NAME} успешно загружена.")
|
45 |
except Exception as e:
|
46 |
print(f"Ошибка при загрузке модели {MODEL_NAME}: {e}")
|
|
|
47 |
exit()
|
48 |
|
49 |
|
50 |
# --- Функции ---
|
|
|
|
|
51 |
def transcribe(filepath, task):
|
52 |
"""
|
53 |
Транскрибирует аудиофайл с помощью загруженной модели Whisper.
|
|
|
66 |
|
67 |
print(f"Начало транскрибации файла: {filepath}, Задача: {task}")
|
68 |
try:
|
|
|
|
|
69 |
result = pipe(filepath, batch_size=BATCH_SIZE, generate_kwargs={"task": task}, return_timestamps=True)
|
70 |
text = result["text"]
|
71 |
print("Транскрибация завершена успешно.")
|
|
|
77 |
|
78 |
|
79 |
# --- Создание интерфейса Gradio ---
|
|
|
|
|
80 |
with gr.Blocks(theme=gr.themes.Default(primary_hue="blue", secondary_hue="neutral")) as demo:
|
|
|
81 |
gr.Markdown(
|
82 |
f"""
|
83 |
+
# Whisper: Транскрибация аудио
|
84 |
Транскрибируйте длинные аудиозаписи (с микрофона или из файла) одним нажатием кнопки!
|
85 |
Демо использует модель OpenAI Whisper [{MODEL_NAME}](https://huggingface.co/{MODEL_NAME})
|
86 |
через библиотеку 🤗 Transformers для распознавания речи.
|
|
|
89 |
|
90 |
# Создание вкладок
|
91 |
with gr.Tabs():
|
92 |
+
|
93 |
# Вкладка 1: Транскрибация с микрофона
|
94 |
with gr.TabItem("Микрофон"):
|
95 |
+
with gr.Row():
|
|
|
|
|
96 |
mic_input = gr.Audio(sources=["microphone"], type="filepath", label="Запись с микрофона")
|
|
|
97 |
task_mic = gr.Radio(["transcribe", "translate"], label="Задача", value="transcribe")
|
|
|
98 |
output_mic = gr.Textbox(label="Результат", lines=7) # Увеличили количество строк для текста
|
|
|
99 |
mic_button = gr.Button("Транскрибировать с микрофона")
|
100 |
|
101 |
# Вкладка 2: Транскрибация из файла
|
102 |
with gr.TabItem("Аудиофайл"):
|
103 |
with gr.Row():
|
|
|
|
|
104 |
file_input = gr.Audio(sources=["upload"], type="filepath", label="Загрузить аудиофайл")
|
|
|
105 |
task_file = gr.Radio(["transcribe", "translate"], label="Задача", value="transcribe")
|
|
|
106 |
output_file = gr.Textbox(label="Результат", lines=7)
|
|
|
107 |
file_button = gr.Button("Транскрибировать файл")
|
108 |
|
109 |
|
110 |
# --- Привязка функций к кнопкам ---
|
111 |
+
|
112 |
+
# Связываем кнопку "Транскрибировать с микрофона" с функцией transcrib
|
113 |
mic_button.click(
|
114 |
+
fn=transcribe,
|
115 |
+
inputs=[mic_input, task_mic],
|
116 |
+
outputs=output_mic
|
117 |
)
|
118 |
|
119 |
# Связываем кнопку "Транскрибировать файл" с функцией transcribe
|
|
|
124 |
)
|
125 |
|
126 |
# --- Запуск приложения ---
|
|
|
|
|
|
|
127 |
print("Запуск интерфейса Gradio...")
|
128 |
demo.queue().launch(debug=True, share=False)
|