Hotcobra's picture
Update app.py
fe44dd3 verified
Raw
History Blame Contribute Delete
2.94 kB
import gradio as gr
import numpy as np
from PIL import Image
from skimage import color as skcolor
# Import Zhang full model (download logic is inside zhang_colorizer.py)
from zhang_colorizer import zhang_colorize
# -----------------------------
# TEST MODE (subtle tint)
# -----------------------------
def test_mode_colorize(pil_img: Image.Image) -> Image.Image:
img = pil_img.convert("RGB")
arr = np.array(img).astype(np.float32) / 255.0
tint = np.array([1.02, 1.0, 0.98], dtype=np.float32)
arr = np.clip(arr * tint, 0.0, 1.0)
arr = (arr * 255).astype(np.uint8)
return Image.fromarray(arr)
# -----------------------------
# DEOLDIFY‑LITE (CPU SAFE)
# -----------------------------
def deoldify_lite_colorize(pil_img: Image.Image) -> Image.Image:
img = pil_img.convert("RGB")
arr = np.array(img).astype(np.float32) / 255.0
lab = skcolor.rgb2lab(arr)
L = lab[:, :, 0]
a = lab[:, :, 1]
b = lab[:, :, 2]
a *= 1.35
b *= 1.35
a += 2.0
b += 1.0
lab_out = np.stack([L, a, b], axis=-1)
rgb_out = skcolor.lab2rgb(lab_out)
rgb_out = np.clip(rgb_out, 0.0, 1.0)
rgb_out = (rgb_out * 255).astype(np.uint8)
return Image.fromarray(rgb_out)
# -----------------------------
# MAIN PIPELINE
# -----------------------------
def colorize_image(input_image, mode):
if input_image is None:
return None
pil_img = input_image.convert("RGB")
if mode == "Test Mode (Very Subtle)":
return test_mode_colorize(pil_img)
if mode == "DeOldify‑Lite (Art Mode)":
return deoldify_lite_colorize(pil_img)
if mode == "Zhang ECCV (Realistic Strong Color)":
return zhang_colorize(pil_img)
return test_mode_colorize(pil_img)
# -----------------------------
# GRADIO UI
# -----------------------------
with gr.Blocks(title="Biker Image Colorizer – CPU (3 Modes)") as demo:
gr.Markdown(
"""
# Biker Image Colorizer – CPU Edition
**Three modes:**
- Test Mode (very subtle)
- DeOldify‑Lite (artistic strong color)
- Zhang ECCV (realistic strong color)
"""
)
with gr.Row():
with gr.Column():
input_image = gr.Image(type="pil", label="Input Image")
mode = gr.Radio(
choices=[
"Test Mode (Very Subtle)",
"DeOldify‑Lite (Art Mode)",
"Zhang ECCV (Realistic Strong Color)",
],
value="Zhang ECCV (Realistic Strong Color)",
label="Colorization Mode",
)
run_btn = gr.Button("Colorize", variant="primary")
with gr.Column():
output_image = gr.Image(type="pil", label="Output Image")
run_btn.click(
fn=colorize_image,
inputs=[input_image, mode],
outputs=[output_image],
)
if __name__ == "__main__":
demo.launch()