Spaces:
Running
Running
from colorbynumber.config import default_config | |
from colorbynumber.main import ColorByNumber | |
from colorbynumber.numbered_islands import add_numbers_to_image | |
def _hex_to_rgb(hex_color): | |
hex_color = hex_color.lstrip("#") | |
return tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4)) | |
def get_color_by_number(image_path, number_of_colors, | |
is_automatic_colors, num_colors, | |
denoise_flag, denoise_order, denoise_type, | |
blur_size, denoise_h, | |
open_kernel_size, area_perc_threshold, | |
check_shape_validity, arc_length_area_ratio_threshold, | |
font_size, font_color, font_thickness, | |
*color_list): | |
# Convert each color to r,g,b tuple | |
color_list = color_list[:num_colors] | |
color_list = [_hex_to_rgb(h) for h in color_list] | |
# Update config | |
config = default_config.copy() | |
config["denoise"] = denoise_flag | |
config["denoise_order"] = denoise_order | |
config["denoise_type"] = denoise_type | |
config["blur_size"] = blur_size | |
config["denoise_h"] = denoise_h | |
config["open_kernel_size"] = open_kernel_size | |
config["area_perc_threshold"] = area_perc_threshold | |
config["check_shape_validity"] = check_shape_validity | |
config["arc_length_area_ratio_threshold"] = arc_length_area_ratio_threshold | |
config["font_size"] = font_size | |
config["font_color"] = _hex_to_rgb(font_color) | |
config["font_thickness"] = font_thickness | |
if is_automatic_colors: | |
colorbynumber_obj = ColorByNumber( | |
image_path = image_path, | |
num_colors = number_of_colors, | |
config = config, | |
) | |
else: | |
colorbynumber_obj = ColorByNumber( | |
image_path = image_path, | |
color_list = color_list, | |
config = config, | |
) | |
numbered_islands = colorbynumber_obj.create_color_by_number() | |
data = { | |
"centroid_coords_list": colorbynumber_obj.centroid_coords_list, | |
"color_id_list": [color_id for color_id, _ in colorbynumber_obj.island_borders_list] | |
} | |
return numbered_islands, \ | |
colorbynumber_obj.generate_color_legend(), \ | |
colorbynumber_obj.simplified_image, \ | |
colorbynumber_obj.islands_image, \ | |
data | |
def change_font_on_image(image, data, font_size, font_color, font_thickness): | |
if image is None: | |
return None | |
centroid_coords_list = data["centroid_coords_list"] | |
color_id_list = data["color_id_list"] | |
font_color = _hex_to_rgb(font_color) | |
return add_numbers_to_image( | |
image = image, | |
centroid_coords_list = centroid_coords_list, | |
color_id_list = color_id_list, | |
font_size = font_size, | |
font_color = font_color, | |
font_thickness = font_thickness | |
) | |