milorable's picture
Create app.py
c3e5542 verified
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()