CoolFace
Apppublic

guyshilo12/painting-style-recommender

sourceHugging Facemitupdated 9mo agoView on Hugging Face
0likes
App README

๐ŸŽจ Painting Recommender (Embeddings + Similarity)

A visual recommendation system that suggests the Top-3 most similar paintings from a dataset, based on CLIP image embeddings and cosine similarity.


โœ… Live Demo

Upload a painting image and click Recommend Top-3 to get similar artworks.


๐Ÿ“ฆ Dataset

Dataset: keremberke/painting-style-classification (Hugging Face) Modality: Images (paintings) Total size: 6,417 images

  • โ€”Train: 4,493
  • โ€”Validation: 1,295
  • โ€”Test: 629

Labels: 27 painting styles (e.g., Cubism, Impressionism, Baroque, Fauvism, etc.) Image format: RGB Resolution (most images): 416ร—416

Why this dataset?

The dataset includes diverse artistic styles with clear visual differences in color palettes, composition, and abstraction levels โ€” ideal for embedding-based similarity and clustering.


๐Ÿ”Ž Exploratory Data Analysis (EDA)

Basic sanity checks and statistics were performed:

  • โ€”dataset split distribution
  • โ€”number of styles (labels)
  • โ€”label distribution (imbalanced but acceptable for similarity-based recommendation)
  • โ€”visual samples across styles

๐Ÿง  Embeddings

Model: openai/clip-vit-base-patch32 (Hugging Face Transformers) Embedding size: 512-dim vectors

Why CLIP?

CLIP captures high-level visual semantics (style, composition, color patterns), making it suitable for similarity search and recommendation in visual domains.

Embeddings are L2-normalized, so cosine similarity can be computed efficiently using dot product.


๐Ÿงฉ Embeddings Analysis: Dimensionality Reduction + Clustering

To analyze the embedding space we used a balanced subset (up to ~100 images per style) to stay computationally efficient while preserving structure.

Dimensionality reduction: PCA โ†’ UMAP (2D visualization) Clustering: K-Means (k=10)

Cluster interpretation

Clusters are generally coherent and group paintings by shared visual properties such as:

  • โ€”abstraction level (abstract/cubist vs. classical)
  • โ€”dominant color palettes
  • โ€”composition/geometry
  • โ€”texture/brushstroke patterns

Importantly, clusters do not perfectly replicate labels โ€” which is expected and desirable for a similarity-based recommender.


๐ŸŽฏ Recommendation Method

Input

  • โ€”Image Upload (user provides an image)

Output

  • โ€”Top-3 recommended paintings from the dataset

Steps

  1. 1.Convert user image โ†’ CLIP embedding
  2. 2.Compute cosine similarity against stored dataset embeddings
  3. 3.Retrieve the Top-3 highest similarity scores and return corresponding paintings

Example output includes similarity scores such as:

  • โ€”Style: Cubism | Similarity: 0.847
  • โ€”Style: Fauvism | Similarity: 0.834
  • โ€”Style: Cubism | Similarity: 0.833

๐Ÿ’พ Files in this Repo

  • โ€”app.py โ€“ Gradio application
  • โ€”requirements.txt โ€“ dependencies
  • โ€”painting_embeddings.parquet โ€“ saved embeddings for recommendation

๐ŸŽฅ Presentation Video

A 3โ€“5 minute presentation demonstrating:

  • โ€”the working application
  • โ€”dataset overview
  • โ€”embeddings and clustering analysis
  • โ€”recommendation logic

๐Ÿ“Ž Video link: https://drive.google.com/file/d/1TJnNUZmeUHltg9FOC5y1BRXugQL1Fbqi/view?usp=sharing


๐Ÿ““ Development Notebook

The full development process of the project is documented in the following Jupyter Notebook, including:

  • โ€”dataset loading and exploratory data analysis (EDA)
  • โ€”image embedding generation
  • โ€”dimensionality reduction and clustering
  • โ€”recommendation logic implementation

๐Ÿ“Ž Notebook link: https://huggingface.co/spaces/guyshilo12/painting-style-recommender/resolve/main/CopyofAssignment3Embeddings%2CRecSys%2CSpaces.ipynb