Update app.py
Browse files
app.py
CHANGED
|
@@ -1,90 +1,70 @@
|
|
| 1 |
import gradio as gr
|
| 2 |
import cv2
|
| 3 |
import numpy as np
|
| 4 |
-
from PIL import Image, ImageEnhance
|
| 5 |
|
| 6 |
-
def
|
| 7 |
"""
|
| 8 |
-
|
| 9 |
-
затем увеличивает обратно с помощью интерполяции Ланцоша, применяет
|
| 10 |
-
агрессивное шумоподавление и корректирует насыщенность.
|
| 11 |
|
| 12 |
Args:
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
denoise_strength: Сила шумоподавления (от 0 до 10, где 0 - нет шумоподавления, 10 - максимальное).
|
| 16 |
|
| 17 |
Returns:
|
| 18 |
-
|
| 19 |
"""
|
| 20 |
-
img = np.array(img)
|
| 21 |
-
original_height, original_width = img.shape[:2]
|
| 22 |
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
# Увеличение обратно по ширине
|
| 27 |
-
resized_img = cv2.resize(small_img, (original_width, original_height), interpolation=cv2.INTER_LANCZOS4)
|
| 28 |
-
elif mode == "Height":
|
| 29 |
-
# Уменьшение по высоте
|
| 30 |
-
small_img = cv2.resize(img, (original_width, original_height // 2), interpolation=cv2.INTER_AREA)
|
| 31 |
-
# Увеличение обратно по высоте
|
| 32 |
-
resized_img = cv2.resize(small_img, (original_width, original_height), interpolation=cv2.INTER_LANCZOS4)
|
| 33 |
-
elif mode == "Both":
|
| 34 |
-
# Уменьшение в 2 раза
|
| 35 |
-
small_img = cv2.resize(img, (original_width // 2, original_height // 2), interpolation=cv2.INTER_AREA)
|
| 36 |
-
# Увеличение обратно
|
| 37 |
-
resized_img = cv2.resize(small_img, (original_width, original_height), interpolation=cv2.INTER_LANCZOS4)
|
| 38 |
-
else:
|
| 39 |
-
resized_img = img
|
| 40 |
|
| 41 |
-
#
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
else:
|
| 46 |
-
denoised_img = resized_img
|
| 47 |
|
| 48 |
-
#
|
| 49 |
-
|
| 50 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 51 |
|
| 52 |
-
#
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
|
| 57 |
-
|
|
|
|
|
|
|
|
|
|
| 58 |
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
Обрабатывает изображение.
|
| 62 |
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
mode: Режим сжатия.
|
| 66 |
-
denoise_strength: Сила шумоподавления.
|
| 67 |
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
return None
|
| 76 |
|
| 77 |
-
#
|
| 78 |
iface = gr.Interface(
|
| 79 |
-
fn=
|
| 80 |
inputs=[
|
| 81 |
-
gr.
|
| 82 |
-
gr.Radio(
|
| 83 |
-
gr.Slider(minimum=0, maximum=10, step=1, label="Denoise Strength", value=0)
|
| 84 |
],
|
| 85 |
-
outputs=gr.
|
| 86 |
-
title="
|
| 87 |
-
description="
|
| 88 |
)
|
| 89 |
|
| 90 |
iface.launch()
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
import cv2
|
| 3 |
import numpy as np
|
|
|
|
| 4 |
|
| 5 |
+
def resize_and_stretch(video_path, direction):
|
| 6 |
"""
|
| 7 |
+
Уменьшает видео по горизонтали или вертикали на 25%, а затем растягивает обратно с помощью интерполяции Ланцоша.
|
|
|
|
|
|
|
| 8 |
|
| 9 |
Args:
|
| 10 |
+
video_path: Путь к видеофайлу.
|
| 11 |
+
direction: Направление сжатия ("horizontal" или "vertical").
|
|
|
|
| 12 |
|
| 13 |
Returns:
|
| 14 |
+
Путь к обработанному видеофайлу.
|
| 15 |
"""
|
|
|
|
|
|
|
| 16 |
|
| 17 |
+
cap = cv2.VideoCapture(video_path)
|
| 18 |
+
if not cap.isOpened():
|
| 19 |
+
raise ValueError("Не удалось открыть видеофайл.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
|
| 21 |
+
# Получаем свойства видео
|
| 22 |
+
fps = cap.get(cv2.CAP_PROP_FPS)
|
| 23 |
+
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
| 24 |
+
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
|
|
|
|
|
|
|
| 25 |
|
| 26 |
+
# Вычисляем новые размеры
|
| 27 |
+
if direction == "horizontal":
|
| 28 |
+
new_width = int(width * 0.75)
|
| 29 |
+
new_height = height
|
| 30 |
+
else: # vertical
|
| 31 |
+
new_width = width
|
| 32 |
+
new_height = int(height * 0.75)
|
| 33 |
|
| 34 |
+
# Создаем объект VideoWriter для записи выходного видео
|
| 35 |
+
fourcc = cv2.VideoWriter_fourcc(*'mp4v') # Или используйте другой кодек, если нужно
|
| 36 |
+
output_path = "output_video.mp4"
|
| 37 |
+
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))
|
| 38 |
|
| 39 |
+
while True:
|
| 40 |
+
ret, frame = cap.read()
|
| 41 |
+
if not ret:
|
| 42 |
+
break
|
| 43 |
|
| 44 |
+
# Уменьшаем размер кадра
|
| 45 |
+
resized_frame = cv2.resize(frame, (new_width, new_height), interpolation=cv2.INTER_LANCZOS4)
|
|
|
|
| 46 |
|
| 47 |
+
# Растягиваем обратно с помощью интерполяции Ланцоша
|
| 48 |
+
stretched_frame = cv2.resize(resized_frame, (width, height), interpolation=cv2.INTER_LANCZOS4)
|
|
|
|
|
|
|
| 49 |
|
| 50 |
+
# Записываем кадр в выходное видео
|
| 51 |
+
out.write(stretched_frame)
|
| 52 |
+
|
| 53 |
+
cap.release()
|
| 54 |
+
out.release()
|
| 55 |
+
|
| 56 |
+
return output_path
|
|
|
|
| 57 |
|
| 58 |
+
# Создаем интерфейс Gradio
|
| 59 |
iface = gr.Interface(
|
| 60 |
+
fn=resize_and_stretch,
|
| 61 |
inputs=[
|
| 62 |
+
gr.Video(label="Загрузите видео"),
|
| 63 |
+
gr.Radio(["horizontal", "vertical"], label="Направление сжатия")
|
|
|
|
| 64 |
],
|
| 65 |
+
outputs=gr.Video(label="Обработанное видео"),
|
| 66 |
+
title="Сжатие и растягивание видео",
|
| 67 |
+
description="Загрузите видео, выберите направление сжатия (горизонтальное или вертикальное), и программа уменьшит его размер на 25% в этом направлении, а затем растянет обратно с помощью интерполяции Ланцоша."
|
| 68 |
)
|
| 69 |
|
| 70 |
iface.launch()
|