|
|
from flask import Flask, request, jsonify |
|
|
from PIL import Image |
|
|
import requests |
|
|
from io import BytesIO |
|
|
from sklearn.cluster import KMeans |
|
|
import numpy as np |
|
|
|
|
|
|
|
|
app = Flask(__name__) |
|
|
|
|
|
def extract_dominant_color(image_url): |
|
|
try: |
|
|
response = requests.get(image_url) |
|
|
|
|
|
img = Image.open(BytesIO(response.content)).convert('RGB') |
|
|
img = img.resize((100, 100)) |
|
|
pixels = np.array(img).reshape(-1, 3) |
|
|
|
|
|
kmeans = KMeans(n_clusters=1, random_state=0).fit(pixels) |
|
|
dominant_color = kmeans.cluster_centers_[0].astype(int) |
|
|
hex_color = '#{:02x}{:02x}{:02x}'.format(*dominant_color) |
|
|
|
|
|
return hex_color |
|
|
except Exception as e: |
|
|
return str(e) |
|
|
|
|
|
@app.route('/') |
|
|
def index(): |
|
|
return jsonify({ |
|
|
"message": "Use /color?img=https://your-image.jpg to get dominant color." |
|
|
}) |
|
|
|
|
|
@app.route('/color') |
|
|
def get_color(): |
|
|
image_url = request.args.get('img') |
|
|
if not image_url: |
|
|
return jsonify({'error': 'Missing image URL ?img=xxx'}), 400 |
|
|
|
|
|
hex_color = extract_dominant_color(image_url) |
|
|
|
|
|
if hex_color.startswith('#'): |
|
|
return jsonify({'RGB': hex_color}) |
|
|
else: |
|
|
return jsonify({'error': 'Failed to extract color', 'detail': hex_color}), 500 |
|
|
|
|
|
if __name__ == '__main__': |
|
|
app.run(host='0.0.0.0', port=7860) |
|
|
|