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