| import gradio as gr | |
| from collections import Counter | |
| from sklearn.cluster import KMeans | |
| from matplotlib import colors | |
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| import cv2 | |
| def rgb_to_hex(rgb_color): | |
| hex_color = "#" | |
| for i in rgb_color: | |
| hex_color += ("{:02x}".format(int(i))) | |
| return hex_color | |
| def preprocess(raw): | |
| image = cv2.resize(raw, (900, 600), interpolation = cv2.INTER_AREA) | |
| image = image.reshape(image.shape[0]*image.shape[1], 3) | |
| return image | |
| def analyze(img): | |
| modified_image = preprocess(img) | |
| n_cluster = gr.inputs.Slider(minimum=2, maximum=10, step=1, label="Number of claster") | |
| clf = KMeans(n_clusters = n_cluster) | |
| color_labels = clf.fit_predict(modified_image) | |
| center_colors = clf.cluster_centers_ | |
| counts = Counter(color_labels) | |
| ordered_colors = [center_colors[i] for i in counts.keys()] | |
| hex_colors = [rgb_to_hex(ordered_colors[i]) for i in counts.keys()] | |
| plot = plt.figure(figsize = (12, 8)) | |
| plt.pie(counts.values(), labels = hex_colors, autopct='%1.1f%%', colors = hex_colors) | |
| plt.savefig("color_classifier_pie.png") | |
| print(str(n_cluster) + " the most dominant colors:\n") | |
| for color in hex_colors: | |
| print(color) | |
| return plot | |
| color_picker = gr.Interface(fn=analyze, inputs="image", outputs="plot") | |
| color_picker.launch() |