Spaces:
Running
Running
Update app_main.py
Browse files- app_main.py +100 -28
app_main.py
CHANGED
@@ -317,12 +317,12 @@ def similarity_matching(input_json_path: str) -> str:
|
|
317 |
# # ========================================= #
|
318 |
# # Walk folders to collect all image paths #
|
319 |
# # ========================================= #
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
|
327 |
# # ============================== #
|
328 |
# # EMBED FOLDER IMAGES (REF) #
|
@@ -377,43 +377,115 @@ def similarity_matching(input_json_path: str) -> str:
|
|
377 |
most_similar_indices = np.argmax(similarity, axis=1)
|
378 |
|
379 |
# ============= Match and copy ================
|
380 |
-
project_data
|
381 |
copied_folders = set()
|
382 |
-
|
|
|
|
|
|
|
|
|
|
|
383 |
for sprite_idx, matched_idx in enumerate(most_similar_indices):
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
matched_folder = os.path.dirname(matched_image_path)
|
|
|
|
|
388 |
if matched_folder in copied_folders:
|
389 |
continue
|
390 |
copied_folders.add(matched_folder)
|
|
|
391 |
|
392 |
-
# Sprite
|
393 |
sprite_json_path = os.path.join(matched_folder, 'sprite.json')
|
394 |
-
if os.path.exists(sprite_json_path):
|
395 |
-
|
396 |
-
|
397 |
-
project_data.append(sprite_data)
|
398 |
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
403 |
|
404 |
-
#
|
405 |
if matched_image_path.startswith(os.path.normpath(backdrop_images_path)):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
406 |
backdrop_json_path = os.path.join(matched_folder, 'project.json')
|
407 |
if os.path.exists(backdrop_json_path):
|
408 |
with open(backdrop_json_path, 'r') as f:
|
409 |
backdrop_json_data = json.load(f)
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
417 |
|
418 |
# Merge JSON structure
|
419 |
final_project = {
|
|
|
317 |
# # ========================================= #
|
318 |
# # Walk folders to collect all image paths #
|
319 |
# # ========================================= #
|
320 |
+
folder_image_paths = []
|
321 |
+
for image_dir in image_dirs:
|
322 |
+
for root, _, files in os.walk(image_dir):
|
323 |
+
for fname in files:
|
324 |
+
if fname.lower().endswith((".png", ".jpg", ".jpeg")):
|
325 |
+
folder_image_paths.append(os.path.join(root, fname))
|
326 |
|
327 |
# # ============================== #
|
328 |
# # EMBED FOLDER IMAGES (REF) #
|
|
|
377 |
most_similar_indices = np.argmax(similarity, axis=1)
|
378 |
|
379 |
# ============= Match and copy ================
|
380 |
+
project_data = []
|
381 |
copied_folders = set()
|
382 |
+
|
383 |
+
# =============================================================== #
|
384 |
+
# Loop through most similar images from Sprites folder #
|
385 |
+
# → Copy sprite assets (excluding matched image + sprite.json) #
|
386 |
+
# → Load sprite.json and append its data to project_data #
|
387 |
+
# =============================================================== #
|
388 |
for sprite_idx, matched_idx in enumerate(most_similar_indices):
|
389 |
+
matched_image_path = folder_image_paths[matched_idx]
|
390 |
+
matched_image_path = os.path.normpath(matched_image_path)
|
391 |
+
|
392 |
matched_folder = os.path.dirname(matched_image_path)
|
393 |
+
folder_name = os.path.basename(matched_folder)
|
394 |
+
|
395 |
if matched_folder in copied_folders:
|
396 |
continue
|
397 |
copied_folders.add(matched_folder)
|
398 |
+
logger.info(f"Matched image path: {matched_image_path}")
|
399 |
|
|
|
400 |
sprite_json_path = os.path.join(matched_folder, 'sprite.json')
|
401 |
+
if not os.path.exists(sprite_json_path):
|
402 |
+
logger.warning(f"sprite.json not found in: {matched_folder}")
|
403 |
+
continue
|
|
|
404 |
|
405 |
+
with open(sprite_json_path, 'r') as f:
|
406 |
+
sprite_data = json.load(f)
|
407 |
+
print(f"SPRITE DATA: \n{sprite_data}")
|
408 |
+
# Copy only non-matched files
|
409 |
+
for fname in os.listdir(matched_folder):
|
410 |
+
fpath = os.path.join(matched_folder, fname)
|
411 |
+
if os.path.isfile(fpath) and fname not in {os.path.basename(matched_image_path), 'sprite.json'}:
|
412 |
+
shutil.copy2(fpath, os.path.join(project_folder, fname))
|
413 |
+
logger.info(f"Copied Sprite asset: {fname}")
|
414 |
+
project_data.append(sprite_data)
|
415 |
+
|
416 |
+
# ================================================================== #
|
417 |
+
# Loop through most similar images from Backdrops folder #
|
418 |
+
# → Copy Backdrop assets (excluding matched image + project.json) #
|
419 |
+
# → Load project.json and append its data to project_data #
|
420 |
+
# ================================================================== #
|
421 |
+
backdrop_data = [] # for backdrop-related entries
|
422 |
+
|
423 |
+
for backdrop_idx, matched_idx in enumerate(most_similar_indices):
|
424 |
+
matched_image_path = os.path.normpath(folder_image_paths[matched_idx])
|
425 |
|
426 |
+
# Check if the match is from the Backdrops folder
|
427 |
if matched_image_path.startswith(os.path.normpath(backdrop_images_path)):
|
428 |
+
matched_folder = os.path.dirname(matched_image_path)
|
429 |
+
folder_name = os.path.basename(matched_folder)
|
430 |
+
|
431 |
+
logger.info(f"Backdrop matched image: {matched_image_path}")
|
432 |
+
|
433 |
+
# Copy only non-matched files
|
434 |
+
for fname in os.listdir(matched_folder):
|
435 |
+
fpath = os.path.join(matched_folder, fname)
|
436 |
+
if os.path.isfile(fpath) and fname not in {os.path.basename(matched_image_path), 'project.json'}:
|
437 |
+
shutil.copy2(fpath, os.path.join(project_folder, fname))
|
438 |
+
logger.info(f"Copied Backdrop asset: {fname}")
|
439 |
+
|
440 |
+
# Append backdrop's project.json
|
441 |
backdrop_json_path = os.path.join(matched_folder, 'project.json')
|
442 |
if os.path.exists(backdrop_json_path):
|
443 |
with open(backdrop_json_path, 'r') as f:
|
444 |
backdrop_json_data = json.load(f)
|
445 |
+
print(f"SPRITE DATA: \n{backdrop_json_data}")
|
446 |
+
if "targets" in backdrop_json_data:
|
447 |
+
for target in backdrop_json_data["targets"]:
|
448 |
+
if target.get("isStage") == True:
|
449 |
+
backdrop_data.append(target)
|
450 |
+
else:
|
451 |
+
logger.warning(f"project.json not found in: {matched_folder}")
|
452 |
+
# project_data, backdrop_data = [], []
|
453 |
+
# copied_folders = set()
|
454 |
+
# start_time = time.perf_counter()
|
455 |
+
# for sprite_idx, matched_idx in enumerate(most_similar_indices):
|
456 |
+
# matched_entry = embedding_json[matched_idx]
|
457 |
+
# # matched_image_path = os.path.normpath(folder_image_paths[matched_idx])
|
458 |
+
# matched_image_path = os.path.normpath(matched_entry["file-path"])
|
459 |
+
# matched_folder = os.path.dirname(matched_image_path)
|
460 |
+
# if matched_folder in copied_folders:
|
461 |
+
# continue
|
462 |
+
# copied_folders.add(matched_folder)
|
463 |
+
|
464 |
+
# # Sprite
|
465 |
+
# sprite_json_path = os.path.join(matched_folder, 'sprite.json')
|
466 |
+
# if os.path.exists(sprite_json_path):
|
467 |
+
# with open(sprite_json_path, 'r') as f:
|
468 |
+
# sprite_data = json.load(f)
|
469 |
+
# project_data.append(sprite_data)
|
470 |
+
|
471 |
+
# for fname in os.listdir(matched_folder):
|
472 |
+
# if fname not in {os.path.basename(matched_image_path), 'sprite.json'}:
|
473 |
+
# shutil.copy2(os.path.join(
|
474 |
+
# matched_folder, fname), project_folder)
|
475 |
+
|
476 |
+
# # Backdrop
|
477 |
+
# if matched_image_path.startswith(os.path.normpath(backdrop_images_path)):
|
478 |
+
# backdrop_json_path = os.path.join(matched_folder, 'project.json')
|
479 |
+
# if os.path.exists(backdrop_json_path):
|
480 |
+
# with open(backdrop_json_path, 'r') as f:
|
481 |
+
# backdrop_json_data = json.load(f)
|
482 |
+
# for target in backdrop_json_data.get("targets", []):
|
483 |
+
# if target.get("isStage"):
|
484 |
+
# backdrop_data.append(target)
|
485 |
+
# for fname in os.listdir(matched_folder):
|
486 |
+
# if fname not in {os.path.basename(matched_image_path), 'project.json'}:
|
487 |
+
# shutil.copy2(os.path.join(
|
488 |
+
# matched_folder, fname), project_folder)
|
489 |
|
490 |
# Merge JSON structure
|
491 |
final_project = {
|