|
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,n_cluster ): |
|
modified_image = preprocess(img) |
|
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", gr.inputs.Slider(minimum=2, maximum=10, step=1, label="Number of claster")], outputs="plot") |
|
color_picker.launch() |