Spaces:
Sleeping
Sleeping
import torch | |
import cv2 | |
from PIL import Image | |
import numpy as np | |
import matplotlib.pyplot as plt | |
from transformers import pipeline | |
import gradio as gr | |
from sklearn.cluster import KMeans | |
# Emotion detection pipeline for text (if any text is included in assets) | |
emotion_classifier = pipeline("text-classification", model="j-hartmann/emotion-english-distilroberta-base", return_all_scores=True) | |
# Function to analyze colors in an image | |
def analyze_colors(image): | |
# Convert image to RGB | |
image = image.convert("RGB") | |
# Resize image for faster processing | |
image = image.resize((150, 150)) | |
# Convert to numpy array | |
img_array = np.array(image) | |
# Reshape image to be a list of pixels | |
pixels = img_array.reshape((-1, 3)) | |
# Use KMeans to find the dominant colors | |
kmeans = KMeans(n_clusters=5) | |
kmeans.fit(pixels) | |
dominant_colors = kmeans.cluster_centers_ | |
# Plot the colors for visualization | |
plt.figure(figsize=(8, 6)) | |
plt.imshow([dominant_colors.astype(int)]) | |
plt.axis('off') | |
plt.show() | |
return dominant_colors | |
# Function to detect emotions from colors (simplified emotion-color mapping) | |
def color_emotion_analysis(dominant_colors): | |
# Map certain color ranges to emotions | |
emotions = [] | |
for color in dominant_colors: | |
# Simple logic: darker tones could indicate sadness | |
if np.mean(color) < 85: | |
emotions.append("Sadness") | |
elif np.mean(color) > 170: | |
emotions.append("Happiness") | |
else: | |
emotions.append("Neutral") | |
return emotions | |
# Function to analyze patterns and shapes using OpenCV | |
def analyze_patterns(image): | |
# Convert to grayscale for edge detection | |
gray_image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2GRAY) | |
edges = cv2.Canny(gray_image, 100, 200) | |
# Calculate the number of edges (chaos metric) | |
num_edges = np.sum(edges > 0) | |
if num_edges > 10000: # Arbitrary threshold for "chaos" | |
return "Chaotic patterns - possibly distress" | |
else: | |
return "Orderly patterns - possibly calm" | |
# Main function to process image and analyze emotional expression | |
def analyze_emotion_from_image(image): | |
# Analyze colors | |
dominant_colors = analyze_colors(image) | |
color_emotions = color_emotion_analysis(dominant_colors) | |
# Analyze patterns | |
pattern_analysis = analyze_patterns(image) | |
return f"Color-based emotions: {color_emotions}\nPattern analysis: {pattern_analysis}" | |
# Gradio interface to upload image files and perform analysis | |
iface = gr.Interface(fn=analyze_emotion_from_image, inputs="image", outputs="text") | |
# Launch the interface | |
if __name__ == "__main__": | |
iface.launch() | |