Spaces:
Sleeping
Sleeping
Change of dataset!
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- app.py +3 -4
- createTiles.py +95 -0
- data/.DS_Store +0 -0
- data/images/0B4B7AAB-C25F-4868-A877-8F5EAFD50BC6-34559-0000043DC6E668A2.JPG +0 -3
- data/images/1ACFF3AB-E48B-440D-BE02-75F784A2E480-51108-000011D4109333F6.JPG +0 -3
- data/images/2F660614-2708-4826-8D34-3F29B1D230E5-28988-000003B80581EEC6.JPG +0 -3
- data/images/84A96A26-EDBD-4AEF-8C2E-D22F4F357963-28988-000003ABF618F84B.JPG +0 -3
- data/images/D696F3D9-DE42-47F0-9B3E-491BB366D7EE-28988-000003ACF0925C0D.JPG +0 -3
- data/images/DSCF1000.JPG +0 -3
- data/images/DSCF1184.JPG +0 -3
- data/tiles/backup_cobalt_bloom.jpg +0 -3
- data/tiles/backup_coral_flower.jpg +0 -3
- data/tiles/backup_coral_red.jpg +0 -3
- data/tiles/backup_eggshell.jpg +0 -3
- data/tiles/backup_fuchsia_flower.jpg +0 -3
- data/tiles/backup_golden_marigold.jpg +0 -3
- data/tiles/backup_honey_bloom.jpg +0 -3
- data/tiles/backup_magenta_bloom.jpg +0 -3
- data/tiles/backup_magenta_flower.jpg +0 -3
- data/tiles/backup_maroon_dahlia.jpg +0 -3
- data/tiles/backup_mint_flower.jpg +0 -3
- data/tiles/backup_navy_flower.jpg +0 -3
- data/tiles/backup_orange_marigold.jpg +0 -3
- data/tiles/backup_peach_bloom.jpg +0 -3
- data/tiles/backup_persimmon.jpg +0 -3
- data/tiles/backup_plum_flower.jpg +0 -3
- data/tiles/backup_sage_green.jpg +0 -3
- data/tiles/backup_snow_white.jpg +0 -3
- data/tiles/backup_teal_flower.jpg +0 -3
- data/tiles/blue_flower.jpg +0 -3
- data/tiles/blush_pink.jpg +0 -3
- data/tiles/bone_white.jpg +0 -3
- data/tiles/buttercup.jpg +0 -3
- data/tiles/canary_bloom.jpg +0 -3
- data/tiles/cerulean.jpg +0 -3
- data/tiles/cherry_bloom.jpg +0 -3
- data/tiles/coral_flower.jpg +0 -3
- data/tiles/coral_red.jpg +0 -3
- data/tiles/cream_flower.jpg +0 -3
- data/tiles/crimson_rose.jpg +0 -3
- data/tiles/dark_flower.jpg +0 -3
- data/tiles/forest_bloom.jpg +0 -3
- data/tiles/fuchsia_flower.jpg +0 -3
- data/tiles/golden_marigold.jpg +0 -3
- data/tiles/green_leaves.jpg +0 -3
- data/tiles/honey_bloom.jpg +0 -3
- data/tiles/hot_pink.jpg +0 -3
- data/tiles/indigo_bloom.jpg +0 -3
- data/tiles/ivory_bloom.jpg +0 -3
- data/tiles/light_flower.jpg +0 -3
app.py
CHANGED
|
@@ -26,10 +26,9 @@ def preprocess_and_mosaic(image: Image.Image, grid_size: int, n_colors: int):
|
|
| 26 |
|
| 27 |
|
| 28 |
cell_size = 400 // grid_size
|
| 29 |
-
actual_grid_size = 400 // cell_size
|
| 30 |
-
actual_image_size = actual_grid_size * cell_size
|
| 31 |
|
| 32 |
-
# Crop the image to match the actual grid dimensions
|
| 33 |
resized_np_cropped = resized_np[:actual_image_size, :actual_image_size]
|
| 34 |
|
| 35 |
grid_labels, seg_time = timed(segment_image_grid)(resized_np_cropped, actual_grid_size, color_centers)
|
|
@@ -82,7 +81,7 @@ with gr.Blocks() as demo:
|
|
| 82 |
with gr.Row():
|
| 83 |
orig_out = gr.Image(label="Resized & Color Quantized (400x400)")
|
| 84 |
seg_out = gr.Image(label="Grid Segmentation Preview")
|
| 85 |
-
mosaic_out = gr.Image(label="
|
| 86 |
info_out = gr.Textbox(label="Metrics & Timing", interactive=False)
|
| 87 |
|
| 88 |
# Add examples using Unsplash URLs
|
|
|
|
| 26 |
|
| 27 |
|
| 28 |
cell_size = 400 // grid_size
|
| 29 |
+
actual_grid_size = 400 // cell_size
|
| 30 |
+
actual_image_size = actual_grid_size * cell_size
|
| 31 |
|
|
|
|
| 32 |
resized_np_cropped = resized_np[:actual_image_size, :actual_image_size]
|
| 33 |
|
| 34 |
grid_labels, seg_time = timed(segment_image_grid)(resized_np_cropped, actual_grid_size, color_centers)
|
|
|
|
| 81 |
with gr.Row():
|
| 82 |
orig_out = gr.Image(label="Resized & Color Quantized (400x400)")
|
| 83 |
seg_out = gr.Image(label="Grid Segmentation Preview")
|
| 84 |
+
mosaic_out = gr.Image(label="Mosaic Result")
|
| 85 |
info_out = gr.Textbox(label="Metrics & Timing", interactive=False)
|
| 86 |
|
| 87 |
# Add examples using Unsplash URLs
|
createTiles.py
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import requests
|
| 3 |
+
import io
|
| 4 |
+
import colorsys
|
| 5 |
+
import random
|
| 6 |
+
from PIL import Image
|
| 7 |
+
from datasets import load_dataset
|
| 8 |
+
|
| 9 |
+
def rgb_to_hsv(rgb):
|
| 10 |
+
"""Convert RGB [0-255] to HSV tuple (h, s, v)."""
|
| 11 |
+
r, g, b = [c / 255.0 for c in rgb]
|
| 12 |
+
return colorsys.rgb_to_hsv(r, g, b) # values in [0,1]
|
| 13 |
+
|
| 14 |
+
def dominant_hue(palettes):
|
| 15 |
+
"""Return dominant hue (0–360) from palettes dict of RGB lists."""
|
| 16 |
+
all_colors = []
|
| 17 |
+
for k, colors in palettes.items():
|
| 18 |
+
all_colors.extend(colors)
|
| 19 |
+
if not all_colors:
|
| 20 |
+
return None
|
| 21 |
+
hsv_vals = [rgb_to_hsv(c) for c in all_colors]
|
| 22 |
+
hues = [h * 360 for (h, s, v) in hsv_vals if s > 0.2 and v > 0.2] # ignore gray/dark
|
| 23 |
+
if not hues:
|
| 24 |
+
return None
|
| 25 |
+
return sum(hues) / len(hues)
|
| 26 |
+
|
| 27 |
+
def create_balanced_tiles(limit=500, tile_size=64, bins=12):
|
| 28 |
+
"""Create a balanced set of colored tiles from Unsplash-Lite-Palette."""
|
| 29 |
+
os.makedirs("data/tiles", exist_ok=True)
|
| 30 |
+
|
| 31 |
+
print("Loading Unsplash-Lite-Palette dataset...")
|
| 32 |
+
ds = load_dataset("1aurent/unsplash-lite-palette", split="train")
|
| 33 |
+
|
| 34 |
+
# Group images into hue bins
|
| 35 |
+
hue_bins = {i: [] for i in range(bins)}
|
| 36 |
+
for row in ds:
|
| 37 |
+
h = dominant_hue(row["palettes"])
|
| 38 |
+
if h is not None:
|
| 39 |
+
bin_idx = int(h / (360 / bins)) % bins
|
| 40 |
+
hue_bins[bin_idx].append(row)
|
| 41 |
+
|
| 42 |
+
print(f"Dataset grouped into {bins} hue bins.")
|
| 43 |
+
|
| 44 |
+
# Pick evenly from bins
|
| 45 |
+
per_bin = max(1, limit // bins)
|
| 46 |
+
selected = []
|
| 47 |
+
for b in range(bins):
|
| 48 |
+
random.shuffle(hue_bins[b])
|
| 49 |
+
selected.extend(hue_bins[b][:per_bin])
|
| 50 |
+
|
| 51 |
+
# In case fewer than limit (some bins are sparse)
|
| 52 |
+
if len(selected) < limit:
|
| 53 |
+
extra_needed = limit - len(selected)
|
| 54 |
+
all_rows = [row for bin_rows in hue_bins.values() for row in bin_rows]
|
| 55 |
+
random.shuffle(all_rows)
|
| 56 |
+
selected.extend(all_rows[:extra_needed])
|
| 57 |
+
|
| 58 |
+
print(f"Selected {len(selected)} images across hue bins.")
|
| 59 |
+
|
| 60 |
+
successful = 0
|
| 61 |
+
for i, row in enumerate(selected):
|
| 62 |
+
url = row["url"] # direct image URL
|
| 63 |
+
filename = f"tile_{i:04d}.jpg"
|
| 64 |
+
|
| 65 |
+
try:
|
| 66 |
+
resp = requests.get(url, timeout=10)
|
| 67 |
+
resp.raise_for_status()
|
| 68 |
+
img = Image.open(io.BytesIO(resp.content)).convert("RGB")
|
| 69 |
+
|
| 70 |
+
# Crop to square
|
| 71 |
+
w, h = img.size
|
| 72 |
+
if w != h:
|
| 73 |
+
min_side = min(w, h)
|
| 74 |
+
left = (w - min_side) // 2
|
| 75 |
+
top = (h - min_side) // 2
|
| 76 |
+
img = img.crop((left, top, left + min_side, top + min_side))
|
| 77 |
+
|
| 78 |
+
# Resize
|
| 79 |
+
img = img.resize((tile_size, tile_size), Image.Resampling.LANCZOS)
|
| 80 |
+
|
| 81 |
+
# Save
|
| 82 |
+
filepath = os.path.join("data/tiles", filename)
|
| 83 |
+
img.save(filepath, "JPEG", quality=85, optimize=True)
|
| 84 |
+
successful += 1
|
| 85 |
+
|
| 86 |
+
if i % 50 == 0:
|
| 87 |
+
print(f"✓ {successful}/{i+1} saved ({filename})")
|
| 88 |
+
|
| 89 |
+
except Exception as e:
|
| 90 |
+
print(f"✗ Failed {i} ({url}): {e}")
|
| 91 |
+
|
| 92 |
+
print(f"\n✅ Done! {successful} balanced color tiles saved in data/tiles/")
|
| 93 |
+
|
| 94 |
+
if __name__ == "__main__":
|
| 95 |
+
create_balanced_tiles(limit=500, tile_size=64, bins=12)
|
data/.DS_Store
CHANGED
|
Binary files a/data/.DS_Store and b/data/.DS_Store differ
|
|
|
data/images/0B4B7AAB-C25F-4868-A877-8F5EAFD50BC6-34559-0000043DC6E668A2.JPG
DELETED
Git LFS Details
|
data/images/1ACFF3AB-E48B-440D-BE02-75F784A2E480-51108-000011D4109333F6.JPG
DELETED
Git LFS Details
|
data/images/2F660614-2708-4826-8D34-3F29B1D230E5-28988-000003B80581EEC6.JPG
DELETED
Git LFS Details
|
data/images/84A96A26-EDBD-4AEF-8C2E-D22F4F357963-28988-000003ABF618F84B.JPG
DELETED
Git LFS Details
|
data/images/D696F3D9-DE42-47F0-9B3E-491BB366D7EE-28988-000003ACF0925C0D.JPG
DELETED
Git LFS Details
|
data/images/DSCF1000.JPG
DELETED
Git LFS Details
|
data/images/DSCF1184.JPG
DELETED
Git LFS Details
|
data/tiles/backup_cobalt_bloom.jpg
DELETED
Git LFS Details
|
data/tiles/backup_coral_flower.jpg
DELETED
Git LFS Details
|
data/tiles/backup_coral_red.jpg
DELETED
Git LFS Details
|
data/tiles/backup_eggshell.jpg
DELETED
Git LFS Details
|
data/tiles/backup_fuchsia_flower.jpg
DELETED
Git LFS Details
|
data/tiles/backup_golden_marigold.jpg
DELETED
Git LFS Details
|
data/tiles/backup_honey_bloom.jpg
DELETED
Git LFS Details
|
data/tiles/backup_magenta_bloom.jpg
DELETED
Git LFS Details
|
data/tiles/backup_magenta_flower.jpg
DELETED
Git LFS Details
|
data/tiles/backup_maroon_dahlia.jpg
DELETED
Git LFS Details
|
data/tiles/backup_mint_flower.jpg
DELETED
Git LFS Details
|
data/tiles/backup_navy_flower.jpg
DELETED
Git LFS Details
|
data/tiles/backup_orange_marigold.jpg
DELETED
Git LFS Details
|
data/tiles/backup_peach_bloom.jpg
DELETED
Git LFS Details
|
data/tiles/backup_persimmon.jpg
DELETED
Git LFS Details
|
data/tiles/backup_plum_flower.jpg
DELETED
Git LFS Details
|
data/tiles/backup_sage_green.jpg
DELETED
Git LFS Details
|
data/tiles/backup_snow_white.jpg
DELETED
Git LFS Details
|
data/tiles/backup_teal_flower.jpg
DELETED
Git LFS Details
|
data/tiles/blue_flower.jpg
DELETED
Git LFS Details
|
data/tiles/blush_pink.jpg
DELETED
Git LFS Details
|
data/tiles/bone_white.jpg
DELETED
Git LFS Details
|
data/tiles/buttercup.jpg
DELETED
Git LFS Details
|
data/tiles/canary_bloom.jpg
DELETED
Git LFS Details
|
data/tiles/cerulean.jpg
DELETED
Git LFS Details
|
data/tiles/cherry_bloom.jpg
DELETED
Git LFS Details
|
data/tiles/coral_flower.jpg
DELETED
Git LFS Details
|
data/tiles/coral_red.jpg
DELETED
Git LFS Details
|
data/tiles/cream_flower.jpg
DELETED
Git LFS Details
|
data/tiles/crimson_rose.jpg
DELETED
Git LFS Details
|
data/tiles/dark_flower.jpg
DELETED
Git LFS Details
|
data/tiles/forest_bloom.jpg
DELETED
Git LFS Details
|
data/tiles/fuchsia_flower.jpg
DELETED
Git LFS Details
|
data/tiles/golden_marigold.jpg
DELETED
Git LFS Details
|
data/tiles/green_leaves.jpg
DELETED
Git LFS Details
|
data/tiles/honey_bloom.jpg
DELETED
Git LFS Details
|
data/tiles/hot_pink.jpg
DELETED
Git LFS Details
|
data/tiles/indigo_bloom.jpg
DELETED
Git LFS Details
|
data/tiles/ivory_bloom.jpg
DELETED
Git LFS Details
|
data/tiles/light_flower.jpg
DELETED
Git LFS Details
|