Spaces:
Sleeping
Sleeping
| """Backward compatibility wrapper for sdf module. | |
| This module re-exports all functions from the sdf subpackage for backward compatibility. | |
| New code should import directly from the sdf subpackage instead. | |
| """ | |
| from layout_system.sdf import optimize | |
| from layout_system.sdf.core import ( | |
| binary_to_sdf_norm, | |
| load_binary_mask_from_rgba, | |
| ) | |
| from layout_system.sdf.visualization import ( | |
| visualize_sdf, | |
| visualize_sdf_norm_and_softmask, | |
| ) | |
| if __name__ == "__main__": | |
| import json | |
| # Visualize SDFs | |
| print("Loading images and computing SDFs...") | |
| mask1 = load_binary_mask_from_rgba("chart.png") | |
| mask2 = load_binary_mask_from_rgba("pictogram.png") | |
| sdf1_norm = binary_to_sdf_norm(mask1, pad=16) | |
| sdf2_norm = binary_to_sdf_norm(mask2, pad=16) | |
| print(f"SDF 1 shape: {sdf1_norm.shape}, range: [{sdf1_norm.min():.3f}, {sdf1_norm.max():.3f}]") | |
| print(f"SDF 2 shape: {sdf2_norm.shape}, range: [{sdf2_norm.min():.3f}, {sdf2_norm.max():.3f}]") | |
| # Use a smaller range (0.05) for finer detail around the boundary | |
| visualize_sdf(sdf1_norm, sdf2_norm, mask1, mask2, | |
| save_path="sdf_visualization.png", sdf_range=0.05) | |
| # Visualize SDF normalization and softmask conversion for both images | |
| print("\nVisualizing SDF normalization and softmask conversion...") | |
| # For mask1 (chart) - use a sample bbox covering most of the image | |
| H1, W1 = mask1.shape | |
| bbox1_sample = (W1 * 0.1, H1 * 0.1, W1 * 0.8, H1 * 0.8) | |
| visualize_sdf_norm_and_softmask(sdf1_norm, mask1, | |
| bbox=bbox1_sample, | |
| container_size=(W1, H1), | |
| save_path="sdf_norm_softmask_chart.png") | |
| # For mask2 (pictogram) - use a sample bbox covering most of the image | |
| H2, W2 = mask2.shape | |
| bbox2_sample = (W2 * 0.1, H2 * 0.1, W2 * 0.8, H2 * 0.8) | |
| visualize_sdf_norm_and_softmask(sdf2_norm, mask2, | |
| bbox=bbox2_sample, | |
| container_size=(W2, H2), | |
| save_path="sdf_norm_softmask_pictogram.png") | |
| # Load reference layout from JSON | |
| print("\n" + "="*50) | |
| print("Loading reference layout from simplified.json...") | |
| print("="*50) | |
| json_path = "simplified.json" | |
| with open(json_path, 'r') as f: | |
| json_data = json.load(f) | |
| # Extract reference bboxes from children | |
| reference_bboxes = [] | |
| reference_parent_bbox = None | |
| if "children" in json_data and len(json_data["children"]) >= 2: | |
| # Extract parent container bbox | |
| parent_bbox = json_data.get("bbox", {}) | |
| reference_parent_bbox = ( | |
| parent_bbox.get("x", 0), | |
| parent_bbox.get("y", 0), | |
| parent_bbox.get("width", 1000), | |
| parent_bbox.get("height", 1000) | |
| ) | |
| # Extract children bboxes (reference layout) | |
| for child in json_data["children"]: | |
| child_bbox = child.get("bbox", {}) | |
| ref_bbox = ( | |
| child_bbox.get("x", 0), | |
| child_bbox.get("y", 0), | |
| child_bbox.get("width", 100), | |
| child_bbox.get("height", 100) | |
| ) | |
| reference_bboxes.append(ref_bbox) | |
| print(f"Reference parent bbox: {reference_parent_bbox}") | |
| print(f"Reference bboxes: {reference_bboxes}") | |
| # Run optimization | |
| print("\n" + "="*50) | |
| print("Running optimization...") | |
| print("="*50) | |
| optimize(png_list=["chart.png", "pictogram.png"], | |
| reference_bboxes=reference_bboxes, | |
| reference_parent_bbox=reference_parent_bbox, | |
| w_similarity=1000.0) | |