|
import os |
|
import cv2 |
|
import tempfile |
|
from modelscope.outputs import OutputKeys |
|
from modelscope.pipelines import pipeline |
|
from modelscope.utils.constant import Tasks |
|
from pathlib import Path |
|
import gradio as gr |
|
import numpy as np |
|
from PIL import Image, ImageEnhance, ImageFilter |
|
|
|
|
|
img_colorization = pipeline(Tasks.image_colorization, model='iic/cv_ddcolor_image-colorization') |
|
|
|
def colorize_image(img_path): |
|
image = cv2.imread(str(img_path)) |
|
output = img_colorization(image[..., ::-1]) |
|
result = output[OutputKeys.OUTPUT_IMG].astype(np.uint8) |
|
temp_dir = tempfile.mkdtemp() |
|
out_path = os.path.join(temp_dir, 'colorized.png') |
|
cv2.imwrite(out_path, result) |
|
return out_path |
|
|
|
def enhance_image(img_path, brightness=1.0, contrast=1.0, edge_enhance=False): |
|
image = Image.open(img_path) |
|
|
|
image = ImageEnhance.Brightness(image).enhance(brightness) |
|
|
|
image = ImageEnhance.Contrast(image).enhance(contrast) |
|
|
|
if edge_enhance: |
|
image = image.filter(ImageFilter.EDGE_ENHANCE) |
|
temp_dir = tempfile.mkdtemp() |
|
enhanced_path = os.path.join(temp_dir, 'enhanced.png') |
|
image.save(enhanced_path) |
|
return enhanced_path |
|
|
|
def process_image(img_path, brightness, contrast, edge_enhance, output_format): |
|
|
|
colorized_path = colorize_image(img_path) |
|
|
|
enhanced_path = enhance_image(colorized_path, brightness, contrast, edge_enhance) |
|
|
|
img = Image.open(enhanced_path) |
|
temp_dir = tempfile.mkdtemp() |
|
filename = f'colorized_image.{output_format.lower()}' |
|
output_path = os.path.join(temp_dir, filename) |
|
img.save(output_path, format=output_format.upper()) |
|
|
|
return ([img_path, enhanced_path], output_path) |
|
|
|
title = "🌈 Color Restorization Model" |
|
description = "Upload a black & white photo to restore it in color using a deep learning model." |
|
|
|
with gr.Blocks(title=title) as demo: |
|
gr.Markdown(f"## {title}") |
|
gr.Markdown(description) |
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
input_image = gr.Image(type="filepath", label="Upload B&W Image", tool="editor") |
|
brightness_slider = gr.Slider(0.5, 2.0, value=1.0, label="Brightness") |
|
contrast_slider = gr.Slider(0.5, 2.0, value=1.0, label="Contrast") |
|
edge_enhance_checkbox = gr.Checkbox(label="Apply Edge Enhancement") |
|
output_format_dropdown = gr.Dropdown( |
|
choices=["PNG", "JPEG", "TIFF"], |
|
value="PNG", |
|
label="Output Format" |
|
) |
|
submit_btn = gr.Button("Colorize") |
|
with gr.Column(): |
|
comparison_gallery = gr.Gallery( |
|
label="Original vs Colorized", |
|
columns=2, |
|
height="auto" |
|
) |
|
download_btn = gr.File(label="Download Colorized Image") |
|
|
|
submit_btn.click( |
|
fn=process_image, |
|
inputs=[input_image, brightness_slider, contrast_slider, edge_enhance_checkbox, output_format_dropdown], |
|
outputs=[comparison_gallery, download_btn] |
|
) |
|
|
|
demo.launch(enable_queue=True) |
|
|