Update app.py
Browse files
app.py
CHANGED
@@ -1,17 +1,18 @@
|
|
1 |
import gradio as gr
|
2 |
import cv2
|
3 |
import numpy as np
|
4 |
-
from PIL import Image
|
5 |
|
6 |
-
def compress_and_enhance(img, mode):
|
7 |
"""
|
8 |
Сжимает изображение, уменьшая его в 2 раза по ширине, высоте или обоим измерениям,
|
9 |
-
затем увеличивает обратно с помощью интерполяции
|
10 |
-
|
11 |
|
12 |
Args:
|
13 |
img: Изображение в формате PIL Image.
|
14 |
mode: Режим сжатия ("Width", "Height", "Both").
|
|
|
15 |
|
16 |
Returns:
|
17 |
Обработанное изображение в формате PIL Image.
|
@@ -37,26 +38,39 @@ def compress_and_enhance(img, mode):
|
|
37 |
else:
|
38 |
resized_img = img
|
39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
# Нерезкое маскирование (Unsharp Masking)
|
41 |
-
blurred = cv2.GaussianBlur(
|
42 |
-
sharpened = cv2.addWeighted(
|
|
|
|
|
|
|
|
|
|
|
43 |
|
44 |
-
return
|
45 |
|
46 |
-
def process_image(img, mode):
|
47 |
"""
|
48 |
Обрабатывает изображение.
|
49 |
|
50 |
Args:
|
51 |
img: Изображение.
|
52 |
mode: Режим сжатия.
|
|
|
53 |
|
54 |
Returns:
|
55 |
Обработанное изображение в формате PIL Image или None.
|
56 |
"""
|
57 |
if img is not None:
|
58 |
pil_img = Image.fromarray(img.astype('uint8'), 'RGB')
|
59 |
-
return compress_and_enhance(pil_img, mode)
|
60 |
else:
|
61 |
return None
|
62 |
|
@@ -65,11 +79,12 @@ iface = gr.Interface(
|
|
65 |
fn=process_image,
|
66 |
inputs=[
|
67 |
gr.Image(type="numpy", label="Upload Image"),
|
68 |
-
gr.Radio(choices=["Width", "Height", "Both"], label="Compression Mode", value="Both")
|
|
|
69 |
],
|
70 |
outputs=gr.Image(type="pil", label="Processed Image"),
|
71 |
title="Image Compression and Enhancement",
|
72 |
-
description="Compresses an image
|
73 |
)
|
74 |
|
75 |
iface.launch()
|
|
|
1 |
import gradio as gr
|
2 |
import cv2
|
3 |
import numpy as np
|
4 |
+
from PIL import Image, ImageEnhance
|
5 |
|
6 |
+
def compress_and_enhance(img, mode, denoise_strength):
|
7 |
"""
|
8 |
Сжимает изображение, уменьшая его в 2 раза по ширине, высоте или обоим измерениям,
|
9 |
+
затем увеличивает обратно с помощью интерполяции Ланцоша, применяет
|
10 |
+
агрессивное шумоподавление и корректирует насыщенность.
|
11 |
|
12 |
Args:
|
13 |
img: Изображение в формате PIL Image.
|
14 |
mode: Режим сжатия ("Width", "Height", "Both").
|
15 |
+
denoise_strength: Сила шумоподавления (от 0 до 10, где 0 - нет шумоподавления, 10 - максимальное).
|
16 |
|
17 |
Returns:
|
18 |
Обработанное изображение в формате PIL Image.
|
|
|
38 |
else:
|
39 |
resized_img = img
|
40 |
|
41 |
+
# Агрессивное шумоподавление (Non-Local Means Denoising)
|
42 |
+
if denoise_strength > 0:
|
43 |
+
# h values from 3 (very low) to 10 (very high)
|
44 |
+
denoised_img = cv2.fastNlMeansDenoisingColored(resized_img, None, h=denoise_strength, templateWindowSize=7, searchWindowSize=21)
|
45 |
+
else:
|
46 |
+
denoised_img = resized_img
|
47 |
+
|
48 |
# Нерезкое маскирование (Unsharp Masking)
|
49 |
+
blurred = cv2.GaussianBlur(denoised_img, (0, 0), 3)
|
50 |
+
sharpened = cv2.addWeighted(denoised_img, 1.5, blurred, -0.5, 0)
|
51 |
+
|
52 |
+
# Коррекция насыщенности
|
53 |
+
pil_img = Image.fromarray(sharpened)
|
54 |
+
enhancer = ImageEnhance.Color(pil_img)
|
55 |
+
enhanced_img = enhancer.enhance(1.2) # Увеличение насыщенности на 20%
|
56 |
|
57 |
+
return enhanced_img
|
58 |
|
59 |
+
def process_image(img, mode, denoise_strength):
|
60 |
"""
|
61 |
Обрабатывает изображение.
|
62 |
|
63 |
Args:
|
64 |
img: Изображение.
|
65 |
mode: Режим сжатия.
|
66 |
+
denoise_strength: Сила шумоподавления.
|
67 |
|
68 |
Returns:
|
69 |
Обработанное изображение в формате PIL Image или None.
|
70 |
"""
|
71 |
if img is not None:
|
72 |
pil_img = Image.fromarray(img.astype('uint8'), 'RGB')
|
73 |
+
return compress_and_enhance(pil_img, mode, denoise_strength)
|
74 |
else:
|
75 |
return None
|
76 |
|
|
|
79 |
fn=process_image,
|
80 |
inputs=[
|
81 |
gr.Image(type="numpy", label="Upload Image"),
|
82 |
+
gr.Radio(choices=["Width", "Height", "Both"], label="Compression Mode", value="Both"),
|
83 |
+
gr.Slider(minimum=0, maximum=10, step=1, label="Denoise Strength", value=0)
|
84 |
],
|
85 |
outputs=gr.Image(type="pil", label="Processed Image"),
|
86 |
title="Image Compression and Enhancement",
|
87 |
+
description="Compresses an image, applies aggressive denoising, and enhances saturation. Adjust the denoise strength for smoother results.",
|
88 |
)
|
89 |
|
90 |
iface.launch()
|