Spaces:
Sleeping
Sleeping
import streamlit as st | |
import numpy as np | |
import cv2 | |
import matplotlib.pyplot as plt | |
from sklearn.cluster import KMeans | |
from io import BytesIO | |
# Title and description | |
st.title("π¨ Automatic Color Palette Generator") | |
st.write("Upload an image to extract its dominant colors.") | |
# File uploader for user to upload an image | |
uploaded_file = st.file_uploader("Choose an image", type=["jpg", "png", "jpeg"]) | |
if uploaded_file: | |
# Read and display the image | |
file_bytes = np.asarray(bytearray(uploaded_file.read()), dtype=np.uint8) | |
image = cv2.imdecode(file_bytes, cv2.IMREAD_COLOR) | |
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) | |
st.image(image, caption="Uploaded Image", use_container_width=True) | |
# User selects the number of colors to extract | |
num_colors = st.slider("Select number of colors", min_value=3, max_value=10, value=5) | |
if st.button("Extract Colors"): | |
# Reshape the image into a 2D array of pixels | |
image_reshape = image.reshape((-1, 3)) | |
# Apply K-Means clustering to find dominant colors | |
kmeans = KMeans(n_clusters=num_colors, random_state=42, n_init=10) | |
kmeans.fit(image_reshape) | |
colors = kmeans.cluster_centers_.astype(int) | |
# Display extracted colors as a color bar | |
st.subheader("Extracted Colors") | |
fig, ax = plt.subplots(figsize=(num_colors, 1)) | |
ax.imshow([colors / 255]) | |
ax.set_xticks([]) | |
ax.set_yticks([]) | |
st.pyplot(fig) | |
# Convert colors to HEX format and display RGB values | |
hex_colors = ['#{:02x}{:02x}{:02x}'.format(*color) for color in colors] | |
for i, hex_color in enumerate(hex_colors): | |
st.markdown(f"**Color {i+1}:** `{hex_color}` (RGB: {tuple(colors[i])})") | |
# Allow user to download the color palette as a text file | |
if st.button("Download Palette as TXT"): | |
palette_text = "\n".join([f"{hex_color} - RGB{tuple(colors[i])}" for i, hex_color in enumerate(hex_colors)]) | |
b = BytesIO() | |
b.write(palette_text.encode()) | |
b.seek(0) | |
st.download_button("Download Palette", b, file_name="color_palette.txt", mime="text/plain") | |