Spaces:
Running on T4
Running on T4
Commit ·
8fded30
1
Parent(s): 5c67f33
Ensure consistent results with deterministic settings
Browse files
logic.py
CHANGED
|
@@ -63,7 +63,7 @@ class WatermarkRemover:
|
|
| 63 |
generated_text, task=task_prompt.value, image_size=image.size
|
| 64 |
)
|
| 65 |
|
| 66 |
-
def _get_mask_for_prompt(self, image: Image.Image, text_input: str, max_bbox_percent: float, expand_ratio: float = 0.
|
| 67 |
logger.info(f"Поиск по промпту: '{text_input}'...")
|
| 68 |
parsed_answer = self._identify(image, text_input)
|
| 69 |
mask = Image.new("L", image.size, 0)
|
|
@@ -165,31 +165,32 @@ class WatermarkRemover:
|
|
| 165 |
# Адаптивные параметры на основе размера маски
|
| 166 |
if mask_area > 0.3: # Большая область (более 30%)
|
| 167 |
steps = 50
|
| 168 |
-
strength = 0.
|
| 169 |
-
denoising_end = 0.
|
| 170 |
elif mask_area > 0.1: # Средняя область (10-30%)
|
| 171 |
steps = 40
|
| 172 |
-
strength = 0.
|
| 173 |
-
denoising_end = 0.
|
| 174 |
else: # Маленькая область (менее 10%)
|
| 175 |
steps = 35
|
| 176 |
-
strength = 0.
|
| 177 |
-
denoising_end = 0.
|
| 178 |
|
| 179 |
logger.info(f"Параметры генерации: area={mask_area:.2%}, steps={steps}, strength={strength}, denoising_end={denoising_end}")
|
| 180 |
|
| 181 |
-
#
|
| 182 |
result_image = self.inpainting_pipeline(
|
| 183 |
-
prompt="", #
|
| 184 |
negative_prompt=(
|
| 185 |
"watermark, text, logo, signature, copyright, "
|
| 186 |
"blurry, distorted, artifact, deformed, noisy, "
|
| 187 |
-
"low quality, jpeg artifacts, drawing, painting, sketch"
|
|
|
|
| 188 |
),
|
| 189 |
image=image,
|
| 190 |
mask_image=mask,
|
| 191 |
num_inference_steps=steps,
|
| 192 |
-
guidance_scale=
|
| 193 |
strength=strength,
|
| 194 |
denoising_end=denoising_end,
|
| 195 |
).images[0]
|
|
@@ -201,11 +202,11 @@ class WatermarkRemover:
|
|
| 201 |
return result_image
|
| 202 |
|
| 203 |
def _postprocess_result(self, original: Image.Image, result: Image.Image, mask: Image.Image) -> Image.Image:
|
| 204 |
-
"""
|
| 205 |
# 1. Создаем мягкую маску для смешивания
|
| 206 |
-
blend_mask = mask.filter(ImageFilter.GaussianBlur(radius=
|
| 207 |
|
| 208 |
-
# 2. Плавное смешивание с оригиналом
|
| 209 |
return Image.composite(result, original, blend_mask)
|
| 210 |
|
| 211 |
def _preprocess_image(self, image: Image.Image) -> Image.Image:
|
|
|
|
| 63 |
generated_text, task=task_prompt.value, image_size=image.size
|
| 64 |
)
|
| 65 |
|
| 66 |
+
def _get_mask_for_prompt(self, image: Image.Image, text_input: str, max_bbox_percent: float, expand_ratio: float = 0.27) -> Image.Image:
|
| 67 |
logger.info(f"Поиск по промпту: '{text_input}'...")
|
| 68 |
parsed_answer = self._identify(image, text_input)
|
| 69 |
mask = Image.new("L", image.size, 0)
|
|
|
|
| 165 |
# Адаптивные параметры на основе размера маски
|
| 166 |
if mask_area > 0.3: # Большая область (более 30%)
|
| 167 |
steps = 50
|
| 168 |
+
strength = 0.95 # Увеличено для полного удаления
|
| 169 |
+
denoising_end = 0.98 # Почти полная обработка
|
| 170 |
elif mask_area > 0.1: # Средняя область (10-30%)
|
| 171 |
steps = 40
|
| 172 |
+
strength = 0.92 # Увеличено
|
| 173 |
+
denoising_end = 0.95
|
| 174 |
else: # Маленькая область (менее 10%)
|
| 175 |
steps = 35
|
| 176 |
+
strength = 0.88 # Увеличено
|
| 177 |
+
denoising_end = 0.9
|
| 178 |
|
| 179 |
logger.info(f"Параметры генерации: area={mask_area:.2%}, steps={steps}, strength={strength}, denoising_end={denoising_end}")
|
| 180 |
|
| 181 |
+
# Генерация с минимальным "фантазированием"
|
| 182 |
result_image = self.inpainting_pipeline(
|
| 183 |
+
prompt="", # Пустой промпт
|
| 184 |
negative_prompt=(
|
| 185 |
"watermark, text, logo, signature, copyright, "
|
| 186 |
"blurry, distorted, artifact, deformed, noisy, "
|
| 187 |
+
"low quality, jpeg artifacts, drawing, painting, sketch, "
|
| 188 |
+
"overexposed, underexposed, oversaturated, surreal, abstract" # Дополнительные ограничения
|
| 189 |
),
|
| 190 |
image=image,
|
| 191 |
mask_image=mask,
|
| 192 |
num_inference_steps=steps,
|
| 193 |
+
guidance_scale=10.0, # Увеличено для строгого следования инструкциям
|
| 194 |
strength=strength,
|
| 195 |
denoising_end=denoising_end,
|
| 196 |
).images[0]
|
|
|
|
| 202 |
return result_image
|
| 203 |
|
| 204 |
def _postprocess_result(self, original: Image.Image, result: Image.Image, mask: Image.Image) -> Image.Image:
|
| 205 |
+
"""Консервативная постобработка с минимальными изменениями"""
|
| 206 |
# 1. Создаем мягкую маску для смешивания
|
| 207 |
+
blend_mask = mask.filter(ImageFilter.GaussianBlur(radius=30)) # Больше размытия для плавности
|
| 208 |
|
| 209 |
+
# 2. Плавное смешивание с оригиналом
|
| 210 |
return Image.composite(result, original, blend_mask)
|
| 211 |
|
| 212 |
def _preprocess_image(self, image: Image.Image) -> Image.Image:
|