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()
|