Update app.py
Browse files
app.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
import gradio as gr
|
2 |
from huggingface_hub import InferenceClient
|
3 |
import PyPDF2
|
4 |
-
from PIL import Image
|
5 |
import cv2
|
6 |
import numpy as np
|
7 |
from pydub import AudioSegment
|
@@ -187,65 +187,14 @@ def resize_image(image, width: int, height: int):
|
|
187 |
resized_img.save(tmp_file.name)
|
188 |
return tmp_file.name
|
189 |
|
190 |
-
# Функция для конвертации аудио
|
191 |
-
def convert_audio(file, target_format: str):
|
192 |
-
if file is None:
|
193 |
-
return "Файл не загружен."
|
194 |
-
|
195 |
-
audio = AudioSegment.from_file(file.name)
|
196 |
-
|
197 |
-
# Сохраняем аудио в новом формате
|
198 |
-
with tempfile.NamedTemporaryFile(delete=False, suffix=f".{target_format.lower()}") as tmp_file:
|
199 |
-
audio.export(tmp_file.name, format=target_format)
|
200 |
-
return tmp_file.name
|
201 |
-
|
202 |
# Функция для перевода текста
|
203 |
def translate_text(text: str, target_language: str):
|
204 |
translator = Translator()
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
if file is None:
|
211 |
-
return "Файл не загружен."
|
212 |
-
|
213 |
-
cap = cv2.VideoCapture(file.name)
|
214 |
-
fps = cap.get(cv2.CAP_PROP_FPS)
|
215 |
-
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
216 |
-
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
|
217 |
-
|
218 |
-
# Создаем объект для записи видео
|
219 |
-
output_path = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4").name
|
220 |
-
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
|
221 |
-
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))
|
222 |
-
|
223 |
-
# Обрезка видео
|
224 |
-
cap.set(cv2.CAP_PROP_POS_MSEC, start_time * 1000)
|
225 |
-
while cap.isOpened():
|
226 |
-
ret, frame = cap.read()
|
227 |
-
if not ret or cap.get(cv2.CAP_PROP_POS_MSEC) >= end_time * 1000:
|
228 |
-
break
|
229 |
-
out.write(frame)
|
230 |
-
|
231 |
-
cap.release()
|
232 |
-
out.release()
|
233 |
-
return output_path
|
234 |
-
|
235 |
-
# Функция для объединения PDF-файлов
|
236 |
-
def merge_pdfs(files):
|
237 |
-
if not files:
|
238 |
-
return "Файлы не загружены."
|
239 |
-
|
240 |
-
merger = PyPDF2.PdfMerger()
|
241 |
-
for file in files:
|
242 |
-
merger.append(file.name)
|
243 |
-
|
244 |
-
# Сохраняем объединенный PDF во временный файл
|
245 |
-
output_path = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf").name
|
246 |
-
merger.write(output_path)
|
247 |
-
merger.close()
|
248 |
-
return output_path
|
249 |
|
250 |
# Создание интерфейса
|
251 |
with gr.Blocks() as demo:
|
@@ -311,19 +260,6 @@ with gr.Blocks() as demo:
|
|
311 |
resized_image_output = gr.Image(label="Результат", type="filepath")
|
312 |
resize_button.click(fn=resize_image, inputs=[image_input, width_input, height_input], outputs=resized_image_output)
|
313 |
|
314 |
-
# Вкладка Felguk-AudioConverter
|
315 |
-
with gr.Tab("Felguk-AudioConverter"):
|
316 |
-
gr.Markdown("## Felguk-AudioConverter: Конвертация аудиофайлов")
|
317 |
-
audio_input = gr.File(label="Загрузите аудиофайл", file_types=[".mp3", ".wav"])
|
318 |
-
target_format_input = gr.Dropdown(
|
319 |
-
choices=["mp3", "wav", "ogg"],
|
320 |
-
label="Выберите формат для конвертации",
|
321 |
-
value="mp3"
|
322 |
-
)
|
323 |
-
convert_button = gr.Button("Конвертировать")
|
324 |
-
converted_audio_output = gr.Audio(label="Результат")
|
325 |
-
convert_button.click(fn=convert_audio, inputs=[audio_input, target_format_input], outputs=converted_audio_output)
|
326 |
-
|
327 |
# Вкладка Felguk-TextTranslator
|
328 |
with gr.Tab("Felguk-TextTranslator"):
|
329 |
gr.Markdown("## Felguk-TextTranslator: Перевод текста")
|
@@ -337,24 +273,6 @@ with gr.Blocks() as demo:
|
|
337 |
translated_text_output = gr.Textbox(label="Результат", interactive=False)
|
338 |
translate_button.click(fn=translate_text, inputs=[text_input, target_language_input], outputs=translated_text_output)
|
339 |
|
340 |
-
# Вкладка Felguk-VideoTrimmer
|
341 |
-
with gr.Tab("Felguk-VideoTrimmer"):
|
342 |
-
gr.Markdown("## Felguk-VideoTrimmer: Обрезка видеофайлов")
|
343 |
-
video_input = gr.File(label="Загрузите видеофайл", file_types=[".mp4", ".avi"])
|
344 |
-
start_time_input = gr.Number(label="Начало обрезки (сек)", value=0)
|
345 |
-
end_time_input = gr.Number(label="Конец обрезки (сек)", value=10)
|
346 |
-
trim_button = gr.Button("Обрезать видео")
|
347 |
-
trimmed_video_output = gr.Video(label="Результат")
|
348 |
-
trim_button.click(fn=trim_video, inputs=[video_input, start_time_input, end_time_input], outputs=trimmed_video_output)
|
349 |
-
|
350 |
-
# Вкладка Felguk-PDFMerger
|
351 |
-
with gr.Tab("Felguk-PDFMerger"):
|
352 |
-
gr.Markdown("## Felguk-PDFMerger: Объединение PDF-файлов")
|
353 |
-
pdf_files_input = gr.Files(label="Загрузите PDF-файлы", file_types=[".pdf"])
|
354 |
-
merge_button = gr.Button("Объединить PDF")
|
355 |
-
merged_pdf_output = gr.File(label="Результат")
|
356 |
-
merge_button.click(fn=merge_pdfs, inputs=pdf_files_input, outputs=merged_pdf_output)
|
357 |
-
|
358 |
# Интерфейс чата
|
359 |
chat_interface = gr.ChatInterface(
|
360 |
respond,
|
|
|
1 |
import gradio as gr
|
2 |
from huggingface_hub import InferenceClient
|
3 |
import PyPDF2
|
4 |
+
from PIL import Image
|
5 |
import cv2
|
6 |
import numpy as np
|
7 |
from pydub import AudioSegment
|
|
|
187 |
resized_img.save(tmp_file.name)
|
188 |
return tmp_file.name
|
189 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
# Функция для перевода текста
|
191 |
def translate_text(text: str, target_language: str):
|
192 |
translator = Translator()
|
193 |
+
try:
|
194 |
+
translation = translator.translate(text, dest=target_language)
|
195 |
+
return translation.text
|
196 |
+
except Exception as e:
|
197 |
+
return f"Ошибка перевода: {str(e)}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
198 |
|
199 |
# Создание интерфейса
|
200 |
with gr.Blocks() as demo:
|
|
|
260 |
resized_image_output = gr.Image(label="Результат", type="filepath")
|
261 |
resize_button.click(fn=resize_image, inputs=[image_input, width_input, height_input], outputs=resized_image_output)
|
262 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
263 |
# Вкладка Felguk-TextTranslator
|
264 |
with gr.Tab("Felguk-TextTranslator"):
|
265 |
gr.Markdown("## Felguk-TextTranslator: Перевод текста")
|
|
|
273 |
translated_text_output = gr.Textbox(label="Результат", interactive=False)
|
274 |
translate_button.click(fn=translate_text, inputs=[text_input, target_language_input], outputs=translated_text_output)
|
275 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
276 |
# Интерфейс чата
|
277 |
chat_interface = gr.ChatInterface(
|
278 |
respond,
|