clicker-clicker2/analyze_key_images.py
2025-03-30 15:16:32 -04:00

81 lines
2.5 KiB
Python

#!/usr/bin/env python3
from PIL import Image
import numpy as np
from collections import Counter
import colorsys
def rgb_to_hex(rgb):
return '#{:02x}{:02x}{:02x}'.format(rgb[0], rgb[1], rgb[2])
def get_dominant_colors(image_path, num_colors=8):
try:
# Open image and convert to RGB
img = Image.open(image_path).convert('RGB')
# Resize image to make processing faster
img = img.resize((150, 150))
# Get colors
pixels = np.array(img)
pixels = pixels.reshape(-1, 3)
# Count most common colors
count = Counter(map(tuple, pixels))
most_common = count.most_common(num_colors)
# Convert to hex
return [rgb_to_hex(color) for color, count in most_common]
except Exception as e:
print(f"Error processing {image_path}: {e}")
return []
# List of key images to analyze
key_images = [
"/home/billy/code/viber/src/assets/logo.png",
"/home/billy/code/viber/src/assets/mouse.png",
"/home/billy/code/viber/src/assets/keyboard.png",
"/home/billy/code/viber/src/assets/monitor.png",
"/home/billy/code/viber/src/assets/data center.png",
"/home/billy/code/viber/src/assets/galaxy.png"
]
print("Key Image Analysis:\n")
for image_path in key_images:
image_name = image_path.split("/")[-1]
colors = get_dominant_colors(image_path)
print(f"{image_name}:")
for color in colors:
# Convert to RGB for displaying color names
h = color.lstrip('#')
r, g, b = tuple(int(h[i:i+2], 16) for i in (0, 2, 4))
h, s, v = colorsys.rgb_to_hsv(r/255, g/255, b/255)
# Determine color category
category = "unknown"
if s < 0.15:
if v < 0.15:
category = "black"
elif v > 0.85:
category = "white"
else:
category = "gray"
else:
if h < 0.05 or h > 0.95:
category = "red"
elif 0.05 <= h < 0.15:
category = "orange"
elif 0.15 <= h < 0.25:
category = "yellow"
elif 0.25 <= h < 0.5:
category = "green"
elif 0.5 <= h < 0.65:
category = "cyan"
elif 0.65 <= h < 0.75:
category = "blue"
elif 0.75 <= h < 0.95:
category = "purple"
print(f" {color} - {category} (HSV: {h*360:.1f}, {s*100:.1f}%, {v*100:.1f}%)")
print("")