|
import cv2 |
|
import numpy as np |
|
import os |
|
import zipfile |
|
import uuid |
|
import gradio as gr |
|
|
|
|
|
|
|
def remove_watermark_area(original_image, text_mask_path): |
|
|
|
text_mask = cv2.imread(text_mask_path, cv2.IMREAD_GRAYSCALE) |
|
_, binary_mask = cv2.threshold(text_mask, 1, 255, cv2.THRESH_BINARY) |
|
|
|
|
|
mask_resized = cv2.resize(binary_mask, (original_image.shape[1], original_image.shape[0])) |
|
|
|
|
|
kernel = np.ones((5, 5), np.uint8) |
|
expanded_mask = cv2.dilate(mask_resized, kernel, iterations=1) |
|
|
|
|
|
inpainted_image = cv2.inpaint(original_image, expanded_mask, inpaintRadius=5, flags=cv2.INPAINT_TELEA) |
|
|
|
|
|
cleaned_image = cv2.GaussianBlur(inpainted_image, (3, 3), 0) |
|
|
|
return cleaned_image |
|
|
|
def remove_watermark(image_path,saved_path): |
|
|
|
image = cv2.imread(image_path) |
|
|
|
|
|
height, width, _ = image.shape |
|
watermark_width = 185 |
|
watermark_height = 185 |
|
x_start = 50 |
|
y_start = height - watermark_height+17 |
|
x_end = watermark_width-17 |
|
y_end = height-50 |
|
|
|
|
|
watermark_area = image[y_start:y_end, x_start:x_end] |
|
|
|
|
|
|
|
text_mask_path = 'watermark_mask.png' |
|
cleaned_image = remove_watermark_area(watermark_area, text_mask_path) |
|
|
|
|
|
image[y_start:y_end, x_start:x_end] = cleaned_image |
|
cv2.imwrite(saved_path, image) |
|
return image |
|
|
|
def make_zip(image_list): |
|
zip_path = f"./temp/{uuid.uuid4().hex[:6]}.zip" |
|
with zipfile.ZipFile(zip_path, 'w') as zipf: |
|
for image in image_list: |
|
zipf.write(image, os.path.basename(image)) |
|
return zip_path |
|
|
|
def process_files(image_files): |
|
image_list = [] |
|
if len(image_files) == 1: |
|
saved_path = os.path.basename(image_files[0]) |
|
saved_path = f"./temp/{saved_path}" |
|
remove_watermark(image_files[0], saved_path) |
|
return saved_path, saved_path |
|
else: |
|
for image_path in image_files: |
|
saved_path = os.path.basename(image_path) |
|
saved_path = f"./temp/{saved_path}" |
|
remove_watermark(image_path, saved_path) |
|
image_list.append(saved_path) |
|
zip_path = make_zip(image_list) |
|
return zip_path,None |
|
|
|
if not os.path.exists("./temp"): |
|
os.mkdir("./temp") |
|
|
|
demo = gr.Interface( |
|
process_files, |
|
[gr.File(type='filepath', file_count='multiple')], |
|
[gr.File(),gr.Image()], |
|
cache_examples=True |
|
) |
|
|
|
demo.launch(debug=True) |
|
|