imaginAIry/imaginairy/colorize.py

47 lines
1.3 KiB
Python

from PIL import Image
from imaginairy import ImaginePrompt, imagine
from imaginairy.enhancers.describe_image_blip import generate_caption
def colorize_img(img):
caption = generate_caption(img)
caption = caption.replace("black and white", "color")
prompt = ImaginePrompt(
prompt=caption,
init_image=img,
init_image_strength=0.01,
control_image=img,
control_mode="hed",
negative_prompt="black and white",
# width=img.width,
# height=img.height,
)
result = list(imagine(prompt))[0]
colorized_img = replace_color(img, result.images["generated"])
prompt = ImaginePrompt(
prompt=caption,
init_image=colorized_img,
init_image_strength=0.1,
control_image=img,
control_mode="hed",
negative_prompt="black and white",
width=min(img.width, 1024),
height=min(img.height, 1024),
steps=30
)
result = list(imagine(prompt))[0]
colorized_img = replace_color(img, result.images["generated"])
return colorized_img
def replace_color(target_img, color_src_img):
color_src_img = color_src_img.resize(target_img.size)
_, _, value = target_img.convert("HSV").split()
hue, saturation, _ = color_src_img.convert("HSV").split()
return Image.merge("HSV", (hue, saturation, value)).convert("RGB")