LuisAVasquez
commited on
Commit
•
4859d06
1
Parent(s):
3af9a0f
adding basic image processing tools
Browse files
imageprocessing/clip_object_recognition.py
ADDED
@@ -0,0 +1,167 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
###
|
2 |
+
# take a file containing image filepaths and return a file also containing detected objects
|
3 |
+
#
|
4 |
+
|
5 |
+
# the input csv file must contain an 'image_file' column containing all the image filepaths
|
6 |
+
# #
|
7 |
+
|
8 |
+
|
9 |
+
import os
|
10 |
+
import clip
|
11 |
+
import torch
|
12 |
+
|
13 |
+
import pandas as pd
|
14 |
+
from PIL import Image
|
15 |
+
from torchvision.datasets import CIFAR100
|
16 |
+
from tqdm import tqdm
|
17 |
+
|
18 |
+
# this dataset gives us the object classes
|
19 |
+
cifar100 = CIFAR100(root=os.path.expanduser("~/.cache"), download=True, train=False)
|
20 |
+
|
21 |
+
def save_checkpoint(checkpoint_path,df, object_list):
|
22 |
+
output_df = df.copy()
|
23 |
+
output_df['clip_recognized_objects'] = object_list
|
24 |
+
output_df.to_csv(checkpoint_path,
|
25 |
+
index= False, # don't write a new 'Index' column
|
26 |
+
)
|
27 |
+
print("Saved checkpoint!")
|
28 |
+
|
29 |
+
def load_checkpoint(checkpoint_path):
|
30 |
+
try:
|
31 |
+
print("reading checkpoint at ", checkpoint_path)
|
32 |
+
df = pd.read_csv(checkpoint_path)
|
33 |
+
|
34 |
+
cached_objects = {
|
35 |
+
row['image_file']: row['clip_recognized_objects']
|
36 |
+
for _, row in df.iterrows()
|
37 |
+
}
|
38 |
+
print(f"Checkpoint loaded succesfully to cache: {len(cached_objects)} processed files")
|
39 |
+
return cached_objects
|
40 |
+
except:
|
41 |
+
print("Checkpoint was not loaded")
|
42 |
+
return cached_objects_dict
|
43 |
+
|
44 |
+
def get_checkpoint_path(output_path):
|
45 |
+
#checkpoint_path = "checkpoint" + os.path.basename(output_path)
|
46 |
+
#checkpoint_path = os.path.join( os.path.dirname(output_path), checkpoint_path)
|
47 |
+
#return checkpoint_path
|
48 |
+
return output_path
|
49 |
+
|
50 |
+
|
51 |
+
|
52 |
+
cached_objects_dict = {} # to avoid recomputing
|
53 |
+
|
54 |
+
def get_objects(filepath, model, preprocess, device, cached_objects_dict):
|
55 |
+
objects = cached_objects_dict.get(filepath)
|
56 |
+
if objects is None:
|
57 |
+
objects = get_objects_in_image(filepath, model, preprocess, device)
|
58 |
+
cached_objects_dict[filepath] = objects
|
59 |
+
return objects
|
60 |
+
|
61 |
+
def get_objects_in_image(image_filepath, model, preprocess, device):
|
62 |
+
|
63 |
+
|
64 |
+
# Prepare the inputs
|
65 |
+
image = Image.open(image_filepath).resize((600,600))
|
66 |
+
image_input = preprocess(image).unsqueeze(0).to(device)
|
67 |
+
text_inputs = torch.cat([clip.tokenize(f"a photo of a {c}") for c in cifar100.classes]).to(device)
|
68 |
+
|
69 |
+
# Calculate features
|
70 |
+
with torch.no_grad():
|
71 |
+
image_features = model.encode_image(image_input)
|
72 |
+
text_features = model.encode_text(text_inputs)
|
73 |
+
|
74 |
+
# Pick the top 5 most similar labels for the image
|
75 |
+
image_features /= image_features.norm(dim=-1, keepdim=True)
|
76 |
+
text_features /= text_features.norm(dim=-1, keepdim=True)
|
77 |
+
similarity = (100.0 * image_features @ text_features.T).softmax(dim=-1)
|
78 |
+
values, indices = similarity[0].topk(5)
|
79 |
+
|
80 |
+
|
81 |
+
# Append the the result
|
82 |
+
#print("\nTop predictions:\n")
|
83 |
+
objects = []
|
84 |
+
for value, index in zip(values, indices):
|
85 |
+
objects.append((cifar100.classes[index], value.item()))
|
86 |
+
# print(f"{cifar100.classes[index]:>16s}: {100 * value.item():.2f}%")
|
87 |
+
return objects
|
88 |
+
|
89 |
+
|
90 |
+
|
91 |
+
def clip_object_detection(input_csv, output_csv):
|
92 |
+
|
93 |
+
checkpoint_path = get_checkpoint_path(output_csv)
|
94 |
+
cached_objects_dict = load_checkpoint(checkpoint_path)
|
95 |
+
|
96 |
+
|
97 |
+
# Load the model
|
98 |
+
device = "cuda" if torch.cuda.is_available() else "cpu"
|
99 |
+
model, preprocess = clip.load('ViT-B/32', device)
|
100 |
+
text_inputs = torch.cat([clip.tokenize(f"a photo of a {c}") for c in cifar100.classes]).to(device)
|
101 |
+
|
102 |
+
recognized_objects_per_image = []
|
103 |
+
processed_files = set(cached_objects_dict.keys())
|
104 |
+
|
105 |
+
df = pd.read_csv(input_csv)
|
106 |
+
|
107 |
+
iterable_list = list(enumerate( df['image_file']))
|
108 |
+
for elem in tqdm(iterable_list):
|
109 |
+
idx = elem[0]
|
110 |
+
filepath = elem[1]
|
111 |
+
|
112 |
+
#save checkpoint every 50 files
|
113 |
+
if (not (len(processed_files) % 49)
|
114 |
+
):
|
115 |
+
print(f"Images processed: {len(processed_files)}")
|
116 |
+
save_checkpoint(checkpoint_path, df.iloc[:idx], recognized_objects_per_image)
|
117 |
+
|
118 |
+
objects = get_objects(
|
119 |
+
filepath, model, preprocess, device,
|
120 |
+
cached_objects_dict
|
121 |
+
)
|
122 |
+
recognized_objects_per_image.append(objects)
|
123 |
+
processed_files.add(filepath)
|
124 |
+
|
125 |
+
recognized_objects_per_image = pd.Series(recognized_objects_per_image)
|
126 |
+
|
127 |
+
return recognized_objects_per_image
|
128 |
+
|
129 |
+
|
130 |
+
|
131 |
+
|
132 |
+
import argparse
|
133 |
+
|
134 |
+
|
135 |
+
if __name__ == "__main__":
|
136 |
+
|
137 |
+
parser = argparse.ArgumentParser(prog="CLIP object recognition",
|
138 |
+
description='Recognizes the top 5 main objects per image in an image list')
|
139 |
+
|
140 |
+
parser.add_argument("--input_csv", "-in", metavar='in', type=str, nargs=1,
|
141 |
+
help='input file containing images-paths for object recognition.',
|
142 |
+
#default=[default_painting_folder]
|
143 |
+
)
|
144 |
+
parser.add_argument("--output_csv", "-out", metavar='out', type=str, nargs=1,
|
145 |
+
help='output file containing images-paths + recognized objects'
|
146 |
+
#default=[default_interpretation_folder]
|
147 |
+
)
|
148 |
+
args = parser.parse_args()
|
149 |
+
input_csv_file = args.input_csv[0]
|
150 |
+
output_csv_file = args.output_csv[0]
|
151 |
+
|
152 |
+
print(">>> input file: " , input_csv_file)
|
153 |
+
print(">>> output file: ", output_csv_file)
|
154 |
+
|
155 |
+
|
156 |
+
# perform object recognition
|
157 |
+
recognized_objects_per_image = clip_object_detection(input_csv_file, output_csv_file)
|
158 |
+
|
159 |
+
# add a column with the recognized objects
|
160 |
+
output_df = pd.read_csv(input_csv_file)
|
161 |
+
output_df['clip_recognized_objects'] = recognized_objects_per_image
|
162 |
+
output_df.to_csv(output_csv_file,
|
163 |
+
index= False, # don't write a new 'Index' column
|
164 |
+
)
|
165 |
+
|
166 |
+
|
167 |
+
|
imageprocessing/color_detection.py
ADDED
@@ -0,0 +1,1897 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Copyright (c) 2022. Bart Lamiroy (Bart.Lamiroy@univ-reims.fr) and subsequent contributors
|
2 |
+
# as per git commit history. All rights reserved.
|
3 |
+
#
|
4 |
+
# La Muse, Leveraging Artificial Intelligence for Sparking Inspiration
|
5 |
+
# https://hal.archives-ouvertes.fr/hal-03470467/
|
6 |
+
#
|
7 |
+
# This code is licenced under the GNU LESSER GENERAL PUBLIC LICENSE
|
8 |
+
# Version 3, 29 June 2007
|
9 |
+
|
10 |
+
# This code is an adaptation in Python on original JavaScript code by Chirag Mehta - http://chir.ag/projects/ntc |
|
11 |
+
# The original script is released under the: Creative Commons License: Attribution 2.5 http://creativecommons.org/licenses/by/2.5/
|
12 |
+
import math
|
13 |
+
|
14 |
+
# var n_match = ntc.name("#6195ED");
|
15 |
+
# n_rgb = n_match[0]; // This is the RGB value of the closest matching color
|
16 |
+
# n_name = n_match[1]; // This is the text string for the name of the match
|
17 |
+
# n_exactmatch = n_match[2]; // True if exact color match, False if close-match
|
18 |
+
#
|
19 |
+
# alert(n_match);
|
20 |
+
|
21 |
+
static_names_old = [
|
22 |
+
["000000", "Black"],
|
23 |
+
["000080", "Navy Blue"],
|
24 |
+
["0000C8", "Dark Blue"],
|
25 |
+
["0000FF", "Blue"],
|
26 |
+
["000741", "Stratos"],
|
27 |
+
["001B1C", "Swamp"],
|
28 |
+
["002387", "Resolution Blue"],
|
29 |
+
["002900", "Deep Fir"],
|
30 |
+
["002E20", "Burnham"],
|
31 |
+
["002FA7", "International Klein Blue"],
|
32 |
+
["003153", "Prussian Blue"],
|
33 |
+
["003366", "Midnight Blue"],
|
34 |
+
["003399", "Smalt"],
|
35 |
+
["003532", "Deep Teal"],
|
36 |
+
["003E40", "Cyprus"],
|
37 |
+
["004620", "Kaitoke Green"],
|
38 |
+
["0047AB", "Cobalt"],
|
39 |
+
["004816", "Crusoe"],
|
40 |
+
["004950", "Sherpa Blue"],
|
41 |
+
#["0056A7", "Endeavour"],
|
42 |
+
["00581A", "Camarone"],
|
43 |
+
["0066CC", "Science Blue"],
|
44 |
+
["0066FF", "Blue Ribbon"],
|
45 |
+
["00755E", "Tropical Rain Forest"],
|
46 |
+
#["0076A3", "Allports"],
|
47 |
+
["007BA7", "Deep Cerulean"],
|
48 |
+
["007EC7", "Lochmara"],
|
49 |
+
["007FFF", "Azure Radiance"],
|
50 |
+
["008080", "Teal"],
|
51 |
+
["0095B6", "Bondi Blue"],
|
52 |
+
["009DC4", "Pacific Blue"],
|
53 |
+
["00A693", "Persian Green"],
|
54 |
+
["00A86B", "Jade"],
|
55 |
+
["00CC99", "Caribbean Green"],
|
56 |
+
["00CCCC", "Robin's Egg Blue"],
|
57 |
+
["00FF00", "Green"],
|
58 |
+
["00FF7F", "Spring Green"],
|
59 |
+
["00FFFF", "Cyan / Aqua"],
|
60 |
+
["010D1A", "Blue Charcoal"],
|
61 |
+
["011635", "Midnight"],
|
62 |
+
["011D13", "Holly"],
|
63 |
+
["012731", "Daintree"],
|
64 |
+
["01361C", "Cardin Green"],
|
65 |
+
["01371A", "County Green"],
|
66 |
+
["013E62", "Astronaut Blue"],
|
67 |
+
["013F6A", "Regal Blue"],
|
68 |
+
["014B43", "Aqua Deep"],
|
69 |
+
["015E85", "Orient"],
|
70 |
+
["016162", "Blue Stone"],
|
71 |
+
["016D39", "Fun Green"],
|
72 |
+
["01796F", "Pine Green"],
|
73 |
+
["017987", "Blue Lagoon"],
|
74 |
+
["01826B", "Deep Sea"],
|
75 |
+
["01A368", "Green Haze"],
|
76 |
+
["022D15", "English Holly"],
|
77 |
+
["02402C", "Sherwood Green"],
|
78 |
+
["02478E", "Congress Blue"],
|
79 |
+
["024E46", "Evening Sea"],
|
80 |
+
["026395", "Bahama Blue"],
|
81 |
+
#["02866F", "Observatory"],
|
82 |
+
["02A4D3", "Cerulean"],
|
83 |
+
["03163C", "Tangaroa"],
|
84 |
+
["032B52", "Green Vogue"],
|
85 |
+
#["036A6E", "Mosque"],
|
86 |
+
["041004", "Midnight Moss"],
|
87 |
+
["041322", "Black Pearl"],
|
88 |
+
["042E4C", "Blue Whale"],
|
89 |
+
["044022", "Zuccini"],
|
90 |
+
["044259", "Teal Blue"],
|
91 |
+
["051040", "Deep Cove"],
|
92 |
+
["051657", "Gulf Blue"],
|
93 |
+
["055989", "Venice Blue"],
|
94 |
+
["056F57", "Watercourse"],
|
95 |
+
["062A78", "Catalina Blue"],
|
96 |
+
["063537", "Tiber"],
|
97 |
+
["069B81", "Gossamer"],
|
98 |
+
["06A189", "Niagara"],
|
99 |
+
["073A50", "Tarawera"],
|
100 |
+
["080110", "Jaguar"],
|
101 |
+
["081910", "Black Bean"],
|
102 |
+
["082567", "Deep Sapphire"],
|
103 |
+
["088370", "Elf Green"],
|
104 |
+
["08E8DE", "Bright Turquoise"],
|
105 |
+
["092256", "Downriver"],
|
106 |
+
["09230F", "Palm Green"],
|
107 |
+
#["09255D", "Madison"],
|
108 |
+
["093624", "Bottle Green"],
|
109 |
+
["095859", "Deep Sea Green"],
|
110 |
+
#["097F4B", "Salem"],
|
111 |
+
["0A001C", "Black Russian"],
|
112 |
+
["0A480D", "Dark Fern"],
|
113 |
+
["0A6906", "Japanese Laurel"],
|
114 |
+
["0A6F75", "Atoll"],
|
115 |
+
["0B0B0B", "Cod Gray"],
|
116 |
+
["0B0F08", "Marshland"],
|
117 |
+
["0B1107", "Gordons Green"],
|
118 |
+
["0B1304", "Black Forest"],
|
119 |
+
#["0B6207", "San Felix"],
|
120 |
+
["0BDA51", "Malachite"],
|
121 |
+
["0C0B1D", "Ebony"],
|
122 |
+
["0C0D0F", "Woodsmoke"],
|
123 |
+
["0C1911", "Racing Green"],
|
124 |
+
["0C7A79", "Surfie Green"],
|
125 |
+
["0C8990", "Blue Chill"],
|
126 |
+
["0D0332", "Black Rock"],
|
127 |
+
["0D1117", "Bunker"],
|
128 |
+
["0D1C19", "Aztec"],
|
129 |
+
["0D2E1C", "Bush"],
|
130 |
+
["0E0E18", "Cinder"],
|
131 |
+
["0E2A30", "Firefly"],
|
132 |
+
["0F2D9E", "Torea Bay"],
|
133 |
+
["10121D", "Vulcan"],
|
134 |
+
["101405", "Green Waterloo"],
|
135 |
+
["105852", "Eden"],
|
136 |
+
["110C6C", "Arapawa"],
|
137 |
+
["120A8F", "Ultramarine"],
|
138 |
+
["123447", "Elephant"],
|
139 |
+
["126B40", "Jewel"],
|
140 |
+
["130000", "Diesel"],
|
141 |
+
["130A06", "Asphalt"],
|
142 |
+
["13264D", "Blue Zodiac"],
|
143 |
+
["134F19", "Parsley"],
|
144 |
+
["140600", "Nero"],
|
145 |
+
["1450AA", "Tory Blue"],
|
146 |
+
#["151F4C", "Bunting"],
|
147 |
+
["1560BD", "Denim"],
|
148 |
+
#["15736B", "Genoa"],
|
149 |
+
["161928", "Mirage"],
|
150 |
+
["161D10", "Hunter Green"],
|
151 |
+
["162A40", "Big Stone"],
|
152 |
+
["163222", "Celtic"],
|
153 |
+
["16322C", "Timber Green"],
|
154 |
+
["163531", "Gable Green"],
|
155 |
+
["171F04", "Pine Tree"],
|
156 |
+
["175579", "Chathams Blue"],
|
157 |
+
["182D09", "Deep Forest Green"],
|
158 |
+
["18587A", "Blumine"],
|
159 |
+
["19330E", "Palm Leaf"],
|
160 |
+
["193751", "Nile Blue"],
|
161 |
+
["1959A8", "Fun Blue"],
|
162 |
+
["1A1A68", "Lucky Point"],
|
163 |
+
["1AB385", "Mountain Meadow"],
|
164 |
+
["1B0245", "Tolopea"],
|
165 |
+
#["1B1035", "Haiti"],
|
166 |
+
["1B127B", "Deep Koamaru"],
|
167 |
+
["1B1404", "Acadia"],
|
168 |
+
["1B2F11", "Seaweed"],
|
169 |
+
["1B3162", "Biscay"],
|
170 |
+
#["1B659D", "Matisse"],
|
171 |
+
["1C1208", "Crowshead"],
|
172 |
+
["1C1E13", "Rangoon Green"],
|
173 |
+
["1C39BB", "Persian Blue"],
|
174 |
+
["1C402E", "Everglade"],
|
175 |
+
["1C7C7D", "Elm"],
|
176 |
+
["1D6142", "Green Pea"],
|
177 |
+
#["1E0F04", "Creole"],
|
178 |
+
["1E1609", "Karaka"],
|
179 |
+
#["1E1708", "El Paso"],
|
180 |
+
["1E385B", "Cello"],
|
181 |
+
["1E433C", "Te Papa Green"],
|
182 |
+
["1E90FF", "Dodger Blue"],
|
183 |
+
["1E9AB0", "Eastern Blue"],
|
184 |
+
["1F120F", "Night Rider"],
|
185 |
+
["1FC2C2", "Java"],
|
186 |
+
["20208D", "Jacksons Purple"],
|
187 |
+
["202E54", "Cloud Burst"],
|
188 |
+
["204852", "Blue Dianne"],
|
189 |
+
["211A0E", "Eternity"],
|
190 |
+
["220878", "Deep Blue"],
|
191 |
+
["228B22", "Forest Green"],
|
192 |
+
["233418", "Mallard"],
|
193 |
+
["240A40", "Violet"],
|
194 |
+
#["240C02", "Kilamanjaro"],
|
195 |
+
["242A1D", "Log Cabin"],
|
196 |
+
["242E16", "Black Olive"],
|
197 |
+
["24500F", "Green House"],
|
198 |
+
["251607", "Graphite"],
|
199 |
+
["251706", "Cannon Black"],
|
200 |
+
#["251F4F", "Port Gore"],
|
201 |
+
["25272C", "Shark"],
|
202 |
+
["25311C", "Green Kelp"],
|
203 |
+
["2596D1", "Curious Blue"],
|
204 |
+
["260368", "Paua"],
|
205 |
+
#["26056A", "Paris M"],
|
206 |
+
["261105", "Wood Bark"],
|
207 |
+
#["261414", "Gondola"],
|
208 |
+
["262335", "Steel Gray"],
|
209 |
+
["26283B", "Ebony Clay"],
|
210 |
+
#["273A81", "Bay of Many"],
|
211 |
+
#["27504B", "Plantation"],
|
212 |
+
["278A5B", "Eucalyptus"],
|
213 |
+
["281E15", "Oil"],
|
214 |
+
["283A77", "Astronaut"],
|
215 |
+
["286ACD", "Mariner"],
|
216 |
+
["290C5E", "Violent Violet"],
|
217 |
+
#["292130", "Bastille"],
|
218 |
+
#["292319", "Zeus"],
|
219 |
+
["292937", "Charade"],
|
220 |
+
["297B9A", "Jelly Bean"],
|
221 |
+
["29AB87", "Jungle Green"],
|
222 |
+
["2A0359", "Cherry Pie"],
|
223 |
+
["2A140E", "Coffee Bean"],
|
224 |
+
["2A2630", "Baltic Sea"],
|
225 |
+
["2A380B", "Turtle Green"],
|
226 |
+
["2A52BE", "Cerulean Blue"],
|
227 |
+
["2B0202", "Sepia Black"],
|
228 |
+
["2B194F", "Valhalla"],
|
229 |
+
["2B3228", "Heavy Metal"],
|
230 |
+
["2C0E8C", "Blue Gem"],
|
231 |
+
["2C1632", "Revolver"],
|
232 |
+
["2C2133", "Bleached Cedar"],
|
233 |
+
["2C8C84", "Lochinvar"],
|
234 |
+
["2D2510", "Mikado"],
|
235 |
+
["2D383A", "Outer Space"],
|
236 |
+
["2D569B", "St Tropaz"],
|
237 |
+
["2E0329", "Jacaranda"],
|
238 |
+
["2E1905", "Jacko Bean"],
|
239 |
+
["2E3222", "Rangitoto"],
|
240 |
+
["2E3F62", "Rhino"],
|
241 |
+
["2E8B57", "Sea Green"],
|
242 |
+
#["2EBFD4", "Scooter"],
|
243 |
+
["2F270E", "Onion"],
|
244 |
+
#["2F3CB3", "Governor Bay"],
|
245 |
+
["2F519E", "Sapphire"],
|
246 |
+
["2F5A57", "Spectra"],
|
247 |
+
["2F6168", "Casal"],
|
248 |
+
["300529", "Melanzane"],
|
249 |
+
["301F1E", "Cocoa Brown"],
|
250 |
+
["302A0F", "Woodrush"],
|
251 |
+
#["304B6A", "San Juan"],
|
252 |
+
["30D5C8", "Turquoise"],
|
253 |
+
["311C17", "Eclipse"],
|
254 |
+
["314459", "Pickled Bluewood"],
|
255 |
+
["315BA1", "Azure"],
|
256 |
+
["31728D", "Calypso"],
|
257 |
+
["317D82", "Paradiso"],
|
258 |
+
["32127A", "Persian Indigo"],
|
259 |
+
["32293A", "Blackcurrant"],
|
260 |
+
["323232", "Mine Shaft"],
|
261 |
+
#["325D52", "Stromboli"],
|
262 |
+
["327C14", "Bilbao"],
|
263 |
+
["327DA0", "Astral"],
|
264 |
+
["33036B", "Christalle"],
|
265 |
+
["33292F", "Thunder"],
|
266 |
+
["33CC99", "Shamrock"],
|
267 |
+
["341515", "Tamarind"],
|
268 |
+
#["350036", "Mardi Gras"],
|
269 |
+
["350E42", "Valentino"],
|
270 |
+
["350E57", "Jagger"],
|
271 |
+
["353542", "Tuna"],
|
272 |
+
["354E8C", "Chambray"],
|
273 |
+
#["363050", "Martinique"],
|
274 |
+
#["363534", "Tuatara"],
|
275 |
+
#["363C0D", "Waiouru"],
|
276 |
+
#["36747D", "Ming"],
|
277 |
+
["368716", "La Palma"],
|
278 |
+
["370202", "Chocolate"],
|
279 |
+
#["371D09", "Clinker"],
|
280 |
+
["37290E", "Brown Tumbleweed"],
|
281 |
+
["373021", "Birch"],
|
282 |
+
["377475", "Oracle"],
|
283 |
+
["380474", "Blue Diamond"],
|
284 |
+
["381A51", "Grape"],
|
285 |
+
["383533", "Dune"],
|
286 |
+
["384555", "Oxford Blue"],
|
287 |
+
["384910", "Clover"],
|
288 |
+
["394851", "Limed Spruce"],
|
289 |
+
#["396413", "Dell"],
|
290 |
+
#["3A0020", "Toledo"],
|
291 |
+
["3A2010", "Sambuca"],
|
292 |
+
["3A2A6A", "Jacarta"],
|
293 |
+
#["3A686C", "William"],
|
294 |
+
#["3A6A47", "Killarney"],
|
295 |
+
#["3AB09E", "Keppel"],
|
296 |
+
#["3B000B", "Temptress"],
|
297 |
+
["3B0910", "Aubergine"],
|
298 |
+
#["3B1F1F", "Jon"],
|
299 |
+
["3B2820", "Treehouse"],
|
300 |
+
["3B7A57", "Amazon"],
|
301 |
+
["3B91B4", "Boston Blue"],
|
302 |
+
["3C0878", "Windsor"],
|
303 |
+
["3C1206", "Rebel"],
|
304 |
+
["3C1F76", "Meteorite"],
|
305 |
+
["3C2005", "Dark Ebony"],
|
306 |
+
["3C3910", "Camouflage"],
|
307 |
+
["3C4151", "Bright Gray"],
|
308 |
+
["3C4443", "Cape Cod"],
|
309 |
+
["3C493A", "Lunar Green"],
|
310 |
+
["3D0C02", "Bean "],
|
311 |
+
["3D2B1F", "Bistre"],
|
312 |
+
["3D7D52", "Goblin"],
|
313 |
+
["3E0480", "Kingfisher Daisy"],
|
314 |
+
["3E1C14", "Cedar"],
|
315 |
+
["3E2B23", "English Walnut"],
|
316 |
+
["3E2C1C", "Black Marlin"],
|
317 |
+
["3E3A44", "Ship Gray"],
|
318 |
+
["3EABBF", "Pelorous"],
|
319 |
+
["3F2109", "Bronze"],
|
320 |
+
["3F2500", "Cola"],
|
321 |
+
["3F3002", "Madras"],
|
322 |
+
["3F307F", "Minsk"],
|
323 |
+
["3F4C3A", "Cabbage Pont"],
|
324 |
+
#["3F583B", "Tom Thumb"],
|
325 |
+
["3F5D53", "Mineral Green"],
|
326 |
+
#["3FC1AA", "Puerto Rico"],
|
327 |
+
["3FFF00", "Harlequin"],
|
328 |
+
["401801", "Brown Pod"],
|
329 |
+
["40291D", "Cork"],
|
330 |
+
["403B38", "Masala"],
|
331 |
+
["403D19", "Thatch Green"],
|
332 |
+
["405169", "Fiord"],
|
333 |
+
["40826D", "Viridian"],
|
334 |
+
["40A860", "Chateau Green"],
|
335 |
+
["410056", "Ripe Plum"],
|
336 |
+
["411F10", "Paco"],
|
337 |
+
["412010", "Deep Oak"],
|
338 |
+
["413C37", "Merlin"],
|
339 |
+
["414257", "Gun Powder"],
|
340 |
+
["414C7D", "East Bay"],
|
341 |
+
["4169E1", "Royal Blue"],
|
342 |
+
["41AA78", "Ocean Green"],
|
343 |
+
["420303", "Burnt Maroon"],
|
344 |
+
["423921", "Lisbon Brown"],
|
345 |
+
["427977", "Faded Jade"],
|
346 |
+
["431560", "Scarlet Gum"],
|
347 |
+
#["433120", "Iroko"],
|
348 |
+
["433E37", "Armadillo"],
|
349 |
+
["434C59", "River Bed"],
|
350 |
+
["436A0D", "Green Leaf"],
|
351 |
+
["44012D", "Barossa"],
|
352 |
+
["441D00", "Morocco Brown"],
|
353 |
+
#["444954", "Mako"],
|
354 |
+
["454936", "Kelp"],
|
355 |
+
#["456CAC", "San Marino"],
|
356 |
+
["45B1E8", "Picton Blue"],
|
357 |
+
#["460B41", "Loulou"],
|
358 |
+
["462425", "Crater Brown"],
|
359 |
+
["465945", "Gray Asparagus"],
|
360 |
+
["4682B4", "Steel Blue"],
|
361 |
+
["480404", "Rustic Red"],
|
362 |
+
["480607", "Bulgarian Rose"],
|
363 |
+
#["480656", "Clairvoyant"],
|
364 |
+
["481C1C", "Cocoa Bean"],
|
365 |
+
["483131", "Woody Brown"],
|
366 |
+
["483C32", "Taupe"],
|
367 |
+
#["49170C", "Van Cleef"],
|
368 |
+
["492615", "Brown Derby"],
|
369 |
+
["49371B", "Metallic Bronze"],
|
370 |
+
["495400", "Verdun Green"],
|
371 |
+
["496679", "Blue Bayoux"],
|
372 |
+
["497183", "Bismark"],
|
373 |
+
["4A2A04", "Bracken"],
|
374 |
+
["4A3004", "Deep Bronze"],
|
375 |
+
["4A3C30", "Mondo"],
|
376 |
+
["4A4244", "Tundora"],
|
377 |
+
["4A444B", "Gravel"],
|
378 |
+
["4A4E5A", "Trout"],
|
379 |
+
["4B0082", "Pigment Indigo"],
|
380 |
+
["4B5D52", "Nandor"],
|
381 |
+
["4C3024", "Saddle"],
|
382 |
+
["4C4F56", "Abbey"],
|
383 |
+
["4D0135", "Blackberry"],
|
384 |
+
["4D0A18", "Cab Sav"],
|
385 |
+
#["4D1E01", "Indian Tan"],
|
386 |
+
["4D282D", "Cowboy"],
|
387 |
+
["4D282E", "Livid Brown"],
|
388 |
+
#["4D3833", "Rock"],
|
389 |
+
#["4D3D14", "Punga"],
|
390 |
+
["4D400F", "Bronzetone"],
|
391 |
+
["4D5328", "Woodland"],
|
392 |
+
["4E0606", "Mahogany"],
|
393 |
+
["4E2A5A", "Bossanova"],
|
394 |
+
["4E3B41", "Matterhorn"],
|
395 |
+
["4E420C", "Bronze Olive"],
|
396 |
+
["4E4562", "Mulled Wine"],
|
397 |
+
#["4E6649", "Axolotl"],
|
398 |
+
["4E7F9E", "Wedgewood"],
|
399 |
+
#["4EABD1", "Shakespeare"],
|
400 |
+
["4F1C70", "Honey Flower"],
|
401 |
+
["4F2398", "Daisy Bush"],
|
402 |
+
["4F69C6", "Indigo"],
|
403 |
+
["4F7942", "Fern Green"],
|
404 |
+
["4F9D5D", "Fruit Salad"],
|
405 |
+
["4FA83D", "Apple"],
|
406 |
+
["504351", "Mortar"],
|
407 |
+
["507096", "Kashmir Blue"],
|
408 |
+
#["507672", "Cutty Sark"],
|
409 |
+
["50C878", "Emerald"],
|
410 |
+
["514649", "Emperor"],
|
411 |
+
["516E3D", "Chalet Green"],
|
412 |
+
#["517C66", "Como"],
|
413 |
+
["51808F", "Smalt Blue"],
|
414 |
+
#["52001F", "Castro"],
|
415 |
+
["520C17", "Maroon Oak"],
|
416 |
+
#["523C94", "Gigas"],
|
417 |
+
["533455", "Voodoo"],
|
418 |
+
["534491", "Victoria"],
|
419 |
+
["53824B", "Hippie Green"],
|
420 |
+
["541012", "Heath"],
|
421 |
+
["544333", "Judge Gray"],
|
422 |
+
["54534D", "Fuscous Gray"],
|
423 |
+
#["549019", "Vida Loca"],
|
424 |
+
["55280C", "Cioccolato"],
|
425 |
+
["555B10", "Saratoga"],
|
426 |
+
#["556D56", "Finlandia"],
|
427 |
+
["5590D9", "Havelock Blue"],
|
428 |
+
["56B4BE", "Fountain Blue"],
|
429 |
+
["578363", "Spring Leaves"],
|
430 |
+
["583401", "Saddle Brown"],
|
431 |
+
["585562", "Scarpa Flow"],
|
432 |
+
["587156", "Cactus"],
|
433 |
+
["589AAF", "Hippie Blue"],
|
434 |
+
["591D35", "Wine Berry"],
|
435 |
+
["592804", "Brown Bramble"],
|
436 |
+
["593737", "Congo Brown"],
|
437 |
+
#["594433", "Millbrook"],
|
438 |
+
["5A6E9C", "Waikawa Gray"],
|
439 |
+
["5A87A0", "Horizon"],
|
440 |
+
#["5B3013", "Jambalaya"],
|
441 |
+
["5C0120", "Bordeaux"],
|
442 |
+
["5C0536", "Mulberry Wood"],
|
443 |
+
["5C2E01", "Carnaby Tan"],
|
444 |
+
["5C5D75", "Comet"],
|
445 |
+
["5D1E0F", "Redwood"],
|
446 |
+
#["5D4C51", "Don Juan"],
|
447 |
+
#["5D5C58", "Chicago"],
|
448 |
+
["5D5E37", "Verdigris"],
|
449 |
+
#["5D7747", "Dingley"],
|
450 |
+
["5DA19F", "Breaker Bay"],
|
451 |
+
#["5E483E", "Kabul"],
|
452 |
+
#["5E5D3B", "Hemlock"],
|
453 |
+
["5F3D26", "Irish Coffee"],
|
454 |
+
["5F5F6E", "Mid Gray"],
|
455 |
+
["5F6672", "Shuttle Gray"],
|
456 |
+
["5FA777", "Aqua Forest"],
|
457 |
+
#["5FB3AC", "Tradewind"],
|
458 |
+
["604913", "Horses Neck"],
|
459 |
+
["605B73", "Smoky"],
|
460 |
+
["606E68", "Corduroy"],
|
461 |
+
["6093D1", "Danube"],
|
462 |
+
["612718", "Espresso"],
|
463 |
+
["614051", "Eggplant"],
|
464 |
+
#["615D30", "Costa Del Sol"],
|
465 |
+
["61845F", "Glade Green"],
|
466 |
+
#["622F30", "Buccaneer"],
|
467 |
+
#["623F2D", "Quincy"],
|
468 |
+
["624E9A", "Butterfly Bush"],
|
469 |
+
["625119", "West Coast"],
|
470 |
+
["626649", "Finch"],
|
471 |
+
["639A8F", "Patina"],
|
472 |
+
["63B76C", "Fern"],
|
473 |
+
["6456B7", "Blue Violet"],
|
474 |
+
["646077", "Dolphin"],
|
475 |
+
["646463", "Storm Dust"],
|
476 |
+
["646A54", "Siam"],
|
477 |
+
#["646E75", "Nevada"],
|
478 |
+
["6495ED", "Cornflower Blue"],
|
479 |
+
#["64CCDB", "Viking"],
|
480 |
+
["65000B", "Rosewood"],
|
481 |
+
["651A14", "Cherrywood"],
|
482 |
+
["652DC1", "Purple Heart"],
|
483 |
+
["657220", "Fern Frond"],
|
484 |
+
["65745D", "Willow Grove"],
|
485 |
+
#["65869F", "Hoki"],
|
486 |
+
#["660045", "Pompadour"],
|
487 |
+
["660099", "Purple"],
|
488 |
+
["66023C", "Tyrian Purple"],
|
489 |
+
["661010", "Dark Tan"],
|
490 |
+
["66B58F", "Silver Tree"],
|
491 |
+
["66FF00", "Bright Green"],
|
492 |
+
["66FF66", "Screamin' Green"],
|
493 |
+
["67032D", "Black Rose"],
|
494 |
+
#["675FA6", "Scampi"],
|
495 |
+
["676662", "Ironside Gray"],
|
496 |
+
["678975", "Viridian Green"],
|
497 |
+
#["67A712", "Christi"],
|
498 |
+
["683600", "Nutmeg Wood Finish"],
|
499 |
+
#["685558", "Zambezi"],
|
500 |
+
["685E6E", "Salt Box"],
|
501 |
+
#["692545", "Tawny Port"],
|
502 |
+
#["692D54", "Finn"],
|
503 |
+
["695F62", "Scorpion"],
|
504 |
+
#["697E9A", "Lynch"],
|
505 |
+
["6A442E", "Spice"],
|
506 |
+
["6A5D1B", "Himalaya"],
|
507 |
+
["6A6051", "Soya Bean"],
|
508 |
+
#["6B2A14", "Hairy Heath"],
|
509 |
+
["6B3FA0", "Royal Purple"],
|
510 |
+
#["6B4E31", "Shingle Fawn"],
|
511 |
+
#["6B5755", "Dorado"],
|
512 |
+
["6B8BA2", "Bermuda Gray"],
|
513 |
+
["6B8E23", "Olive Drab"],
|
514 |
+
#["6C3082", "Eminence"],
|
515 |
+
["6CDAE7", "Turquoise Blue"],
|
516 |
+
["6D0101", "Lonestar"],
|
517 |
+
["6D5E54", "Pine Cone"],
|
518 |
+
["6D6C6C", "Dove Gray"],
|
519 |
+
["6D9292", "Juniper"],
|
520 |
+
["6D92A1", "Gothic"],
|
521 |
+
["6E0902", "Red Oxide"],
|
522 |
+
["6E1D14", "Moccaccino"],
|
523 |
+
["6E4826", "Pickled Bean"],
|
524 |
+
#["6E4B26", "Dallas"],
|
525 |
+
#["6E6D57", "Kokoda"],
|
526 |
+
["6E7783", "Pale Sky"],
|
527 |
+
["6F440C", "Cafe Royale"],
|
528 |
+
#["6F6A61", "Flint"],
|
529 |
+
["6F8E63", "Highland"],
|
530 |
+
["6F9D02", "Limeade"],
|
531 |
+
#["6FD0C5", "Downy"],
|
532 |
+
["701C1C", "Persian Plum"],
|
533 |
+
["704214", "Sepia"],
|
534 |
+
["704A07", "Antique Bronze"],
|
535 |
+
["704F50", "Ferra"],
|
536 |
+
["706555", "Coffee"],
|
537 |
+
["708090", "Slate Gray"],
|
538 |
+
["711A00", "Cedar Wood Finish"],
|
539 |
+
["71291D", "Metallic Copper"],
|
540 |
+
#["714693", "Affair"],
|
541 |
+
#["714AB2", "Studio"],
|
542 |
+
["715D47", "Tobacco Brown"],
|
543 |
+
["716338", "Yellow Metal"],
|
544 |
+
["716B56", "Peat"],
|
545 |
+
["716E10", "Olivetone"],
|
546 |
+
["717486", "Storm Gray"],
|
547 |
+
["718080", "Sirocco"],
|
548 |
+
["71D9E2", "Aquamarine Blue"],
|
549 |
+
["72010F", "Venetian Red"],
|
550 |
+
["724A2F", "Old Copper"],
|
551 |
+
#["726D4E", "Go Ben"],
|
552 |
+
["727B89", "Raven"],
|
553 |
+
["731E8F", "Seance"],
|
554 |
+
["734A12", "Raw Umber"],
|
555 |
+
#["736C9F", "Kimberly"],
|
556 |
+
["736D58", "Crocodile"],
|
557 |
+
["737829", "Crete"],
|
558 |
+
#["738678", "Xanadu"],
|
559 |
+
["74640D", "Spicy Mustard"],
|
560 |
+
["747D63", "Limed Ash"],
|
561 |
+
["747D83", "Rolling Stone"],
|
562 |
+
["748881", "Blue Smoke"],
|
563 |
+
#["749378", "Laurel"],
|
564 |
+
["74C365", "Mantis"],
|
565 |
+
["755A57", "Russett"],
|
566 |
+
#["7563A8", "Deluge"],
|
567 |
+
["76395D", "Cosmic"],
|
568 |
+
["7666C6", "Blue Marguerite"],
|
569 |
+
#["76BD17", "Lima"],
|
570 |
+
["76D7EA", "Sky Blue"],
|
571 |
+
["770F05", "Dark Burgundy"],
|
572 |
+
#["771F1F", "Crown of Thorns"],
|
573 |
+
["773F1A", "Walnut"],
|
574 |
+
#["776F61", "Pablo"],
|
575 |
+
["778120", "Pacifika"],
|
576 |
+
["779E86", "Oxley"],
|
577 |
+
["77DD77", "Pastel Green"],
|
578 |
+
["780109", "Japanese Maple"],
|
579 |
+
["782D19", "Mocha"],
|
580 |
+
["782F16", "Peanut"],
|
581 |
+
["78866B", "Camouflage Green"],
|
582 |
+
["788A25", "Wasabi"],
|
583 |
+
["788BBA", "Ship Cove"],
|
584 |
+
["78A39C", "Sea Nymph"],
|
585 |
+
["795D4C", "Roman Coffee"],
|
586 |
+
["796878", "Old Lavender"],
|
587 |
+
["796989", "Rum"],
|
588 |
+
["796A78", "Fedora"],
|
589 |
+
["796D62", "Sandstone"],
|
590 |
+
["79DEEC", "Spray"],
|
591 |
+
["7A013A", "Siren"],
|
592 |
+
["7A58C1", "Fuchsia Blue"],
|
593 |
+
["7A7A7A", "Boulder"],
|
594 |
+
["7A89B8", "Wild Blue Yonder"],
|
595 |
+
#["7AC488", "De York"],
|
596 |
+
["7B3801", "Red Beech"],
|
597 |
+
["7B3F00", "Cinnamon"],
|
598 |
+
["7B6608", "Yukon Gold"],
|
599 |
+
#["7B7874", "Tapa"],
|
600 |
+
#["7B7C94", "Waterloo "],
|
601 |
+
["7B8265", "Flax Smoke"],
|
602 |
+
["7B9F80", "Amulet"],
|
603 |
+
["7BA05B", "Asparagus"],
|
604 |
+
["7C1C05", "Kenyan Copper"],
|
605 |
+
["7C7631", "Pesto"],
|
606 |
+
["7C778A", "Topaz"],
|
607 |
+
["7C7B7A", "Concord"],
|
608 |
+
["7C7B82", "Jumbo"],
|
609 |
+
["7C881A", "Trendy Green"],
|
610 |
+
#["7CA1A6", "Gumbo"],
|
611 |
+
["7CB0A1", "Acapulco"],
|
612 |
+
["7CB7BB", "Neptune"],
|
613 |
+
["7D2C14", "Pueblo"],
|
614 |
+
["7DA98D", "Bay Leaf"],
|
615 |
+
["7DC8F7", "Malibu"],
|
616 |
+
["7DD8C6", "Bermuda"],
|
617 |
+
["7E3A15", "Copper Canyon"],
|
618 |
+
#["7F1734", "Claret"],
|
619 |
+
["7F3A02", "Peru Tan"],
|
620 |
+
["7F626D", "Falcon"],
|
621 |
+
["7F7589", "Mobster"],
|
622 |
+
["7F76D3", "Moody Blue"],
|
623 |
+
["7FFF00", "Chartreuse"],
|
624 |
+
["7FFFD4", "Aquamarine"],
|
625 |
+
["800000", "Maroon"],
|
626 |
+
["800B47", "Rose Bud Cherry"],
|
627 |
+
["801818", "Falu Red"],
|
628 |
+
["80341F", "Red Robin"],
|
629 |
+
["803790", "Vivid Violet"],
|
630 |
+
["80461B", "Russet"],
|
631 |
+
["807E79", "Friar Gray"],
|
632 |
+
["808000", "Olive"],
|
633 |
+
["808080", "Gray"],
|
634 |
+
["80B3AE", "Gulf Stream"],
|
635 |
+
["80B3C4", "Glacier"],
|
636 |
+
["80CCEA", "Seagull"],
|
637 |
+
["81422C", "Nutmeg"],
|
638 |
+
["816E71", "Spicy Pink"],
|
639 |
+
["817377", "Empress"],
|
640 |
+
["819885", "Spanish Green"],
|
641 |
+
["826F65", "Sand Dune"],
|
642 |
+
["828685", "Gunsmoke"],
|
643 |
+
["828F72", "Battleship Gray"],
|
644 |
+
["831923", "Merlot"],
|
645 |
+
["837050", "Shadow"],
|
646 |
+
["83AA5D", "Chelsea Cucumber"],
|
647 |
+
#["83D0C6", "Monte Carlo"],
|
648 |
+
["843179", "Plum"],
|
649 |
+
["84A0A0", "Granny Smith"],
|
650 |
+
["8581D9", "Chetwode Blue"],
|
651 |
+
#["858470", "Bandicoot"],
|
652 |
+
#["859FAF", "Bali Hai"],
|
653 |
+
#["85C4CC", "Half Baked"],
|
654 |
+
["860111", "Red Devil"],
|
655 |
+
["863C3C", "Lotus"],
|
656 |
+
["86483C", "Ironstone"],
|
657 |
+
["864D1E", "Bull Shot"],
|
658 |
+
["86560A", "Rusty Nail"],
|
659 |
+
#["868974", "Bitter"],
|
660 |
+
["86949F", "Regent Gray"],
|
661 |
+
["871550", "Disco"],
|
662 |
+
["87756E", "Americano"],
|
663 |
+
["877C7B", "Hurricane"],
|
664 |
+
["878D91", "Oslo Gray"],
|
665 |
+
#["87AB39", "Sushi"],
|
666 |
+
["885342", "Spicy Mix"],
|
667 |
+
["886221", "Kumera"],
|
668 |
+
["888387", "Suva Gray"],
|
669 |
+
["888D65", "Avocado"],
|
670 |
+
["893456", "Camelot"],
|
671 |
+
["893843", "Solid Pink"],
|
672 |
+
["894367", "Cannon Pink"],
|
673 |
+
["897D6D", "Makara"],
|
674 |
+
["8A3324", "Burnt Umber"],
|
675 |
+
#["8A73D6", "True V"],
|
676 |
+
["8A8360", "Clay Creek"],
|
677 |
+
["8A8389", "Monsoon"],
|
678 |
+
#["8A8F8A", "Stack"],
|
679 |
+
["8AB9F1", "Jordy Blue"],
|
680 |
+
["8B00FF", "Electric Violet"],
|
681 |
+
["8B0723", "Monarch"],
|
682 |
+
["8B6B0B", "Corn Harvest"],
|
683 |
+
["8B8470", "Olive Haze"],
|
684 |
+
#["8B847E", "Schooner"],
|
685 |
+
["8B8680", "Natural Gray"],
|
686 |
+
["8B9C90", "Mantle"],
|
687 |
+
#["8B9FEE", "Portage"],
|
688 |
+
#["8BA690", "Envy"],
|
689 |
+
["8BA9A5", "Cascade"],
|
690 |
+
["8BE6D8", "Riptide"],
|
691 |
+
["8C055E", "Cardinal Pink"],
|
692 |
+
["8C472F", "Mule Fawn"],
|
693 |
+
["8C5738", "Potters Clay"],
|
694 |
+
["8C6495", "Trendy Pink"],
|
695 |
+
["8D0226", "Paprika"],
|
696 |
+
["8D3D38", "Sanguine Brown"],
|
697 |
+
["8D3F3F", "Tosca"],
|
698 |
+
["8D7662", "Cement"],
|
699 |
+
["8D8974", "Granite Green"],
|
700 |
+
["8D90A1", "Manatee"],
|
701 |
+
["8DA8CC", "Polo Blue"],
|
702 |
+
["8E0000", "Red Berry"],
|
703 |
+
#["8E4D1E", "Rope"],
|
704 |
+
["8E6F70", "Opium"],
|
705 |
+
#["8E775E", "Domino"],
|
706 |
+
["8E8190", "Mamba"],
|
707 |
+
#["8EABC1", "Nepal"],
|
708 |
+
#["8F021C", "Pohutukawa"],
|
709 |
+
#["8F3E33", "El Salva"],
|
710 |
+
["8F4B0E", "Korma"],
|
711 |
+
["8F8176", "Squirrel"],
|
712 |
+
["8FD6B4", "Vista Blue"],
|
713 |
+
["900020", "Burgundy"],
|
714 |
+
["901E1E", "Old Brick"],
|
715 |
+
["907874", "Hemp"],
|
716 |
+
["907B71", "Almond Frost"],
|
717 |
+
["908D39", "Sycamore"],
|
718 |
+
["92000A", "Sangria"],
|
719 |
+
["924321", "Cumin"],
|
720 |
+
["926F5B", "Beaver"],
|
721 |
+
["928573", "Stonewall"],
|
722 |
+
["928590", "Venus"],
|
723 |
+
["9370DB", "Medium Purple"],
|
724 |
+
["93CCEA", "Cornflower"],
|
725 |
+
["93DFB8", "Algae Green"],
|
726 |
+
["944747", "Copper Rust"],
|
727 |
+
["948771", "Arrowtown"],
|
728 |
+
["950015", "Scarlett"],
|
729 |
+
#["956387", "Strikemaster"],
|
730 |
+
["959396", "Mountain Mist"],
|
731 |
+
["960018", "Carmine"],
|
732 |
+
["964B00", "Brown"],
|
733 |
+
["967059", "Leather"],
|
734 |
+
["9678B6", "Purple Mountain's Majesty"],
|
735 |
+
["967BB6", "Lavender Purple"],
|
736 |
+
#["96A8A1", "Pewter"],
|
737 |
+
["96BBAB", "Summer Green"],
|
738 |
+
#["97605D", "Au Chico"],
|
739 |
+
#["9771B5", "Wisteria"],
|
740 |
+
["97CD2D", "Atlantis"],
|
741 |
+
["983D61", "Vin Rouge"],
|
742 |
+
["9874D3", "Lilac Bush"],
|
743 |
+
["98777B", "Bazaar"],
|
744 |
+
#["98811B", "Hacienda"],
|
745 |
+
["988D77", "Pale Oyster"],
|
746 |
+
["98FF98", "Mint Green"],
|
747 |
+
["990066", "Fresh Eggplant"],
|
748 |
+
["991199", "Violet Eggplant"],
|
749 |
+
["991613", "Tamarillo"],
|
750 |
+
#["991B07", "Totem Pole"],
|
751 |
+
["996666", "Copper Rose"],
|
752 |
+
["9966CC", "Amethyst"],
|
753 |
+
["997A8D", "Mountbatten Pink"],
|
754 |
+
["9999CC", "Blue Bell"],
|
755 |
+
["9A3820", "Prairie Sand"],
|
756 |
+
["9A6E61", "Toast"],
|
757 |
+
["9A9577", "Gurkha"],
|
758 |
+
["9AB973", "Olivine"],
|
759 |
+
["9AC2B8", "Shadow Green"],
|
760 |
+
["9B4703", "Oregon"],
|
761 |
+
["9B9E8F", "Lemon Grass"],
|
762 |
+
["9C3336", "Stiletto"],
|
763 |
+
["9D5616", "Hawaiian Tan"],
|
764 |
+
["9DACB7", "Gull Gray"],
|
765 |
+
["9DC209", "Pistachio"],
|
766 |
+
["9DE093", "Granny Smith Apple"],
|
767 |
+
["9DE5FF", "Anakiwa"],
|
768 |
+
["9E5302", "Chelsea Gem"],
|
769 |
+
["9E5B40", "Sepia Skin"],
|
770 |
+
["9EA587", "Sage"],
|
771 |
+
["9EA91F", "Citron"],
|
772 |
+
["9EB1CD", "Rock Blue"],
|
773 |
+
["9EDEE0", "Morning Glory"],
|
774 |
+
["9F381D", "Cognac"],
|
775 |
+
["9F821C", "Reef Gold"],
|
776 |
+
["9F9F9C", "Star Dust"],
|
777 |
+
["9FA0B1", "Santas Gray"],
|
778 |
+
#["9FD7D3", "Sinbad"],
|
779 |
+
["9FDD8C", "Feijoa"],
|
780 |
+
["A02712", "Tabasco"],
|
781 |
+
["A1750D", "Buttered Rum"],
|
782 |
+
["A1ADB5", "Hit Gray"],
|
783 |
+
["A1C50A", "Citrus"],
|
784 |
+
["A1DAD7", "Aqua Island"],
|
785 |
+
["A1E9DE", "Water Leaf"],
|
786 |
+
["A2006D", "Flirt"],
|
787 |
+
["A23B6C", "Rouge"],
|
788 |
+
["A26645", "Cape Palliser"],
|
789 |
+
["A2AAB3", "Gray Chateau"],
|
790 |
+
#["A2AEAB", "Edward"],
|
791 |
+
["A3807B", "Pharlap"],
|
792 |
+
["A397B4", "Amethyst Smoke"],
|
793 |
+
["A3E3ED", "Blizzard Blue"],
|
794 |
+
["A4A49D", "Delta"],
|
795 |
+
["A4A6D3", "Wistful"],
|
796 |
+
["A4AF6E", "Green Smoke"],
|
797 |
+
["A50B5E", "Jazzberry Jam"],
|
798 |
+
["A59B91", "Zorba"],
|
799 |
+
["A5CB0C", "Bahia"],
|
800 |
+
["A62F20", "Roof Terracotta"],
|
801 |
+
["A65529", "Paarl"],
|
802 |
+
["A68B5B", "Barley Corn"],
|
803 |
+
["A69279", "Donkey Brown"],
|
804 |
+
["A6A29A", "Dawn"],
|
805 |
+
["A72525", "Mexican Red"],
|
806 |
+
["A7882C", "Luxor Gold"],
|
807 |
+
["A85307", "Rich Gold"],
|
808 |
+
["A86515", "Reno Sand"],
|
809 |
+
["A86B6B", "Coral Tree"],
|
810 |
+
["A8989B", "Dusty Gray"],
|
811 |
+
["A899E6", "Dull Lavender"],
|
812 |
+
["A8A589", "Tallow"],
|
813 |
+
["A8AE9C", "Bud"],
|
814 |
+
["A8AF8E", "Locust"],
|
815 |
+
["A8BD9F", "Norway"],
|
816 |
+
["A8E3BD", "Chinook"],
|
817 |
+
["A9A491", "Gray Olive"],
|
818 |
+
["A9ACB6", "Aluminium"],
|
819 |
+
["A9B2C3", "Cadet Blue"],
|
820 |
+
["A9B497", "Schist"],
|
821 |
+
["A9BDBF", "Tower Gray"],
|
822 |
+
["A9BEF2", "Perano"],
|
823 |
+
["A9C6C2", "Opal"],
|
824 |
+
["AA375A", "Night Shadz"],
|
825 |
+
["AA4203", "Fire"],
|
826 |
+
["AA8B5B", "Muesli"],
|
827 |
+
["AA8D6F", "Sandal"],
|
828 |
+
["AAA5A9", "Shady Lady"],
|
829 |
+
#["AAA9CD", "Logan"],
|
830 |
+
["AAABB7", "Spun Pearl"],
|
831 |
+
["AAD6E6", "Regent St Blue"],
|
832 |
+
["AAF0D1", "Magic Mint"],
|
833 |
+
["AB0563", "Lipstick"],
|
834 |
+
["AB3472", "Royal Heath"],
|
835 |
+
["AB917A", "Sandrift"],
|
836 |
+
["ABA0D9", "Cold Purple"],
|
837 |
+
["ABA196", "Bronco"],
|
838 |
+
["AC8A56", "Limed Oak"],
|
839 |
+
#["AC91CE", "East Side"],
|
840 |
+
["AC9E22", "Lemon Ginger"],
|
841 |
+
["ACA494", "Napa"],
|
842 |
+
#["ACA586", "Hillary"],
|
843 |
+
["ACA59F", "Cloudy"],
|
844 |
+
["ACACAC", "Silver Chalice"],
|
845 |
+
["ACB78E", "Swamp Green"],
|
846 |
+
["ACCBB1", "Spring Rain"],
|
847 |
+
["ACDD4D", "Conifer"],
|
848 |
+
["ACE1AF", "Celadon"],
|
849 |
+
["AD781B", "Mandalay"],
|
850 |
+
["ADBED1", "Casper"],
|
851 |
+
["ADDFAD", "Moss Green"],
|
852 |
+
["ADE6C4", "Padua"],
|
853 |
+
["ADFF2F", "Green Yellow"],
|
854 |
+
["AE4560", "Hippie Pink"],
|
855 |
+
["AE6020", "Desert"],
|
856 |
+
["AE809E", "Bouquet"],
|
857 |
+
["AF4035", "Medium Carmine"],
|
858 |
+
["AF4D43", "Apple Blossom"],
|
859 |
+
["AF593E", "Brown Rust"],
|
860 |
+
["AF8751", "Driftwood"],
|
861 |
+
["AF8F2C", "Alpine"],
|
862 |
+
["AF9F1C", "Lucky"],
|
863 |
+
["AFA09E", "Martini"],
|
864 |
+
["AFB1B8", "Bombay"],
|
865 |
+
["AFBDD9", "Pigeon Post"],
|
866 |
+
["B04C6A", "Cadillac"],
|
867 |
+
["B05D54", "Matrix"],
|
868 |
+
["B05E81", "Tapestry"],
|
869 |
+
["B06608", "Mai Tai"],
|
870 |
+
["B09A95", "Del Rio"],
|
871 |
+
["B0E0E6", "Powder Blue"],
|
872 |
+
["B0E313", "Inch Worm"],
|
873 |
+
["B10000", "Bright Red"],
|
874 |
+
["B14A0B", "Vesuvius"],
|
875 |
+
["B1610B", "Pumpkin Skin"],
|
876 |
+
#["B16D52", "Santa Fe"],
|
877 |
+
["B19461", "Teak"],
|
878 |
+
["B1E2C1", "Fringy Flower"],
|
879 |
+
["B1F4E7", "Ice Cold"],
|
880 |
+
["B20931", "Shiraz"],
|
881 |
+
["B2A1EA", "Biloba Flower"],
|
882 |
+
["B32D29", "Tall Poppy"],
|
883 |
+
["B35213", "Fiery Orange"],
|
884 |
+
["B38007", "Hot Toddy"],
|
885 |
+
["B3AF95", "Taupe Gray"],
|
886 |
+
["B3C110", "La Rioja"],
|
887 |
+
#["B43332", "Well Read"],
|
888 |
+
["B44668", "Blush"],
|
889 |
+
["B4CFD3", "Jungle Mist"],
|
890 |
+
["B57281", "Turkish Rose"],
|
891 |
+
["B57EDC", "Lavender"],
|
892 |
+
["B5A27F", "Mongoose"],
|
893 |
+
["B5B35C", "Olive Green"],
|
894 |
+
["B5D2CE", "Jet Stream"],
|
895 |
+
["B5ECDF", "Cruise"],
|
896 |
+
["B6316C", "Hibiscus"],
|
897 |
+
["B69D98", "Thatch"],
|
898 |
+
["B6B095", "Heathered Gray"],
|
899 |
+
["B6BAA4", "Eagle"],
|
900 |
+
["B6D1EA", "Spindle"],
|
901 |
+
["B6D3BF", "Gum Leaf"],
|
902 |
+
["B7410E", "Rust"],
|
903 |
+
["B78E5C", "Muddy Waters"],
|
904 |
+
["B7A214", "Sahara"],
|
905 |
+
["B7A458", "Husk"],
|
906 |
+
#["B7B1B1", "Nobel"],
|
907 |
+
#["B7C3D0", "Heather"],
|
908 |
+
#["B7F0BE", "Madang"],
|
909 |
+
["B81104", "Milano Red"],
|
910 |
+
["B87333", "Copper"],
|
911 |
+
["B8B56A", "Gimblet"],
|
912 |
+
["B8C1B1", "Green Spring"],
|
913 |
+
["B8C25D", "Celery"],
|
914 |
+
["B8E0F9", "Sail"],
|
915 |
+
["B94E48", "Chestnut"],
|
916 |
+
#["B95140", "Crail"],
|
917 |
+
["B98D28", "Marigold"],
|
918 |
+
["B9C46A", "Wild Willow"],
|
919 |
+
["B9C8AC", "Rainee"],
|
920 |
+
["BA0101", "Guardsman Red"],
|
921 |
+
["BA450C", "Rock Spray"],
|
922 |
+
["BA6F1E", "Bourbon"],
|
923 |
+
["BA7F03", "Pirate Gold"],
|
924 |
+
["BAB1A2", "Nomad"],
|
925 |
+
["BAC7C9", "Submarine"],
|
926 |
+
["BAEEF9", "Charlotte"],
|
927 |
+
["BB3385", "Medium Red Violet"],
|
928 |
+
["BB8983", "Brandy Rose"],
|
929 |
+
["BBD009", "Rio Grande"],
|
930 |
+
["BBD7C1", "Surf"],
|
931 |
+
["BCC9C2", "Powder Ash"],
|
932 |
+
["BD5E2E", "Tuscany"],
|
933 |
+
["BD978E", "Quicksand"],
|
934 |
+
["BDB1A8", "Silk"],
|
935 |
+
#["BDB2A1", "Malta"],
|
936 |
+
["BDB3C7", "Chatelle"],
|
937 |
+
["BDBBD7", "Lavender Gray"],
|
938 |
+
["BDBDC6", "French Gray"],
|
939 |
+
["BDC8B3", "Clay Ash"],
|
940 |
+
["BDC9CE", "Loblolly"],
|
941 |
+
["BDEDFD", "French Pass"],
|
942 |
+
["BEA6C3", "London Hue"],
|
943 |
+
["BEB5B7", "Pink Swan"],
|
944 |
+
["BEDE0D", "Fuego"],
|
945 |
+
["BF5500", "Rose of Sharon"],
|
946 |
+
["BFB8B0", "Tide"],
|
947 |
+
["BFBED8", "Blue Haze"],
|
948 |
+
["BFC1C2", "Silver Sand"],
|
949 |
+
["BFC921", "Key Lime Pie"],
|
950 |
+
#["BFDBE2", "Ziggurat"],
|
951 |
+
["BFFF00", "Lime"],
|
952 |
+
["C02B18", "Thunderbird"],
|
953 |
+
["C04737", "Mojo"],
|
954 |
+
["C08081", "Old Rose"],
|
955 |
+
["C0C0C0", "Silver"],
|
956 |
+
["C0D3B9", "Pale Leaf"],
|
957 |
+
["C0D8B6", "Pixie Green"],
|
958 |
+
#["C1440E", "Tia Maria"],
|
959 |
+
["C154C1", "Fuchsia Pink"],
|
960 |
+
["C1A004", "Buddha Gold"],
|
961 |
+
["C1B7A4", "Bison Hide"],
|
962 |
+
["C1BAB0", "Tea"],
|
963 |
+
["C1BECD", "Gray Suit"],
|
964 |
+
["C1D7B0", "Sprout"],
|
965 |
+
#["C1F07C", "Sulu"],
|
966 |
+
#["C26B03", "Indochine"],
|
967 |
+
["C2955D", "Twine"],
|
968 |
+
["C2BDB6", "Cotton Seed"],
|
969 |
+
["C2CAC4", "Pumice"],
|
970 |
+
["C2E8E5", "Jagged Ice"],
|
971 |
+
["C32148", "Maroon Flush"],
|
972 |
+
["C3B091", "Indian Khaki"],
|
973 |
+
["C3BFC1", "Pale Slate"],
|
974 |
+
["C3C3BD", "Gray Nickel"],
|
975 |
+
["C3CDE6", "Periwinkle Gray"],
|
976 |
+
["C3D1D1", "Tiara"],
|
977 |
+
["C3DDF9", "Tropical Blue"],
|
978 |
+
["C41E3A", "Cardinal"],
|
979 |
+
["C45655", "Fuzzy Wuzzy Brown"],
|
980 |
+
["C45719", "Orange Roughy"],
|
981 |
+
["C4C4BC", "Mist Gray"],
|
982 |
+
["C4D0B0", "Coriander"],
|
983 |
+
["C4F4EB", "Mint Tulip"],
|
984 |
+
["C54B8C", "Mulberry"],
|
985 |
+
["C59922", "Nugget"],
|
986 |
+
["C5994B", "Tussock"],
|
987 |
+
["C5DBCA", "Sea Mist"],
|
988 |
+
["C5E17A", "Yellow Green"],
|
989 |
+
["C62D42", "Brick Red"],
|
990 |
+
#["C6726B", "Contessa"],
|
991 |
+
["C69191", "Oriental Pink"],
|
992 |
+
#["C6A84B", "Roti"],
|
993 |
+
["C6C3B5", "Ash"],
|
994 |
+
["C6C8BD", "Kangaroo"],
|
995 |
+
["C6E610", "Las Palmas"],
|
996 |
+
["C7031E", "Monza"],
|
997 |
+
["C71585", "Red Violet"],
|
998 |
+
["C7BCA2", "Coral Reef"],
|
999 |
+
["C7C1FF", "Melrose"],
|
1000 |
+
["C7C4BF", "Cloud"],
|
1001 |
+
["C7C9D5", "Ghost"],
|
1002 |
+
["C7CD90", "Pine Glade"],
|
1003 |
+
["C7DDE5", "Botticelli"],
|
1004 |
+
["C88A65", "Antique Brass"],
|
1005 |
+
["C8A2C8", "Lilac"],
|
1006 |
+
["C8A528", "Hokey Pokey"],
|
1007 |
+
["C8AABF", "Lily"],
|
1008 |
+
["C8B568", "Laser"],
|
1009 |
+
["C8E3D7", "Edgewater"],
|
1010 |
+
["C96323", "Piper"],
|
1011 |
+
#["C99415", "Pizza"],
|
1012 |
+
["C9A0DC", "Light Wisteria"],
|
1013 |
+
["C9B29B", "Rodeo Dust"],
|
1014 |
+
["C9B35B", "Sundance"],
|
1015 |
+
["C9B93B", "Earls Green"],
|
1016 |
+
["C9C0BB", "Silver Rust"],
|
1017 |
+
["C9D9D2", "Conch"],
|
1018 |
+
["C9FFA2", "Reef"],
|
1019 |
+
["C9FFE5", "Aero Blue"],
|
1020 |
+
["CA3435", "Flush Mahogany"],
|
1021 |
+
["CABB48", "Turmeric"],
|
1022 |
+
["CADCD4", "Paris White"],
|
1023 |
+
["CAE00D", "Bitter Lemon"],
|
1024 |
+
["CAE6DA", "Skeptic"],
|
1025 |
+
["CB8FA9", "Viola"],
|
1026 |
+
["CBCAB6", "Foggy Gray"],
|
1027 |
+
["CBD3B0", "Green Mist"],
|
1028 |
+
["CBDBD6", "Nebula"],
|
1029 |
+
["CC3333", "Persian Red"],
|
1030 |
+
["CC5500", "Burnt Orange"],
|
1031 |
+
#["CC7722", "Ochre"],
|
1032 |
+
#["CC8899", "Puce"],
|
1033 |
+
["CCCAA8", "Thistle Green"],
|
1034 |
+
["CCCCFF", "Periwinkle"],
|
1035 |
+
["CCFF00", "Electric Lime"],
|
1036 |
+
#["CD5700", "Tenn"],
|
1037 |
+
["CD5C5C", "Chestnut Rose"],
|
1038 |
+
["CD8429", "Brandy Punch"],
|
1039 |
+
#["CDF4FF", "Onahau"],
|
1040 |
+
["CEB98F", "Sorrell Brown"],
|
1041 |
+
["CEBABA", "Cold Turkey"],
|
1042 |
+
["CEC291", "Yuma"],
|
1043 |
+
["CEC7A7", "Chino"],
|
1044 |
+
["CFA39D", "Eunry"],
|
1045 |
+
["CFB53B", "Old Gold"],
|
1046 |
+
["CFDCCF", "Tasman"],
|
1047 |
+
["CFE5D2", "Surf Crest"],
|
1048 |
+
["CFF9F3", "Humming Bird"],
|
1049 |
+
#["CFFAF4", "Scandal"],
|
1050 |
+
["D05F04", "Red Stage"],
|
1051 |
+
["D06DA1", "Hopbush"],
|
1052 |
+
["D07D12", "Meteor"],
|
1053 |
+
["D0BEF8", "Perfume"],
|
1054 |
+
#["D0C0E5", "Prelude"],
|
1055 |
+
["D0F0C0", "Tea Green"],
|
1056 |
+
["D18F1B", "Geebung"],
|
1057 |
+
["D1BEA8", "Vanilla"],
|
1058 |
+
["D1C6B4", "Soft Amber"],
|
1059 |
+
["D1D2CA", "Celeste"],
|
1060 |
+
["D1D2DD", "Mischka"],
|
1061 |
+
["D1E231", "Pear"],
|
1062 |
+
["D2691E", "Hot Cinnamon"],
|
1063 |
+
["D27D46", "Raw Sienna"],
|
1064 |
+
["D29EAA", "Careys Pink"],
|
1065 |
+
["D2B48C", "Tan"],
|
1066 |
+
["D2DA97", "Deco"],
|
1067 |
+
["D2F6DE", "Blue Romance"],
|
1068 |
+
#["D2F8B0", "Gossip"],
|
1069 |
+
["D3CBBA", "Sisal"],
|
1070 |
+
["D3CDC5", "Swirl"],
|
1071 |
+
["D47494", "Charm"],
|
1072 |
+
["D4B6AF", "Clam Shell"],
|
1073 |
+
["D4BF8D", "Straw"],
|
1074 |
+
["D4C4A8", "Akaroa"],
|
1075 |
+
["D4CD16", "Bird Flower"],
|
1076 |
+
["D4D7D9", "Iron"],
|
1077 |
+
["D4DFE2", "Geyser"],
|
1078 |
+
["D4E2FC", "Hawkes Blue"],
|
1079 |
+
#["D54600", "Grenadier"],
|
1080 |
+
#["D591A4", "Can Can"],
|
1081 |
+
["D59A6F", "Whiskey"],
|
1082 |
+
["D5D195", "Winter Hazel"],
|
1083 |
+
["D5F6E3", "Granny Apple"],
|
1084 |
+
["D69188", "My Pink"],
|
1085 |
+
["D6C562", "Tacha"],
|
1086 |
+
["D6CEF6", "Moon Raker"],
|
1087 |
+
["D6D6D1", "Quill Gray"],
|
1088 |
+
["D6FFDB", "Snowy Mint"],
|
1089 |
+
["D7837F", "New York Pink"],
|
1090 |
+
#["D7C498", "Pavlova"],
|
1091 |
+
["D7D0FF", "Fog"],
|
1092 |
+
["D84437", "Valencia"],
|
1093 |
+
["D87C63", "Japonica"],
|
1094 |
+
#["D8BFD8", "Thistle"],
|
1095 |
+
["D8C2D5", "Maverick"],
|
1096 |
+
["D8FCFA", "Foam"],
|
1097 |
+
["D94972", "Cabaret"],
|
1098 |
+
["D99376", "Burning Sand"],
|
1099 |
+
["D9B99B", "Cameo"],
|
1100 |
+
["D9D6CF", "Timberwolf"],
|
1101 |
+
["D9DCC1", "Tana"],
|
1102 |
+
["D9E4F5", "Link Water"],
|
1103 |
+
["D9F7FF", "Mabel"],
|
1104 |
+
["DA3287", "Cerise"],
|
1105 |
+
["DA5B38", "Flame Pea"],
|
1106 |
+
["DA6304", "Bamboo"],
|
1107 |
+
["DA6A41", "Red Damask"],
|
1108 |
+
["DA70D6", "Orchid"],
|
1109 |
+
["DA8A67", "Copperfield"],
|
1110 |
+
["DAA520", "Golden Grass"],
|
1111 |
+
["DAECD6", "Zanah"],
|
1112 |
+
["DAF4F0", "Iceberg"],
|
1113 |
+
#["DAFAFF", "Oyster Bay"],
|
1114 |
+
["DB5079", "Cranberry"],
|
1115 |
+
["DB9690", "Petite Orchid"],
|
1116 |
+
#["DB995E", "Di Serria"],
|
1117 |
+
["DBDBDB", "Alto"],
|
1118 |
+
["DBFFF8", "Frosted Mint"],
|
1119 |
+
["DC143C", "Crimson"],
|
1120 |
+
["DC4333", "Punch"],
|
1121 |
+
["DCB20C", "Galliano"],
|
1122 |
+
["DCB4BC", "Blossom"],
|
1123 |
+
["DCD747", "Wattle"],
|
1124 |
+
["DCD9D2", "Westar"],
|
1125 |
+
["DCDDCC", "Moon Mist"],
|
1126 |
+
["DCEDB4", "Caper"],
|
1127 |
+
["DCF0EA", "Swans Down"],
|
1128 |
+
["DDD6D5", "Swiss Coffee"],
|
1129 |
+
["DDF9F1", "White Ice"],
|
1130 |
+
["DE3163", "Cerise Red"],
|
1131 |
+
#["DE6360", "Roman"],
|
1132 |
+
["DEA681", "Tumbleweed"],
|
1133 |
+
["DEBA13", "Gold Tips"],
|
1134 |
+
["DEC196", "Brandy"],
|
1135 |
+
["DECBC6", "Wafer"],
|
1136 |
+
["DED4A4", "Sapling"],
|
1137 |
+
["DED717", "Barberry"],
|
1138 |
+
["DEE5C0", "Beryl Green"],
|
1139 |
+
["DEF5FF", "Pattens Blue"],
|
1140 |
+
#["DF73FF", "Heliotrope"],
|
1141 |
+
#["DFBE6F", "Apache"],
|
1142 |
+
#["DFCD6F", "Chenin"],
|
1143 |
+
#["DFCFDB", "Lola"],
|
1144 |
+
["DFECDA", "Willow Brook"],
|
1145 |
+
["DFFF00", "Chartreuse Yellow"],
|
1146 |
+
["E0B0FF", "Mauve"],
|
1147 |
+
["E0B646", "Anzac"],
|
1148 |
+
["E0B974", "Harvest Gold"],
|
1149 |
+
["E0C095", "Calico"],
|
1150 |
+
["E0FFFF", "Baby Blue"],
|
1151 |
+
#["E16865", "Sunglo"],
|
1152 |
+
#["E1BC64", "Equator"],
|
1153 |
+
["E1C0C8", "Pink Flare"],
|
1154 |
+
["E1E6D6", "Periglacial Blue"],
|
1155 |
+
#["E1EAD4", "Kidnapper"],
|
1156 |
+
#["E1F6E8", "Tara"],
|
1157 |
+
#["E25465", "Mandy"],
|
1158 |
+
["E2725B", "Terracotta"],
|
1159 |
+
["E28913", "Golden Bell"],
|
1160 |
+
#["E292C0", "Shocking"],
|
1161 |
+
["E29418", "Dixie"],
|
1162 |
+
["E29CD2", "Light Orchid"],
|
1163 |
+
#["E2D8ED", "Snuff"],
|
1164 |
+
["E2EBED", "Mystic"],
|
1165 |
+
["E2F3EC", "Apple Green"],
|
1166 |
+
["E30B5C", "Razzmatazz"],
|
1167 |
+
["E32636", "Alizarin Crimson"],
|
1168 |
+
["E34234", "Cinnabar"],
|
1169 |
+
["E3BEBE", "Cavern Pink"],
|
1170 |
+
["E3F5E1", "Peppermint"],
|
1171 |
+
["E3F988", "Mindaro"],
|
1172 |
+
["E47698", "Deep Blush"],
|
1173 |
+
#["E49B0F", "Gamboge"],
|
1174 |
+
#["E4C2D5", "Melanie"],
|
1175 |
+
["E4CFDE", "Twilight"],
|
1176 |
+
#["E4D1C0", "Bone"],
|
1177 |
+
["E4D422", "Sunflower"],
|
1178 |
+
["E4D5B7", "Grain Brown"],
|
1179 |
+
["E4D69B", "Zombie"],
|
1180 |
+
["E4F6E7", "Frostee"],
|
1181 |
+
["E4FFD1", "Snow Flurry"],
|
1182 |
+
["E52B50", "Amaranth"],
|
1183 |
+
["E5841B", "Zest"],
|
1184 |
+
["E5CCC9", "Dust Storm"],
|
1185 |
+
["E5D7BD", "Stark White"],
|
1186 |
+
#["E5D8AF", "Hampton"],
|
1187 |
+
#["E5E0E1", "Bon Jour"],
|
1188 |
+
["E5E5E5", "Mercury"],
|
1189 |
+
["E5F9F6", "Polar"],
|
1190 |
+
["E64E03", "Trinidad"],
|
1191 |
+
["E6BE8A", "Gold Sand"],
|
1192 |
+
["E6BEA5", "Cashmere"],
|
1193 |
+
["E6D7B9", "Double Spanish White"],
|
1194 |
+
["E6E4D4", "Satin Linen"],
|
1195 |
+
#["E6F2EA", "Harp"],
|
1196 |
+
["E6F8F3", "Off Green"],
|
1197 |
+
["E6FFE9", "Hint of Green"],
|
1198 |
+
["E6FFFF", "Tranquil"],
|
1199 |
+
["E77200", "Mango Tango"],
|
1200 |
+
["E7730A", "Christine"],
|
1201 |
+
["E79F8C", "Tonys Pink"],
|
1202 |
+
#["E79FC4", "Kobi"],
|
1203 |
+
["E7BCB4", "Rose Fog"],
|
1204 |
+
["E7BF05", "Corn"],
|
1205 |
+
["E7CD8C", "Putty"],
|
1206 |
+
["E7ECE6", "Gray Nurse"],
|
1207 |
+
["E7F8FF", "Lily White"],
|
1208 |
+
["E7FEFF", "Bubbles"],
|
1209 |
+
["E89928", "Fire Bush"],
|
1210 |
+
["E8B9B3", "Shilo"],
|
1211 |
+
["E8E0D5", "Pearl Bush"],
|
1212 |
+
["E8EBE0", "Green White"],
|
1213 |
+
["E8F1D4", "Chrome White"],
|
1214 |
+
["E8F2EB", "Gin"],
|
1215 |
+
["E8F5F2", "Aqua Squeeze"],
|
1216 |
+
["E96E00", "Clementine"],
|
1217 |
+
["E97451", "Burnt Sienna"],
|
1218 |
+
["E97C07", "Tahiti Gold"],
|
1219 |
+
["E9CECD", "Oyster Pink"],
|
1220 |
+
["E9D75A", "Confetti"],
|
1221 |
+
#["E9E3E3", "Ebb"],
|
1222 |
+
#["E9F8ED", "Ottoman"],
|
1223 |
+
["E9FFFD", "Clear Day"],
|
1224 |
+
["EA88A8", "Carissma"],
|
1225 |
+
#["EAAE69", "Porsche"],
|
1226 |
+
["EAB33B", "Tulip Tree"],
|
1227 |
+
#["EAC674", "Rob Roy"],
|
1228 |
+
["EADAB8", "Raffia"],
|
1229 |
+
["EAE8D4", "White Rock"],
|
1230 |
+
["EAF6EE", "Panache"],
|
1231 |
+
["EAF6FF", "Solitude"],
|
1232 |
+
["EAF9F5", "Aqua Spring"],
|
1233 |
+
["EAFFFE", "Dew"],
|
1234 |
+
["EB9373", "Apricot"],
|
1235 |
+
#["EBC2AF", "Zinnwaldite"],
|
1236 |
+
["ECA927", "Fuel Yellow"],
|
1237 |
+
#["ECC54E", "Ronchi"],
|
1238 |
+
["ECC7EE", "French Lilac"],
|
1239 |
+
#["ECCDB9", "Just Right"],
|
1240 |
+
["ECE090", "Wild Rice"],
|
1241 |
+
["ECEBBD", "Fall Green"],
|
1242 |
+
#["ECEBCE", "Aths Special"],
|
1243 |
+
["ECF245", "Starship"],
|
1244 |
+
["ED0A3F", "Red Ribbon"],
|
1245 |
+
["ED7A1C", "Tango"],
|
1246 |
+
["ED9121", "Carrot Orange"],
|
1247 |
+
["ED989E", "Sea Pink"],
|
1248 |
+
["EDB381", "Tacao"],
|
1249 |
+
["EDC9AF", "Desert Sand"],
|
1250 |
+
["EDCDAB", "Pancho"],
|
1251 |
+
["EDDCB1", "Chamois"],
|
1252 |
+
["EDEA99", "Primrose"],
|
1253 |
+
["EDF5DD", "Frost"],
|
1254 |
+
["EDF5F5", "Aqua Haze"],
|
1255 |
+
#["EDF6FF", "Zumthor"],
|
1256 |
+
#["EDF9F1", "Narvik"],
|
1257 |
+
["EDFC84", "Honeysuckle"],
|
1258 |
+
["EE82EE", "Lavender Magenta"],
|
1259 |
+
#["EEC1BE", "Beauty Bush"],
|
1260 |
+
["EED794", "Chalky"],
|
1261 |
+
["EED9C4", "Almond"],
|
1262 |
+
["EEDC82", "Flax"],
|
1263 |
+
#["EEDEDA", "Bizarre"],
|
1264 |
+
["EEE3AD", "Double Colonial White"],
|
1265 |
+
["EEEEE8", "Cararra"],
|
1266 |
+
["EEEF78", "Manz"],
|
1267 |
+
["EEF0C8", "Tahuna Sands"],
|
1268 |
+
["EEF0F3", "Athens Gray"],
|
1269 |
+
["EEF3C3", "Tusk"],
|
1270 |
+
["EEF4DE", "Loafer"],
|
1271 |
+
["EEF6F7", "Catskill White"],
|
1272 |
+
["EEFDFF", "Twilight Blue"],
|
1273 |
+
["EEFF9A", "Jonquil"],
|
1274 |
+
["EEFFE2", "Rice Flower"],
|
1275 |
+
["EF863F", "Jaffa"],
|
1276 |
+
#["EFEFEF", "Gallery"],
|
1277 |
+
["EFF2F3", "Porcelain"],
|
1278 |
+
#["F091A9", "Mauvelous"],
|
1279 |
+
["F0D52D", "Golden Dream"],
|
1280 |
+
["F0DB7D", "Golden Sand"],
|
1281 |
+
#["F0DC82", "Buff"],
|
1282 |
+
#["F0E2EC", "Prim"],
|
1283 |
+
["F0E68C", "Khaki"],
|
1284 |
+
["F0EEFD", "Selago"],
|
1285 |
+
["F0EEFF", "Titan White"],
|
1286 |
+
["F0F8FF", "Alice Blue"],
|
1287 |
+
["F0FCEA", "Feta"],
|
1288 |
+
["F18200", "Gold Drop"],
|
1289 |
+
#["F19BAB", "Wewak"],
|
1290 |
+
["F1E788", "Sahara Sand"],
|
1291 |
+
["F1E9D2", "Parchment"],
|
1292 |
+
["F1E9FF", "Blue Chalk"],
|
1293 |
+
["F1EEC1", "Mint Julep"],
|
1294 |
+
["F1F1F1", "Seashell"],
|
1295 |
+
["F1F7F2", "Saltpan"],
|
1296 |
+
["F1FFAD", "Tidal"],
|
1297 |
+
["F1FFC8", "Chiffon"],
|
1298 |
+
["F2552A", "Flamingo"],
|
1299 |
+
["F28500", "Tangerine"],
|
1300 |
+
["F2C3B2", "Mandys Pink"],
|
1301 |
+
["F2F2F2", "Concrete"],
|
1302 |
+
["F2FAFA", "Black Squeeze"],
|
1303 |
+
["F34723", "Pomegranate"],
|
1304 |
+
["F3AD16", "Buttercup"],
|
1305 |
+
["F3D69D", "New Orleans"],
|
1306 |
+
["F3D9DF", "Vanilla Ice"],
|
1307 |
+
["F3E7BB", "Sidecar"],
|
1308 |
+
["F3E9E5", "Dawn Pink"],
|
1309 |
+
["F3EDCF", "Wheatfield"],
|
1310 |
+
["F3FB62", "Canary"],
|
1311 |
+
["F3FBD4", "Orinoco"],
|
1312 |
+
#["F3FFD8", "Carla"],
|
1313 |
+
["F400A1", "Hollywood Cerise"],
|
1314 |
+
["F4A460", "Sandy brown"],
|
1315 |
+
["F4C430", "Saffron"],
|
1316 |
+
["F4D81C", "Ripe Lemon"],
|
1317 |
+
#["F4EBD3", "Janna"],
|
1318 |
+
#["F4F2EE", "Pampas"],
|
1319 |
+
["F4F4F4", "Wild Sand"],
|
1320 |
+
["F4F8FF", "Zircon"],
|
1321 |
+
["F57584", "Froly"],
|
1322 |
+
["F5C85C", "Cream Can"],
|
1323 |
+
#["F5C999", "Manhattan"],
|
1324 |
+
["F5D5A0", "Maize"],
|
1325 |
+
["F5DEB3", "Wheat"],
|
1326 |
+
["F5E7A2", "Sandwisp"],
|
1327 |
+
["F5E7E2", "Pot Pourri"],
|
1328 |
+
["F5E9D3", "Albescent White"],
|
1329 |
+
["F5EDEF", "Soft Peach"],
|
1330 |
+
["F5F3E5", "Ecru White"],
|
1331 |
+
["F5F5DC", "Beige"],
|
1332 |
+
["F5FB3D", "Golden Fizz"],
|
1333 |
+
["F5FFBE", "Australian Mint"],
|
1334 |
+
["F64A8A", "French Rose"],
|
1335 |
+
["F653A6", "Brilliant Rose"],
|
1336 |
+
["F6A4C9", "Illusion"],
|
1337 |
+
["F6F0E6", "Merino"],
|
1338 |
+
["F6F7F7", "Black Haze"],
|
1339 |
+
["F6FFDC", "Spring Sun"],
|
1340 |
+
["F7468A", "Violet Red"],
|
1341 |
+
["F77703", "Chilean Fire"],
|
1342 |
+
["F77FBE", "Persian Pink"],
|
1343 |
+
["F7B668", "Rajah"],
|
1344 |
+
["F7C8DA", "Azalea"],
|
1345 |
+
["F7DBE6", "We Peep"],
|
1346 |
+
["F7F2E1", "Quarter Spanish White"],
|
1347 |
+
["F7F5FA", "Whisper"],
|
1348 |
+
["F7FAF7", "Snow Drift"],
|
1349 |
+
["F8B853", "Casablanca"],
|
1350 |
+
["F8C3DF", "Chantilly"],
|
1351 |
+
["F8D9E9", "Cherub"],
|
1352 |
+
["F8DB9D", "Marzipan"],
|
1353 |
+
["F8DD5C", "Energy Yellow"],
|
1354 |
+
#["F8E4BF", "Givry"],
|
1355 |
+
["F8F0E8", "White Linen"],
|
1356 |
+
["F8F4FF", "Magnolia"],
|
1357 |
+
["F8F6F1", "Spring Wood"],
|
1358 |
+
["F8F7DC", "Coconut Cream"],
|
1359 |
+
["F8F7FC", "White Lilac"],
|
1360 |
+
["F8F8F7", "Desert Storm"],
|
1361 |
+
#["F8F99C", "Texas"],
|
1362 |
+
["F8FACD", "Corn Field"],
|
1363 |
+
["F8FDD3", "Mimosa"],
|
1364 |
+
["F95A61", "Carnation"],
|
1365 |
+
["F9BF58", "Saffron Mango"],
|
1366 |
+
["F9E0ED", "Carousel Pink"],
|
1367 |
+
["F9E4BC", "Dairy Cream"],
|
1368 |
+
["F9E663", "Portica"],
|
1369 |
+
["F9EAF3", "Amour"],
|
1370 |
+
["F9F8E4", "Rum Swizzle"],
|
1371 |
+
["F9FF8B", "Dolly"],
|
1372 |
+
["F9FFF6", "Sugar Cane"],
|
1373 |
+
["FA7814", "Ecstasy"],
|
1374 |
+
["FA9D5A", "Tan Hide"],
|
1375 |
+
["FAD3A2", "Corvette"],
|
1376 |
+
["FADFAD", "Peach Yellow"],
|
1377 |
+
["FAE600", "Turbo"],
|
1378 |
+
["FAEAB9", "Astra"],
|
1379 |
+
["FAECCC", "Champagne"],
|
1380 |
+
["FAF0E6", "Linen"],
|
1381 |
+
["FAF3F0", "Fantasy"],
|
1382 |
+
["FAF7D6", "Citrine White"],
|
1383 |
+
["FAFAFA", "Alabaster"],
|
1384 |
+
["FAFDE4", "Hint of Yellow"],
|
1385 |
+
["FAFFA4", "Milan"],
|
1386 |
+
["FB607F", "Brink Pink"],
|
1387 |
+
["FB8989", "Geraldine"],
|
1388 |
+
["FBA0E3", "Lavender Rose"],
|
1389 |
+
#["FBA129", "Sea Buckthorn"],
|
1390 |
+
["FBAC13", "Sun"],
|
1391 |
+
["FBAED2", "Lavender Pink"],
|
1392 |
+
["FBB2A3", "Rose Bud"],
|
1393 |
+
["FBBEDA", "Cupid"],
|
1394 |
+
["FBCCE7", "Classic Rose"],
|
1395 |
+
["FBCEB1", "Apricot Peach"],
|
1396 |
+
["FBE7B2", "Banana Mania"],
|
1397 |
+
["FBE870", "Marigold Yellow"],
|
1398 |
+
#["FBE96C", "Festival"],
|
1399 |
+
["FBEA8C", "Sweet Corn"],
|
1400 |
+
["FBEC5D", "Candy Corn"],
|
1401 |
+
["FBF9F9", "Hint of Red"],
|
1402 |
+
["FBFFBA", "Shalimar"],
|
1403 |
+
["FC0FC0", "Shocking Pink"],
|
1404 |
+
["FC80A5", "Tickle Me Pink"],
|
1405 |
+
["FC9C1D", "Tree Poppy"],
|
1406 |
+
["FCC01E", "Lightning Yellow"],
|
1407 |
+
["FCD667", "Goldenrod"],
|
1408 |
+
["FCD917", "Candlelight"],
|
1409 |
+
["FCDA98", "Cherokee"],
|
1410 |
+
["FCF4D0", "Double Pearl Lusta"],
|
1411 |
+
["FCF4DC", "Pearl Lusta"],
|
1412 |
+
["FCF8F7", "Vista White"],
|
1413 |
+
["FCFBF3", "Bianca"],
|
1414 |
+
["FCFEDA", "Moon Glow"],
|
1415 |
+
["FCFFE7", "China Ivory"],
|
1416 |
+
["FCFFF9", "Ceramic"],
|
1417 |
+
["FD0E35", "Torch Red"],
|
1418 |
+
["FD5B78", "Wild Watermelon"],
|
1419 |
+
["FD7B33", "Crusta"],
|
1420 |
+
["FD7C07", "Sorbus"],
|
1421 |
+
["FD9FA2", "Sweet Pink"],
|
1422 |
+
["FDD5B1", "Light Apricot"],
|
1423 |
+
["FDD7E4", "Pig Pink"],
|
1424 |
+
["FDE1DC", "Cinderella"],
|
1425 |
+
["FDE295", "Golden Glow"],
|
1426 |
+
["FDE910", "Lemon"],
|
1427 |
+
["FDF5E6", "Old Lace"],
|
1428 |
+
["FDF6D3", "Half Colonial White"],
|
1429 |
+
["FDF7AD", "Drover"],
|
1430 |
+
["FDFEB8", "Pale Prim"],
|
1431 |
+
["FDFFD5", "Cumulus"],
|
1432 |
+
["FE28A2", "Persian Rose"],
|
1433 |
+
["FE4C40", "Sunset Orange"],
|
1434 |
+
#["FE6F5E", "Bittersweet"],
|
1435 |
+
#["FE9D04", "California"],
|
1436 |
+
["FEA904", "Yellow Sea"],
|
1437 |
+
["FEBAAD", "Melon"],
|
1438 |
+
["FED33C", "Bright Sun"],
|
1439 |
+
["FED85D", "Dandelion"],
|
1440 |
+
#["FEDB8D", "Salomie"],
|
1441 |
+
["FEE5AC", "Cape Honey"],
|
1442 |
+
#["FEEBF3", "Remy"],
|
1443 |
+
["FEEFCE", "Oasis"],
|
1444 |
+
["FEF0EC", "Bridesmaid"],
|
1445 |
+
["FEF2C7", "Beeswax"],
|
1446 |
+
["FEF3D8", "Bleach White"],
|
1447 |
+
["FEF4CC", "Pipi"],
|
1448 |
+
["FEF4DB", "Half Spanish White"],
|
1449 |
+
["FEF4F8", "Wisp Pink"],
|
1450 |
+
["FEF5F1", "Provincial Pink"],
|
1451 |
+
["FEF7DE", "Half Dutch White"],
|
1452 |
+
#["FEF8E2", "Solitaire"],
|
1453 |
+
["FEF8FF", "White Pointer"],
|
1454 |
+
["FEF9E3", "Off Yellow"],
|
1455 |
+
["FEFCED", "Orange White"],
|
1456 |
+
["FF0000", "Red"],
|
1457 |
+
["FF007F", "Rose"],
|
1458 |
+
["FF00CC", "Purple Pizzazz"],
|
1459 |
+
["FF00FF", "Magenta / Fuchsia"],
|
1460 |
+
["FF2400", "Scarlet"],
|
1461 |
+
["FF3399", "Wild Strawberry"],
|
1462 |
+
["FF33CC", "Razzle Dazzle Rose"],
|
1463 |
+
["FF355E", "Radical Red"],
|
1464 |
+
["FF3F34", "Red Orange"],
|
1465 |
+
["FF4040", "Coral Red"],
|
1466 |
+
["FF4D00", "Vermilion"],
|
1467 |
+
["FF4F00", "International Orange"],
|
1468 |
+
["FF6037", "Outrageous Orange"],
|
1469 |
+
["FF6600", "Blaze Orange"],
|
1470 |
+
["FF66FF", "Pink Flamingo"],
|
1471 |
+
["FF681F", "Orange"],
|
1472 |
+
["FF69B4", "Hot Pink"],
|
1473 |
+
["FF6B53", "Persimmon"],
|
1474 |
+
["FF6FFF", "Blush Pink"],
|
1475 |
+
["FF7034", "Burning Orange"],
|
1476 |
+
["FF7518", "Pumpkin"],
|
1477 |
+
["FF7D07", "Flamenco"],
|
1478 |
+
["FF7F00", "Flush Orange"],
|
1479 |
+
["FF7F50", "Coral"],
|
1480 |
+
["FF8C69", "Salmon"],
|
1481 |
+
["FF9000", "Pizazz"],
|
1482 |
+
#["FF910F", "West Side"],
|
1483 |
+
["FF91A4", "Pink Salmon"],
|
1484 |
+
["FF9933", "Neon Carrot"],
|
1485 |
+
["FF9966", "Atomic Tangerine"],
|
1486 |
+
["FF9980", "Vivid Tangerine"],
|
1487 |
+
["FF9E2C", "Sunshade"],
|
1488 |
+
["FFA000", "Orange Peel"],
|
1489 |
+
["FFA194", "Mona Lisa"],
|
1490 |
+
["FFA500", "Web Orange"],
|
1491 |
+
["FFA6C9", "Carnation Pink"],
|
1492 |
+
["FFAB81", "Hit Pink"],
|
1493 |
+
["FFAE42", "Yellow Orange"],
|
1494 |
+
["FFB0AC", "Cornflower Lilac"],
|
1495 |
+
["FFB1B3", "Sundown"],
|
1496 |
+
#["FFB31F", "My Sin"],
|
1497 |
+
["FFB555", "Texas Rose"],
|
1498 |
+
["FFB7D5", "Cotton Candy"],
|
1499 |
+
["FFB97B", "Macaroni and Cheese"],
|
1500 |
+
["FFBA00", "Selective Yellow"],
|
1501 |
+
["FFBD5F", "Koromiko"],
|
1502 |
+
["FFBF00", "Amber"],
|
1503 |
+
["FFC0A8", "Wax Flower"],
|
1504 |
+
["FFC0CB", "Pink"],
|
1505 |
+
["FFC3C0", "Your Pink"],
|
1506 |
+
["FFC901", "Supernova"],
|
1507 |
+
["FFCBA4", "Flesh"],
|
1508 |
+
["FFCC33", "Sunglow"],
|
1509 |
+
["FFCC5C", "Golden Tainoi"],
|
1510 |
+
["FFCC99", "Peach Orange"],
|
1511 |
+
["FFCD8C", "Chardonnay"],
|
1512 |
+
["FFD1DC", "Pastel Pink"],
|
1513 |
+
["FFD2B7", "Romantic"],
|
1514 |
+
["FFD38C", "Grandis"],
|
1515 |
+
["FFD700", "Gold"],
|
1516 |
+
["FFD800", "School bus Yellow"],
|
1517 |
+
["FFD8D9", "Cosmos"],
|
1518 |
+
["FFDB58", "Mustard"],
|
1519 |
+
["FFDCD6", "Peach Schnapps"],
|
1520 |
+
["FFDDAF", "Caramel"],
|
1521 |
+
["FFDDCD", "Tuft Bush"],
|
1522 |
+
["FFDDCF", "Watusi"],
|
1523 |
+
["FFDDF4", "Pink Lace"],
|
1524 |
+
["FFDEAD", "Navajo White"],
|
1525 |
+
["FFDEB3", "Frangipani"],
|
1526 |
+
["FFE1DF", "Pippin"],
|
1527 |
+
["FFE1F2", "Pale Rose"],
|
1528 |
+
["FFE2C5", "Negroni"],
|
1529 |
+
["FFE5A0", "Cream Brulee"],
|
1530 |
+
["FFE5B4", "Peach"],
|
1531 |
+
["FFE6C7", "Tequila"],
|
1532 |
+
["FFE772", "Kournikova"],
|
1533 |
+
["FFEAC8", "Sandy Beach"],
|
1534 |
+
#["FFEAD4", "Karry"],
|
1535 |
+
["FFEC13", "Broom"],
|
1536 |
+
["FFEDBC", "Colonial White"],
|
1537 |
+
["FFEED8", "Derby"],
|
1538 |
+
#["FFEFA1", "Vis Vis"],
|
1539 |
+
["FFEFC1", "Egg White"],
|
1540 |
+
["FFEFD5", "Papaya Whip"],
|
1541 |
+
["FFEFEC", "Fair Pink"],
|
1542 |
+
["FFF0DB", "Peach Cream"],
|
1543 |
+
["FFF0F5", "Lavender blush"],
|
1544 |
+
#["FFF14F", "Gorse"],
|
1545 |
+
["FFF1B5", "Buttermilk"],
|
1546 |
+
["FFF1D8", "Pink Lady"],
|
1547 |
+
["FFF1EE", "Forget Me Not"],
|
1548 |
+
["FFF1F9", "Tutu"],
|
1549 |
+
#["FFF39D", "Picasso"],
|
1550 |
+
["FFF3F1", "Chardon"],
|
1551 |
+
["FFF46E", "Paris Daisy"],
|
1552 |
+
["FFF4CE", "Barley White"],
|
1553 |
+
#["FFF4DD", "Egg Sour"],
|
1554 |
+
["FFF4E0", "Sazerac"],
|
1555 |
+
#["FFF4E8", "Serenade"],
|
1556 |
+
["FFF4F3", "Chablis"],
|
1557 |
+
["FFF5EE", "Seashell Peach"],
|
1558 |
+
["FFF5F3", "Sauvignon"],
|
1559 |
+
["FFF6D4", "Milk Punch"],
|
1560 |
+
["FFF6DF", "Varden"],
|
1561 |
+
["FFF6F5", "Rose White"],
|
1562 |
+
["FFF8D1", "Baja White"],
|
1563 |
+
["FFF9E2", "Gin Fizz"],
|
1564 |
+
["FFF9E6", "Early Dawn"],
|
1565 |
+
["FFFACD", "Lemon Chiffon"],
|
1566 |
+
["FFFAF4", "Bridal Heath"],
|
1567 |
+
["FFFBDC", "Scotch Mist"],
|
1568 |
+
["FFFBF9", "Soapstone"],
|
1569 |
+
["FFFC99", "Witch Haze"],
|
1570 |
+
["FFFCEA", "Buttery White"],
|
1571 |
+
["FFFCEE", "Island Spice"],
|
1572 |
+
["FFFDD0", "Cream"],
|
1573 |
+
#["FFFDE6", "Chilean Heath"],
|
1574 |
+
["FFFDE8", "Travertine"],
|
1575 |
+
["FFFDF3", "Orchid White"],
|
1576 |
+
["FFFDF4", "Quarter Pearl Lusta"],
|
1577 |
+
["FFFEE1", "Half and Half"],
|
1578 |
+
["FFFEEC", "Apricot White"],
|
1579 |
+
["FFFEF0", "Rice Cake"],
|
1580 |
+
["FFFEF6", "Black White"],
|
1581 |
+
#["FFFEFD", "Romance"],
|
1582 |
+
["FFFF00", "Yellow"],
|
1583 |
+
["FFFF66", "Laser Lemon"],
|
1584 |
+
["FFFF99", "Pale Canary"],
|
1585 |
+
["FFFFB4", "Portafino"],
|
1586 |
+
["FFFFF0", "Ivory"],
|
1587 |
+
["FFFFFF", "White"]
|
1588 |
+
]
|
1589 |
+
|
1590 |
+
|
1591 |
+
#from
|
1592 |
+
# https://sashamaps.net/docs/resources/20-colors/
|
1593 |
+
static_names = [
|
1594 |
+
["800000", "maroon"],
|
1595 |
+
["9A6324", "brown"],
|
1596 |
+
["469990","teal"],
|
1597 |
+
["000075", "navy"],
|
1598 |
+
["000000","black"],
|
1599 |
+
["FF0000", "red"],
|
1600 |
+
["F58231", "orange"],
|
1601 |
+
["FFE119", "yellow"],
|
1602 |
+
["3CB44B", "green"],
|
1603 |
+
["42D4F4", "cyan"],
|
1604 |
+
["4363D8", "blue"],
|
1605 |
+
["F032E6", "magenta"],
|
1606 |
+
["A9A9A9", "grey"],
|
1607 |
+
["FABED4", "pink"],
|
1608 |
+
["FFFAC8", "beige"],
|
1609 |
+
["AAFFC3", "mint"],
|
1610 |
+
["DCBEFF", "lavender"],
|
1611 |
+
["FFFFFF", "white"],
|
1612 |
+
]
|
1613 |
+
|
1614 |
+
# adopted from: Farbtastic 1.2
|
1615 |
+
# http://acko.net/dev/farbtastic
|
1616 |
+
# Color is a 7 character string starting with '#'
|
1617 |
+
def rgb(color: str):
|
1618 |
+
return [int(f'0x{color[1:3]}', 16), int(f'0x{color[3:5]}', 16), int(f'0x{color[5:7]}', 16)]
|
1619 |
+
|
1620 |
+
# adopted from: Farbtastic 1.2
|
1621 |
+
# http://acko.net/dev/farbtastic
|
1622 |
+
# Color is a 7 character string starting with '#'
|
1623 |
+
def hsl(color: str):
|
1624 |
+
rgb = [int(f'0x{color[1:3]}', 16) / 255, int(f'0x{color[3:5]}', 16) / 255, int(f'0x{color[5:7]}', 16) / 255]
|
1625 |
+
r, g, b = rgb[0], rgb[1], rgb[2]
|
1626 |
+
|
1627 |
+
min_value = min(r, min(g, b))
|
1628 |
+
max_value = max(r, max(g, b))
|
1629 |
+
delta = max_value - min_value
|
1630 |
+
l = (min_value + max_value) / 2
|
1631 |
+
|
1632 |
+
s = 0
|
1633 |
+
if 0 < l < 1:
|
1634 |
+
if l < 0.5:
|
1635 |
+
s = delta / (2 * l)
|
1636 |
+
else:
|
1637 |
+
s = delta / (2 - 2 * l)
|
1638 |
+
|
1639 |
+
h = 0
|
1640 |
+
if delta > 0:
|
1641 |
+
|
1642 |
+
if max == r and max != g:
|
1643 |
+
h += (g - b) / delta
|
1644 |
+
if max == g and max != b:
|
1645 |
+
h += (2 + (b - r) / delta)
|
1646 |
+
if max == b and max != r:
|
1647 |
+
h += (4 + (r - g) / delta)
|
1648 |
+
|
1649 |
+
h /= 6
|
1650 |
+
|
1651 |
+
return [(h * 255), (s * 255), (l * 255)]
|
1652 |
+
|
1653 |
+
|
1654 |
+
class Ntc:
|
1655 |
+
|
1656 |
+
def __init__(self):
|
1657 |
+
self.names = []
|
1658 |
+
|
1659 |
+
for i in range(len(static_names)):
|
1660 |
+
color = '#' + static_names[i][0]
|
1661 |
+
rgb_array = rgb(color)
|
1662 |
+
hsl_array = hsl(color)
|
1663 |
+
self.names.append(static_names[i])
|
1664 |
+
self.names[i].extend([rgb_array[0], rgb_array[1], rgb_array[2], hsl_array[0], hsl_array[1], hsl_array[2]])
|
1665 |
+
|
1666 |
+
def name(self, color: str):
|
1667 |
+
|
1668 |
+
color = color.upper()
|
1669 |
+
if len(color) < 3 or len(color) > 7:
|
1670 |
+
return ["#000000", "Invalid Color: " + color, False]
|
1671 |
+
|
1672 |
+
if len(color) % 3 == 0:
|
1673 |
+
color = "#" + color
|
1674 |
+
|
1675 |
+
if len(color) == 4:
|
1676 |
+
color = "#" + color[1] + color[1] + color[2] + color[2] + color[3] + color[3]
|
1677 |
+
|
1678 |
+
rgb_array = rgb(color)
|
1679 |
+
r, g, b = rgb_array[0], rgb_array[1], rgb_array[2]
|
1680 |
+
|
1681 |
+
hsl_array = hsl(color)
|
1682 |
+
h, s, l = hsl_array[0], hsl_array[1], hsl_array[2]
|
1683 |
+
|
1684 |
+
ndf1 = 0
|
1685 |
+
ndf2 = 0
|
1686 |
+
ndf = 0
|
1687 |
+
cl = -1
|
1688 |
+
df = -1
|
1689 |
+
|
1690 |
+
for i in range(len(self.names)):
|
1691 |
+
if color == "#" + self.names[i][0]:
|
1692 |
+
return ["#" + self.names[i][0], self.names[i][1], True]
|
1693 |
+
|
1694 |
+
ndf1 = math.pow(r - self.names[i][2], 2) + math.pow(g - self.names[i][3], 2) + math.pow(
|
1695 |
+
b - self.names[i][4], 2)
|
1696 |
+
ndf2 = math.pow(h - self.names[i][5], 2) + math.pow(s - self.names[i][6], 2) + math.pow(
|
1697 |
+
l - self.names[i][7], 2)
|
1698 |
+
ndf = ndf1 + ndf2 * 2
|
1699 |
+
|
1700 |
+
if df < 0 or df > ndf:
|
1701 |
+
df = ndf
|
1702 |
+
cl = i
|
1703 |
+
|
1704 |
+
if cl < 0:
|
1705 |
+
return ["#000000", "Invalid Color: " + color, False]
|
1706 |
+
else:
|
1707 |
+
return ["#" + self.names[cl][0], self.names[cl][1], False]
|
1708 |
+
|
1709 |
+
|
1710 |
+
#############################################
|
1711 |
+
|
1712 |
+
|
1713 |
+
# Copyright (c) 2022. Bart Lamiroy (Bart.Lamiroy@univ-reims.fr) and subsequent contributors
|
1714 |
+
# as per git commit history. All rights reserved.
|
1715 |
+
#
|
1716 |
+
# La Muse, Leveraging Artificial Intelligence for Sparking Inspiration
|
1717 |
+
# https://hal.archives-ouvertes.fr/hal-03470467/
|
1718 |
+
#
|
1719 |
+
# This code is licenced under the GNU LESSER GENERAL PUBLIC LICENSE
|
1720 |
+
# Version 3, 29 June 2007
|
1721 |
+
|
1722 |
+
import numpy as np
|
1723 |
+
import cv2
|
1724 |
+
from sklearn.cluster import MiniBatchKMeans
|
1725 |
+
|
1726 |
+
|
1727 |
+
# inspired from https://pyimagesearch.com/2014/07/07/color-quantization-opencv-using-k-means-clustering/
|
1728 |
+
def color_quantify(image: np.array, nb: int) -> np.array:
|
1729 |
+
# grab image width and height
|
1730 |
+
(h, w) = image.shape[:2]
|
1731 |
+
|
1732 |
+
# convert the image from the RGB color space to the L*a*b*
|
1733 |
+
# color space -- since we will be clustering using k-means
|
1734 |
+
# which is based on the euclidean distance, we'll use the
|
1735 |
+
# L*a*b* color space where the euclidean distance implies
|
1736 |
+
# perceptual meaning
|
1737 |
+
image = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
|
1738 |
+
|
1739 |
+
# reshape the image into a feature vector so that k-means
|
1740 |
+
# can be applied
|
1741 |
+
image = image.reshape((image.shape[0] * image.shape[1], 3))
|
1742 |
+
|
1743 |
+
# apply k-means using the specified number of clusters and
|
1744 |
+
# then create the quantized image based on the predictions
|
1745 |
+
clt = MiniBatchKMeans(n_clusters = nb)
|
1746 |
+
labels = clt.fit_predict(image)
|
1747 |
+
quant = clt.cluster_centers_.astype("uint8")[labels]
|
1748 |
+
|
1749 |
+
# reshape the feature vectors to images
|
1750 |
+
quant = quant.reshape((h, w, 3))
|
1751 |
+
quant = cv2.cvtColor(quant, cv2.COLOR_LAB2BGR)
|
1752 |
+
|
1753 |
+
return quant
|
1754 |
+
|
1755 |
+
# code adapted from https://stackoverflow.com/questions/50899692/most-dominant-color-in-rgb-image-opencv-numpy-python
|
1756 |
+
def bincount_app(a: np.array, nb: int):
|
1757 |
+
# Not reducing image colours to three significant bits per channel since image supposedly already
|
1758 |
+
# reduced.
|
1759 |
+
#a = a & int("11100000", 2)
|
1760 |
+
#cv2.imwrite("final_image.jpg",a)
|
1761 |
+
|
1762 |
+
a2D = a.reshape(-1,a.shape[-1])
|
1763 |
+
|
1764 |
+
col_range = (256, 256, 256) # generically : a2D.max(0)+1
|
1765 |
+
a1D = np.ravel_multi_index(a2D.T, col_range)
|
1766 |
+
|
1767 |
+
#return np.unravel_index(np.bincount(a1D).argmax(), col_range)
|
1768 |
+
return np.unravel_index(np.bincount(a1D).argpartition(-nb)[-nb:], col_range)
|
1769 |
+
|
1770 |
+
def int_array_to_hex_string(a: list) -> str:
|
1771 |
+
str_list = [ "{0:#0{1}x}".format(i,4)[2:] for i in a]
|
1772 |
+
return '#'+''.join(str_list)
|
1773 |
+
|
1774 |
+
|
1775 |
+
def get_color_names(image: np.array, nb_colors: int = 5):
|
1776 |
+
test_image = color_quantify(image, nb_colors)
|
1777 |
+
main_colors = [int_array_to_hex_string(i) for i in zip(*bincount_app(test_image, nb_colors))]
|
1778 |
+
naming = Ntc()
|
1779 |
+
main_color_names = [ naming.name(i)[1] for i in main_colors]
|
1780 |
+
|
1781 |
+
return main_color_names
|
1782 |
+
|
1783 |
+
cached_colors_dict = {} # to avoid recomputing
|
1784 |
+
|
1785 |
+
def get_colors(filepath, nb_colors: int = 5):
|
1786 |
+
colors = cached_colors_dict.get(filepath)
|
1787 |
+
if colors is None:
|
1788 |
+
colors = get_color_names(
|
1789 |
+
np.array(Image.open(filepath).resize((600,600) )),
|
1790 |
+
nb_colors
|
1791 |
+
)
|
1792 |
+
cached_colors_dict[filepath] = colors
|
1793 |
+
|
1794 |
+
return colors
|
1795 |
+
|
1796 |
+
def get_checkpoint_path(output_path):
|
1797 |
+
#checkpoint_path = "checkpoint" + os.path.basename(output_path)
|
1798 |
+
#checkpoint_path = os.path.join( os.path.dirname(output_path), checkpoint_path)
|
1799 |
+
#return checkpoint_path
|
1800 |
+
return output_path
|
1801 |
+
|
1802 |
+
def load_checkpoint(checkpoint_path):
|
1803 |
+
try:
|
1804 |
+
print("reading checkpoint at ", checkpoint_path)
|
1805 |
+
df = pd.read_csv(checkpoint_path)
|
1806 |
+
|
1807 |
+
cached_colors = {
|
1808 |
+
row['image_file']: row['colors']
|
1809 |
+
for _, row in df.iterrows()
|
1810 |
+
}
|
1811 |
+
print("Checkpoint loaded succesfully to cache")
|
1812 |
+
return cached_colors
|
1813 |
+
except:
|
1814 |
+
print("Checkpoint was not loaded")
|
1815 |
+
return cached_colors_dict
|
1816 |
+
|
1817 |
+
def save_checkpoint(checkpoint_path,df, color_list):
|
1818 |
+
output_df = df.copy()
|
1819 |
+
output_df['colors'] = color_list
|
1820 |
+
output_df.to_csv(checkpoint_path,
|
1821 |
+
index= False, # don't write a new 'Index' column
|
1822 |
+
)
|
1823 |
+
print("Saved checkpoint!")
|
1824 |
+
|
1825 |
+
|
1826 |
+
|
1827 |
+
########################################
|
1828 |
+
# get_color_names(numpy.array(PIL.Image.open(painting) ) )
|
1829 |
+
|
1830 |
+
########################################
|
1831 |
+
from PIL import Image
|
1832 |
+
from tqdm import tqdm
|
1833 |
+
|
1834 |
+
|
1835 |
+
#input_csv_directory = "/home/lvasquezreina/supproj/repo/M1-supervised_project/ARTEMIS/custom_scripts/emo_caption_custom_images/outputs/custom_captions.csv"
|
1836 |
+
|
1837 |
+
import pandas as pd
|
1838 |
+
import os
|
1839 |
+
|
1840 |
+
import argparse
|
1841 |
+
|
1842 |
+
if __name__ == "__main__":
|
1843 |
+
|
1844 |
+
parser = argparse.ArgumentParser(prog="ColorDetectionLaMuse",
|
1845 |
+
description='Detects the top 5 main colors per image in an image list')
|
1846 |
+
|
1847 |
+
parser.add_argument("--input_file", "-in", metavar='in', type=str, nargs=1,
|
1848 |
+
help='input file containing images-paths for color detection.',
|
1849 |
+
#default=[default_painting_folder]
|
1850 |
+
)
|
1851 |
+
parser.add_argument("--output_file", "-out", metavar='out', type=str, nargs=1,
|
1852 |
+
help='output file containing images-paths + detected colors'
|
1853 |
+
#default=[default_interpretation_folder]
|
1854 |
+
)
|
1855 |
+
args = parser.parse_args()
|
1856 |
+
input_csv_file = args.input_file[0]
|
1857 |
+
output_csv_file = args.output_file[0]
|
1858 |
+
|
1859 |
+
checkpoint_path = get_checkpoint_path(output_csv_file)
|
1860 |
+
cached_colors_dict = load_checkpoint(checkpoint_path)
|
1861 |
+
|
1862 |
+
|
1863 |
+
df = pd.read_csv(input_csv_file)
|
1864 |
+
filepath_column = 'image_file'
|
1865 |
+
|
1866 |
+
colors_list = []
|
1867 |
+
processed_files = set(cached_colors_dict.keys())
|
1868 |
+
|
1869 |
+
iterable_list = list(enumerate( df[filepath_column]))
|
1870 |
+
for elem in tqdm(iterable_list):
|
1871 |
+
|
1872 |
+
idx = elem[0]
|
1873 |
+
filepath = elem[1]
|
1874 |
+
|
1875 |
+
#save checkpoint every 50 files
|
1876 |
+
if (not (len(processed_files) % 49)
|
1877 |
+
):
|
1878 |
+
|
1879 |
+
print(f"Images processed: {len(processed_files)}")
|
1880 |
+
save_checkpoint(checkpoint_path, df.iloc[:idx], colors_list)
|
1881 |
+
|
1882 |
+
|
1883 |
+
|
1884 |
+
colors = get_colors(filepath)
|
1885 |
+
colors_list.append(colors)
|
1886 |
+
processed_files.add(filepath)
|
1887 |
+
|
1888 |
+
output_df = df.copy()
|
1889 |
+
#output_df['filepath'] = df['image_file']
|
1890 |
+
output_df['colors'] = colors_list
|
1891 |
+
|
1892 |
+
output_file = os.path.join("detected_colors.csv")
|
1893 |
+
|
1894 |
+
output_df.to_csv(output_csv_file,
|
1895 |
+
index= False, # don't write a new 'Index' column
|
1896 |
+
)
|
1897 |
+
|
imageprocessing/emotion_detection.py
ADDED
@@ -0,0 +1,248 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
|
3 |
+
# emotion detection with artemis
|
4 |
+
# given a CSV with image filepaths in a column 'image_file',
|
5 |
+
# append a column 'grounding_emotion' and a column 'emotions' with the detected emotion.
|
6 |
+
# 'emotions' contains detected the emotions ordered by descending probability.
|
7 |
+
# 'grounding_emotion' contains the main emotion (the most probable one)
|
8 |
+
|
9 |
+
import pandas as pd
|
10 |
+
import numpy as np
|
11 |
+
from PIL import Image
|
12 |
+
import torch
|
13 |
+
from tqdm import tqdm
|
14 |
+
|
15 |
+
|
16 |
+
#### checkpoints
|
17 |
+
def save_checkpoint(checkpoint_path,df, grounding_emo_list, emotions_list):
|
18 |
+
output_df = df.copy()
|
19 |
+
output_df['grounding_emotion'] = grounding_emo_list
|
20 |
+
output_df['emotions'] = emotions_list
|
21 |
+
output_df.to_csv(checkpoint_path,
|
22 |
+
index= False, # don't write a new 'Index' column
|
23 |
+
)
|
24 |
+
print("Saved checkpoint!")
|
25 |
+
|
26 |
+
def load_checkpoint_grounding_emotion(checkpoint_path):
|
27 |
+
try:
|
28 |
+
print("reading checkpoint at ", checkpoint_path)
|
29 |
+
df = pd.read_csv(checkpoint_path)
|
30 |
+
|
31 |
+
cached_grounding_emotion= {
|
32 |
+
row['image_file']: row['grounding_emotion']
|
33 |
+
for _, row in df.iterrows()
|
34 |
+
}
|
35 |
+
print(f"Checkpoint loaded succesfully to cache: {len(cached_grounding_emotion)} processed files")
|
36 |
+
return cached_grounding_emotion
|
37 |
+
except:
|
38 |
+
print("Checkpoint was not loaded")
|
39 |
+
return cached_grounding_emotion_dict
|
40 |
+
|
41 |
+
def load_checkpoint_emotions(checkpoint_path):
|
42 |
+
try:
|
43 |
+
print("reading checkpoint at ", checkpoint_path)
|
44 |
+
df = pd.read_csv(checkpoint_path)
|
45 |
+
|
46 |
+
cached_emotions= {
|
47 |
+
row['image_file']: row['emotions']
|
48 |
+
for _, row in df.iterrows()
|
49 |
+
}
|
50 |
+
print(f"Checkpoint loaded succesfully to cache: {len(cached_emotions)} processed files")
|
51 |
+
return cached_emotions
|
52 |
+
except:
|
53 |
+
print("Checkpoint was not loaded")
|
54 |
+
return cached_emotions_dict
|
55 |
+
|
56 |
+
def get_checkpoint_path(output_path):
|
57 |
+
#checkpoint_path = "checkpoint" + os.path.basename(output_path)
|
58 |
+
#checkpoint_path = os.path.join( os.path.dirname(output_path), checkpoint_path)
|
59 |
+
#return checkpoint_path
|
60 |
+
return output_path
|
61 |
+
|
62 |
+
|
63 |
+
|
64 |
+
cached_grounding_emotion_dict = {} # to avoid recomputing
|
65 |
+
cached_emotions_dict = {} # to avoid recomputing
|
66 |
+
|
67 |
+
def get_all_emotions(filepath, model, cached_grounding_emotion_dict, cached_emotions_dict):
|
68 |
+
emotions = cached_emotions_dict.get(filepath)
|
69 |
+
grounding_emotion = cached_grounding_emotion_dict.get(filepath)
|
70 |
+
if emotions is None:
|
71 |
+
grounding_emotion, emotions = get_all_emotions_in_image(filepath, model)
|
72 |
+
cached_grounding_emotion_dict[filepath] = grounding_emotion
|
73 |
+
cached_emotions_dict[filepath] = emotions
|
74 |
+
return grounding_emotion, emotions
|
75 |
+
|
76 |
+
def get_all_emotions_in_image(filepath, model):
|
77 |
+
with Image.open(filepath).convert('RGB') as img:
|
78 |
+
|
79 |
+
img = transformation(img).unsqueeze(0)# unsqueeze to add artificial first dimension
|
80 |
+
|
81 |
+
# emotion detection
|
82 |
+
emotion_vector = model(img) # apply the model
|
83 |
+
emotion_vector = np.exp(emotion_vector.detach().numpy()) # calculate probabilities
|
84 |
+
sorted_indices = (-emotion_vector).argsort()[0] # sort from most to least likely
|
85 |
+
emotions = [(IDX_TO_EMOTION[ind], emotion_vector[0][ind]) for ind in sorted_indices]
|
86 |
+
#construct the csv line
|
87 |
+
#emotions_df['image_file'].append(filename)
|
88 |
+
grounding_emotion = emotions[0][0]
|
89 |
+
|
90 |
+
return grounding_emotion, emotions
|
91 |
+
|
92 |
+
|
93 |
+
|
94 |
+
|
95 |
+
################### utilities
|
96 |
+
|
97 |
+
#### Artemis emotions:
|
98 |
+
ARTEMIS_EMOTIONS = ['amusement', 'awe', 'contentment', 'excitement',
|
99 |
+
'anger', 'disgust', 'fear', 'sadness', 'something else']
|
100 |
+
EMOTION_TO_IDX = {e: i for i, e in enumerate(ARTEMIS_EMOTIONS)}
|
101 |
+
IDX_TO_EMOTION = {EMOTION_TO_IDX[e]: e for e in EMOTION_TO_IDX}
|
102 |
+
|
103 |
+
|
104 |
+
### Artemis image preprocessing
|
105 |
+
|
106 |
+
#from artemis.in_out.neural_net_oriented import image_transformation
|
107 |
+
import torchvision.transforms as transforms
|
108 |
+
image_net_mean = [0.485, 0.456, 0.406]
|
109 |
+
image_net_std = [0.229, 0.224, 0.225]
|
110 |
+
|
111 |
+
def image_transformation(img_dim, lanczos=True):
|
112 |
+
"""simple transformation/pre-processing of image data."""
|
113 |
+
|
114 |
+
if lanczos:
|
115 |
+
resample_method = Image.LANCZOS
|
116 |
+
else:
|
117 |
+
resample_method = Image.BILINEAR
|
118 |
+
|
119 |
+
normalize = transforms.Normalize(mean=image_net_mean, std=image_net_std)
|
120 |
+
img_transforms = dict()
|
121 |
+
img_transforms['train'] = transforms.Compose([transforms.Resize((img_dim, img_dim), resample_method),
|
122 |
+
transforms.ToTensor(),
|
123 |
+
normalize])
|
124 |
+
|
125 |
+
# Use same transformations as in train (since no data-augmentation is applied in train)
|
126 |
+
img_transforms['test'] = img_transforms['train']
|
127 |
+
img_transforms['val'] = img_transforms['train']
|
128 |
+
img_transforms['rest'] = img_transforms['train']
|
129 |
+
return img_transforms
|
130 |
+
|
131 |
+
transformation = image_transformation(255)['train']
|
132 |
+
|
133 |
+
### Artemis load model
|
134 |
+
|
135 |
+
#from artemis.in_out.neural_net_oriented import torch_load_model
|
136 |
+
import warnings
|
137 |
+
def torch_load_model(checkpoint_file, map_location=None):
|
138 |
+
""" Wrap torch.load to catch standard warning of not finding the nested implementations.
|
139 |
+
:param checkpoint_file:
|
140 |
+
:param map_location:
|
141 |
+
:return:
|
142 |
+
"""
|
143 |
+
with warnings.catch_warnings():
|
144 |
+
warnings.simplefilter("ignore")
|
145 |
+
model = torch.load(checkpoint_file, map_location=map_location)
|
146 |
+
return model
|
147 |
+
|
148 |
+
|
149 |
+
|
150 |
+
########
|
151 |
+
|
152 |
+
|
153 |
+
######### performing emotion detection
|
154 |
+
|
155 |
+
def artemis_emotions_detection(input_file, output_file):
|
156 |
+
checkpoint_path = get_checkpoint_path(output_file)
|
157 |
+
cached_grounding_emotion_dict = load_checkpoint_grounding_emotion(checkpoint_path)
|
158 |
+
cached_emotions_dict = load_checkpoint_emotions(checkpoint_path)
|
159 |
+
|
160 |
+
#load the model
|
161 |
+
# device = torch.device("cuda:" + str(0) if torch.cuda.is_available() else "cpu") # it is not working with gpus, only cpu :/
|
162 |
+
device =torch.device("cpu")
|
163 |
+
model = torch_load_model(img2emo_model_path, map_location=device)
|
164 |
+
|
165 |
+
recognized_grounding_emotion_per_image = []
|
166 |
+
recognized_emotions_per_image = []
|
167 |
+
processed_files = set(cached_emotions_dict.keys())
|
168 |
+
|
169 |
+
df = pd.read_csv(input_file)
|
170 |
+
|
171 |
+
iterable_list = list(enumerate( df['image_file']))
|
172 |
+
|
173 |
+
for elem in tqdm(iterable_list):
|
174 |
+
idx = elem[0]
|
175 |
+
filepath = elem[1]
|
176 |
+
|
177 |
+
#save checkpoint every 50 files
|
178 |
+
if (not (len(processed_files) % 49)
|
179 |
+
):
|
180 |
+
print(f"Images processed: {len(processed_files)}")
|
181 |
+
save_checkpoint(
|
182 |
+
checkpoint_path,
|
183 |
+
df.iloc[:idx],
|
184 |
+
recognized_grounding_emotion_per_image,
|
185 |
+
recognized_emotions_per_image
|
186 |
+
)
|
187 |
+
|
188 |
+
grounding_emotion, emotions = get_all_emotions(
|
189 |
+
filepath,
|
190 |
+
model,
|
191 |
+
cached_grounding_emotion_dict,
|
192 |
+
cached_emotions_dict
|
193 |
+
)
|
194 |
+
|
195 |
+
recognized_grounding_emotion_per_image.append(grounding_emotion)
|
196 |
+
recognized_emotions_per_image.append(emotions)
|
197 |
+
processed_files.add(filepath)
|
198 |
+
|
199 |
+
recognized_grounding_emotion_per_image = pd.Series(recognized_grounding_emotion_per_image)
|
200 |
+
recognized_emotions_per_image = pd.Series(recognized_emotions_per_image)
|
201 |
+
|
202 |
+
return recognized_grounding_emotion_per_image, recognized_emotions_per_image
|
203 |
+
|
204 |
+
|
205 |
+
import argparse
|
206 |
+
|
207 |
+
|
208 |
+
|
209 |
+
if __name__ == "__main__":
|
210 |
+
|
211 |
+
parser = argparse.ArgumentParser(prog="Artemis emotion detection",
|
212 |
+
description='Recognizes the emotions per image in an image list')
|
213 |
+
|
214 |
+
parser.add_argument("--input_file", "-in", metavar='in', type=str, nargs=1,
|
215 |
+
help='input file containing images-paths for emotion detection.',
|
216 |
+
#default=[default_painting_folder]
|
217 |
+
)
|
218 |
+
parser.add_argument("--output_file", "-out", metavar='out', type=str, nargs=1,
|
219 |
+
help='output file containing images-paths + grounding (main) emotion + ranked emotions'
|
220 |
+
#default=[default_interpretation_folder]
|
221 |
+
)
|
222 |
+
parser.add_argument("--model_path", "-mp", metavar='mp', type=str, nargs=1,
|
223 |
+
help='artemis img2emo model path'
|
224 |
+
#default=[default_interpretation_folder]
|
225 |
+
)
|
226 |
+
|
227 |
+
args = parser.parse_args()
|
228 |
+
input_csv_file = args.input_file[0]
|
229 |
+
output_csv_file = args.output_file[0]
|
230 |
+
|
231 |
+
#where is the image to emotion classifier?
|
232 |
+
img2emo_model_path = args.model_path[0]
|
233 |
+
|
234 |
+
print(">>> input file: " , input_csv_file)
|
235 |
+
print(">>> output file: ", output_csv_file)
|
236 |
+
print(">>> img to emotion model path: ", img2emo_model_path)
|
237 |
+
|
238 |
+
# perform object recognition
|
239 |
+
recognized_grounding_emotion_per_image, recognized_emotions_per_image = artemis_emotions_detection(input_csv_file, output_csv_file)
|
240 |
+
|
241 |
+
# add a column with the recognized objects
|
242 |
+
output_df = pd.read_csv(input_csv_file)
|
243 |
+
output_df['grounding_emotion'] = recognized_grounding_emotion_per_image
|
244 |
+
output_df['emotions'] = recognized_emotions_per_image
|
245 |
+
|
246 |
+
output_df.to_csv(output_csv_file,
|
247 |
+
index= False, # don't write a new 'Index' column
|
248 |
+
)
|
imageprocessing/img2emo.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:ef75eeb5150b2c68e435848a3501d74f7420afe89aed11b23b7e0fc77045a07a
|
3 |
+
size 85505075
|