Commit 80cdf0be authored by Administrator's avatar Administrator
Browse files

initial draft

parents
{
"model_path": "/app/models/model.glb",
"reference_path": "/app/data/model_image.png",
"evaluation_timestamp": "2025-09-11T11:23:28.468568",
"comprehensive_score": 45.0,
"grade": "F",
"metrics": {
"2d_map": 0.0,
"3d_map": 0.0,
"chamfer_distance": 0.2798835014834724,
"emd": 0.21941491365858662,
"class_accuracy": 1.0
},
"score_details": {
"2d_map": {
"raw_value": 0.0,
"normalized_score": 0.0,
"weight": 0.25,
"weighted_score": 0.0,
"threshold": 0.8
},
"3d_map": {
"raw_value": 0.0,
"normalized_score": 0.0,
"weight": 0.3,
"weighted_score": 0.0,
"threshold": 0.7
},
"chamfer_distance": {
"raw_value": 0.2798835014834724,
"normalized_score": 100.0,
"weight": 0.2,
"weighted_score": 20.0,
"threshold": 0.3
},
"emd": {
"raw_value": 0.21941491365858662,
"normalized_score": 100.0,
"weight": 0.15,
"weighted_score": 15.0,
"threshold": 0.25
},
"class_accuracy": {
"raw_value": 1.0,
"normalized_score": 100.0,
"weight": 0.1,
"weighted_score": 10.0,
"threshold": 0.8
}
},
"config_used": {
"weights": {
"2d_map": 0.25,
"3d_map": 0.3,
"chamfer_distance": 0.2,
"emd": 0.15,
"class_accuracy": 0.1
},
"thresholds": {
"2d_map": 0.8,
"3d_map": 0.7,
"chamfer_distance": 0.3,
"emd": 0.25,
"class_accuracy": 0.8
},
"rendering": {
"num_views": 36,
"image_size": [
512,
512
],
"lighting_conditions": [
"default",
"bright",
"dim"
],
"camera_distance": 2.0,
"camera_elevation": 30.0,
"num_views_for_evaluation": 8
},
"pointcloud": {
"num_points": 10000,
"num_points_emd": 5000,
"num_points_chamfer": 10000
},
"classification": {
"num_classes": 10,
"class_names": [
"chair",
"table",
"sofa",
"bed",
"desk",
"bookshelf",
"lamp",
"cabinet",
"door",
"window"
],
"clustering_enabled": true,
"num_clusters": 5
},
"grade_thresholds": {
"A": 90.0,
"B": 80.0,
"C": 70.0,
"D": 60.0,
"F": 0.0
},
"iou_thresholds": {
"2d_iou": [
0.5,
0.75
],
"3d_iou": [
0.5,
0.7
]
},
"output": {
"save_images": true,
"save_pointclouds": false,
"generate_report": true,
"report_format": "html",
"visualize_results": true
},
"file_paths": {
"output_dir": "results",
"images_dir": "results/images",
"reports_dir": "results/reports",
"temp_dir": "results/temp"
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"file": "results/evaluation.log"
},
"performance": {
"parallel_processing": true,
"max_workers": 4,
"memory_limit_gb": 8,
"cache_enabled": true,
"cache_size_mb": 100
},
"validation": {
"validate_input_files": true,
"check_file_formats": true,
"min_file_size_kb": 1,
"max_file_size_mb": 100
}
}
}
\ No newline at end of file
{
"model_path": "/app/models/model.glb",
"reference_path": "/app/data/model_image.png",
"evaluation_timestamp": "2025-09-11T11:37:05.025048",
"comprehensive_score": 45.0,
"grade": "F",
"metrics": {
"2d_map": 0.0,
"3d_map": 0.0,
"chamfer_distance": 0.2800380478607029,
"emd": 0.21903982341488692,
"class_accuracy": 1.0
},
"score_details": {
"2d_map": {
"raw_value": 0.0,
"normalized_score": 0.0,
"weight": 0.25,
"weighted_score": 0.0,
"threshold": 0.8
},
"3d_map": {
"raw_value": 0.0,
"normalized_score": 0.0,
"weight": 0.3,
"weighted_score": 0.0,
"threshold": 0.7
},
"chamfer_distance": {
"raw_value": 0.2800380478607029,
"normalized_score": 100.0,
"weight": 0.2,
"weighted_score": 20.0,
"threshold": 0.3
},
"emd": {
"raw_value": 0.21903982341488692,
"normalized_score": 100.0,
"weight": 0.15,
"weighted_score": 15.0,
"threshold": 0.25
},
"class_accuracy": {
"raw_value": 1.0,
"normalized_score": 100.0,
"weight": 0.1,
"weighted_score": 10.0,
"threshold": 0.8
}
},
"config_used": {
"weights": {
"2d_map": 0.25,
"3d_map": 0.3,
"chamfer_distance": 0.2,
"emd": 0.15,
"class_accuracy": 0.1
},
"thresholds": {
"2d_map": 0.8,
"3d_map": 0.7,
"chamfer_distance": 0.3,
"emd": 0.25,
"class_accuracy": 0.8
},
"rendering": {
"num_views": 36,
"image_size": [
512,
512
],
"lighting_conditions": [
"default",
"bright",
"dim"
],
"camera_distance": 2.0,
"camera_elevation": 30.0,
"num_views_for_evaluation": 8
},
"pointcloud": {
"num_points": 10000,
"num_points_emd": 5000,
"num_points_chamfer": 10000
},
"classification": {
"num_classes": 10,
"class_names": [
"chair",
"table",
"sofa",
"bed",
"desk",
"bookshelf",
"lamp",
"cabinet",
"door",
"window"
],
"clustering_enabled": true,
"num_clusters": 5
},
"grade_thresholds": {
"A": 90.0,
"B": 80.0,
"C": 70.0,
"D": 60.0,
"F": 0.0
},
"iou_thresholds": {
"2d_iou": [
0.5,
0.75
],
"3d_iou": [
0.5,
0.7
]
},
"output": {
"save_images": true,
"save_pointclouds": false,
"generate_report": true,
"report_format": "html",
"visualize_results": true
},
"file_paths": {
"output_dir": "results",
"images_dir": "results/images",
"reports_dir": "results/reports",
"temp_dir": "results/temp"
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"file": "results/evaluation.log"
},
"performance": {
"parallel_processing": true,
"max_workers": 4,
"memory_limit_gb": 8,
"cache_enabled": true,
"cache_size_mb": 100
},
"validation": {
"validate_input_files": true,
"check_file_formats": true,
"min_file_size_kb": 1,
"max_file_size_mb": 100
}
}
}
\ No newline at end of file
{
"model_path": "/app/models/model.glb",
"reference_path": "/app/data/model_image.png",
"evaluation_timestamp": "2025-09-11T11:44:16.815246",
"comprehensive_score": 45.0,
"grade": "F",
"metrics": {
"2d_map": 0.0,
"3d_map": 0.0,
"chamfer_distance": 0.28474688752201116,
"emd": 0.2301394782819322,
"class_accuracy": 1.0
},
"score_details": {
"2d_map": {
"raw_value": 0.0,
"normalized_score": 0.0,
"weight": 0.25,
"weighted_score": 0.0,
"threshold": 0.8
},
"3d_map": {
"raw_value": 0.0,
"normalized_score": 0.0,
"weight": 0.3,
"weighted_score": 0.0,
"threshold": 0.7
},
"chamfer_distance": {
"raw_value": 0.28474688752201116,
"normalized_score": 100.0,
"weight": 0.2,
"weighted_score": 20.0,
"threshold": 0.3
},
"emd": {
"raw_value": 0.2301394782819322,
"normalized_score": 100.0,
"weight": 0.15,
"weighted_score": 15.0,
"threshold": 0.25
},
"class_accuracy": {
"raw_value": 1.0,
"normalized_score": 100.0,
"weight": 0.1,
"weighted_score": 10.0,
"threshold": 0.8
}
},
"config_used": {
"weights": {
"2d_map": 0.25,
"3d_map": 0.3,
"chamfer_distance": 0.2,
"emd": 0.15,
"class_accuracy": 0.1
},
"thresholds": {
"2d_map": 0.8,
"3d_map": 0.7,
"chamfer_distance": 0.3,
"emd": 0.25,
"class_accuracy": 0.8
},
"rendering": {
"num_views": 36,
"image_size": [
512,
512
],
"lighting_conditions": [
"default",
"bright",
"dim"
],
"camera_distance": 2.0,
"camera_elevation": 30.0,
"num_views_for_evaluation": 8
},
"pointcloud": {
"num_points": 10000,
"num_points_emd": 5000,
"num_points_chamfer": 10000
},
"classification": {
"num_classes": 10,
"class_names": [
"chair",
"table",
"sofa",
"bed",
"desk",
"bookshelf",
"lamp",
"cabinet",
"door",
"window"
],
"clustering_enabled": true,
"num_clusters": 5
},
"grade_thresholds": {
"A": 90.0,
"B": 80.0,
"C": 70.0,
"D": 60.0,
"F": 0.0
},
"iou_thresholds": {
"2d_iou": [
0.5,
0.75
],
"3d_iou": [
0.5,
0.7
]
},
"output": {
"save_images": true,
"save_pointclouds": false,
"generate_report": true,
"report_format": "html",
"visualize_results": true
},
"file_paths": {
"output_dir": "results",
"images_dir": "results/images",
"reports_dir": "results/reports",
"temp_dir": "results/temp"
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"file": "results/evaluation.log"
},
"performance": {
"parallel_processing": true,
"max_workers": 4,
"memory_limit_gb": 8,
"cache_enabled": true,
"cache_size_mb": 100
},
"validation": {
"validate_input_files": true,
"check_file_formats": true,
"min_file_size_kb": 1,
"max_file_size_mb": 100
}
}
}
\ No newline at end of file
{
"model_path": "/app/models/model.glb",
"reference_path": "/app/data/model_image.png",
"evaluation_timestamp": "2025-09-11T12:00:32.982368",
"comprehensive_score": 45.0,
"grade": "F",
"metrics": {
"2d_map": 0.0,
"3d_map": 0.0,
"chamfer_distance": 0.28097640962810566,
"emd": 0.22847263153188707,
"class_accuracy": 1.0
},
"score_details": {
"2d_map": {
"raw_value": 0.0,
"normalized_score": 0.0,
"weight": 0.25,
"weighted_score": 0.0,
"threshold": 0.8
},
"3d_map": {
"raw_value": 0.0,
"normalized_score": 0.0,
"weight": 0.3,
"weighted_score": 0.0,
"threshold": 0.7
},
"chamfer_distance": {
"raw_value": 0.28097640962810566,
"normalized_score": 100.0,
"weight": 0.2,
"weighted_score": 20.0,
"threshold": 0.3
},
"emd": {
"raw_value": 0.22847263153188707,
"normalized_score": 100.0,
"weight": 0.15,
"weighted_score": 15.0,
"threshold": 0.25
},
"class_accuracy": {
"raw_value": 1.0,
"normalized_score": 100.0,
"weight": 0.1,
"weighted_score": 10.0,
"threshold": 0.8
}
},
"config_used": {
"weights": {
"2d_map": 0.25,
"3d_map": 0.3,
"chamfer_distance": 0.2,
"emd": 0.15,
"class_accuracy": 0.1
},
"thresholds": {
"2d_map": 0.8,
"3d_map": 0.7,
"chamfer_distance": 0.3,
"emd": 0.25,
"class_accuracy": 0.8
},
"rendering": {
"num_views": 36,
"image_size": [
512,
512
],
"lighting_conditions": [
"default",
"bright",
"dim"
],
"camera_distance": 2.0,
"camera_elevation": 30.0,
"num_views_for_evaluation": 8
},
"pointcloud": {
"num_points": 10000,
"num_points_emd": 5000,
"num_points_chamfer": 10000
},
"classification": {
"num_classes": 10,
"class_names": [
"chair",
"table",
"sofa",
"bed",
"desk",
"bookshelf",
"lamp",
"cabinet",
"door",
"window"
],
"clustering_enabled": true,
"num_clusters": 5
},
"grade_thresholds": {
"A": 90.0,
"B": 80.0,
"C": 70.0,
"D": 60.0,
"F": 0.0
},
"iou_thresholds": {
"2d_iou": [
0.5,
0.75
],
"3d_iou": [
0.5,
0.7
]
},
"output": {
"save_images": true,
"save_pointclouds": false,
"generate_report": true,
"report_format": "html",
"visualize_results": true
},
"file_paths": {
"output_dir": "results",
"images_dir": "results/images",
"reports_dir": "results/reports",
"temp_dir": "results/temp"
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"file": "results/evaluation.log"
},
"performance": {
"parallel_processing": true,
"max_workers": 4,
"memory_limit_gb": 8,
"cache_enabled": true,
"cache_size_mb": 100
},
"validation": {
"validate_input_files": true,
"check_file_formats": true,
"min_file_size_kb": 1,
"max_file_size_mb": 100
}
}
}
\ No newline at end of file
{
"model_path": "/app/models/model.glb",
"reference_path": "/app/data/model_image.png",
"evaluation_timestamp": "2025-09-11T12:59:09.754619",
"comprehensive_score": 53.333333333333336,
"grade": "F",
"metrics": {
"2d_map": 0.3333333333333334,
"3d_map": 0.0,
"chamfer_distance": 0.27697559784924264,
"emd": 0.22405463178811297,
"class_accuracy": 1.0
},
"score_details": {
"2d_map": {
"raw_value": 0.3333333333333334,
"normalized_score": 33.33333333333334,
"weight": 0.25,
"weighted_score": 8.333333333333336,
"threshold": 0.8
},
"3d_map": {
"raw_value": 0.0,
"normalized_score": 0.0,
"weight": 0.3,
"weighted_score": 0.0,
"threshold": 0.7
},
"chamfer_distance": {
"raw_value": 0.27697559784924264,
"normalized_score": 100.0,
"weight": 0.2,
"weighted_score": 20.0,
"threshold": 0.3
},
"emd": {
"raw_value": 0.22405463178811297,
"normalized_score": 100.0,
"weight": 0.15,
"weighted_score": 15.0,
"threshold": 0.25
},
"class_accuracy": {
"raw_value": 1.0,
"normalized_score": 100.0,
"weight": 0.1,
"weighted_score": 10.0,
"threshold": 0.8
}
},
"config_used": {
"weights": {
"2d_map": 0.25,
"3d_map": 0.3,
"chamfer_distance": 0.2,
"emd": 0.15,
"class_accuracy": 0.1
},
"thresholds": {
"2d_map": 0.8,
"3d_map": 0.7,
"chamfer_distance": 0.3,
"emd": 0.25,
"class_accuracy": 0.8
},
"rendering": {
"num_views": 36,
"image_size": [
512,
512
],
"lighting_conditions": [
"default",
"bright",
"dim"
],
"camera_distance": 2.0,
"camera_elevation": 30.0,
"num_views_for_evaluation": 8
},
"pointcloud": {
"num_points": 10000,
"num_points_emd": 5000,
"num_points_chamfer": 10000
},
"classification": {
"num_classes": 10,
"class_names": [
"chair",
"table",
"sofa",
"bed",
"desk",
"bookshelf",
"lamp",
"cabinet",
"door",
"window"
],
"clustering_enabled": true,
"num_clusters": 5
},
"grade_thresholds": {
"A": 90.0,
"B": 80.0,
"C": 70.0,
"D": 60.0,
"F": 0.0
},
"iou_thresholds": {
"2d_iou": [
0.5,
0.75
],
"3d_iou": [
0.5,
0.7
]
},
"output": {
"save_images": true,
"save_pointclouds": false,
"generate_report": true,
"report_format": "html",
"visualize_results": true
},
"file_paths": {
"output_dir": "results",
"images_dir": "results/images",
"reports_dir": "results/reports",
"temp_dir": "results/temp"
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"file": "results/evaluation.log"
},
"performance": {
"parallel_processing": true,
"max_workers": 4,
"memory_limit_gb": 8,
"cache_enabled": true,
"cache_size_mb": 100
},
"validation": {
"validate_input_files": true,
"check_file_formats": true,
"min_file_size_kb": 1,
"max_file_size_mb": 100
}
}
}
\ No newline at end of file
{
"model_path": "/app/models/model.glb",
"reference_path": "/app/data/model_image.png",
"evaluation_timestamp": "2025-09-11T13:05:51.373507",
"comprehensive_score": 100.0,
"grade": "A",
"metrics": {
"2d_map": 1.0000000000000002,
"3d_map": 1.0000000000000002,
"chamfer_distance": 0.2831834396905584,
"emd": 0.22191476593741244,
"class_accuracy": 1.0
},
"score_details": {
"2d_map": {
"raw_value": 1.0000000000000002,
"normalized_score": 100.0,
"weight": 0.25,
"weighted_score": 25.0,
"threshold": 0.8
},
"3d_map": {
"raw_value": 1.0000000000000002,
"normalized_score": 100.0,
"weight": 0.3,
"weighted_score": 30.0,
"threshold": 0.7
},
"chamfer_distance": {
"raw_value": 0.2831834396905584,
"normalized_score": 100.0,
"weight": 0.2,
"weighted_score": 20.0,
"threshold": 0.3
},
"emd": {
"raw_value": 0.22191476593741244,
"normalized_score": 100.0,
"weight": 0.15,
"weighted_score": 15.0,
"threshold": 0.25
},
"class_accuracy": {
"raw_value": 1.0,
"normalized_score": 100.0,
"weight": 0.1,
"weighted_score": 10.0,
"threshold": 0.8
}
},
"config_used": {
"weights": {
"2d_map": 0.25,
"3d_map": 0.3,
"chamfer_distance": 0.2,
"emd": 0.15,
"class_accuracy": 0.1
},
"thresholds": {
"2d_map": 0.8,
"3d_map": 0.7,
"chamfer_distance": 0.3,
"emd": 0.25,
"class_accuracy": 0.8
},
"rendering": {
"num_views": 36,
"image_size": [
512,
512
],
"lighting_conditions": [
"default",
"bright",
"dim"
],
"camera_distance": 2.0,
"camera_elevation": 30.0,
"num_views_for_evaluation": 8
},
"pointcloud": {
"num_points": 10000,
"num_points_emd": 5000,
"num_points_chamfer": 10000
},
"classification": {
"num_classes": 10,
"class_names": [
"chair",
"table",
"sofa",
"bed",
"desk",
"bookshelf",
"lamp",
"cabinet",
"door",
"window"
],
"clustering_enabled": true,
"num_clusters": 5
},
"grade_thresholds": {
"A": 90.0,
"B": 80.0,
"C": 70.0,
"D": 60.0,
"F": 0.0
},
"iou_thresholds": {
"2d_iou": [
0.5,
0.75
],
"3d_iou": [
0.5,
0.7
]
},
"output": {
"save_images": true,
"save_pointclouds": false,
"generate_report": true,
"report_format": "html",
"visualize_results": true
},
"file_paths": {
"output_dir": "results",
"images_dir": "results/images",
"reports_dir": "results/reports",
"temp_dir": "results/temp"
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"file": "results/evaluation.log"
},
"performance": {
"parallel_processing": true,
"max_workers": 4,
"memory_limit_gb": 8,
"cache_enabled": true,
"cache_size_mb": 100
},
"validation": {
"validate_input_files": true,
"check_file_formats": true,
"min_file_size_kb": 1,
"max_file_size_mb": 100
}
}
}
\ No newline at end of file
{
"model_path": "/app/models/model.glb",
"reference_path": "/app/data/model_image.png",
"evaluation_timestamp": "2025-09-11T13:22:07.745472",
"comprehensive_score": 57.20520233072756,
"grade": "F",
"metrics": {
"2d_map": 1.0000000000000002,
"3d_map": 1.0000000000000002,
"chamfer_distance": 0.2776959431513186,
"emd": 0.22648257984954112,
"class_accuracy": 1.0
},
"score_details": {
"2d_map": {
"raw_value": 1.0000000000000002,
"normalized_score": 85.0,
"weight": 0.25,
"weighted_score": 21.25,
"threshold": 0.8
},
"3d_map": {
"raw_value": 1.0000000000000002,
"normalized_score": 88.57142857142858,
"weight": 0.3,
"weighted_score": 26.571428571428573,
"threshold": 0.7
},
"chamfer_distance": {
"raw_value": 0.2776959431513186,
"normalized_score": 1.430614600362696,
"weight": 0.2,
"weighted_score": 0.2861229200725392,
"threshold": 0.1
},
"emd": {
"raw_value": 0.22648257984954112,
"normalized_score": 3.9843389281763355,
"weight": 0.15,
"weighted_score": 0.5976508392264503,
"threshold": 0.1
},
"class_accuracy": {
"raw_value": 1.0,
"normalized_score": 85.0,
"weight": 0.1,
"weighted_score": 8.5,
"threshold": 0.8
}
},
"config_used": {
"weights": {
"2d_map": 0.25,
"3d_map": 0.3,
"chamfer_distance": 0.2,
"emd": 0.15,
"class_accuracy": 0.1
},
"thresholds": {
"2d_map": 0.8,
"3d_map": 0.7,
"chamfer_distance": 0.1,
"emd": 0.1,
"class_accuracy": 0.8
},
"rendering": {
"num_views": 36,
"image_size": [
512,
512
],
"lighting_conditions": [
"default",
"bright",
"dim"
],
"camera_distance": 2.0,
"camera_elevation": 30.0,
"num_views_for_evaluation": 8
},
"pointcloud": {
"num_points": 10000,
"num_points_emd": 5000,
"num_points_chamfer": 10000
},
"classification": {
"num_classes": 10,
"class_names": [
"chair",
"table",
"sofa",
"bed",
"desk",
"bookshelf",
"lamp",
"cabinet",
"door",
"window"
],
"clustering_enabled": true,
"num_clusters": 5
},
"grade_thresholds": {
"A": 90.0,
"B": 80.0,
"C": 70.0,
"D": 60.0,
"F": 0.0
},
"iou_thresholds": {
"2d_iou": [
0.5,
0.75
],
"3d_iou": [
0.5,
0.7
]
},
"output": {
"save_images": true,
"save_pointclouds": false,
"generate_report": true,
"report_format": "html",
"visualize_results": true
},
"file_paths": {
"output_dir": "results",
"images_dir": "results/images",
"reports_dir": "results/reports",
"temp_dir": "results/temp"
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"file": "results/evaluation.log"
},
"performance": {
"parallel_processing": true,
"max_workers": 4,
"memory_limit_gb": 8,
"cache_enabled": true,
"cache_size_mb": 100
},
"validation": {
"validate_input_files": true,
"check_file_formats": true,
"min_file_size_kb": 1,
"max_file_size_mb": 100
}
}
}
\ No newline at end of file
{
"model_path": "/app/models/model.glb",
"reference_path": "/app/data/model_image.png",
"evaluation_timestamp": "2025-09-11T13:47:20.932571",
"comprehensive_score": 82.84805591099106,
"grade": "B",
"metrics": {
"2d_map": 1.0000000000000002,
"3d_map": 1.0000000000000002,
"chamfer_distance": 0.27580806871153724,
"emd": 0.23092454140649243,
"class_accuracy": 1.0
},
"score_details": {
"2d_map": {
"raw_value": 1.0000000000000002,
"normalized_score": 85.0,
"weight": 0.25,
"weighted_score": 21.25,
"threshold": 0.8
},
"3d_map": {
"raw_value": 1.0000000000000002,
"normalized_score": 88.57142857142858,
"weight": 0.3,
"weighted_score": 26.571428571428573,
"threshold": 0.7
},
"chamfer_distance": {
"raw_value": 0.27580806871153724,
"normalized_score": 73.2255908384617,
"weight": 0.2,
"weighted_score": 14.64511816769234,
"threshold": 0.3
},
"emd": {
"raw_value": 0.23092454140649243,
"normalized_score": 79.210061145801,
"weight": 0.15,
"weighted_score": 11.881509171870151,
"threshold": 0.3
},
"class_accuracy": {
"raw_value": 1.0,
"normalized_score": 85.0,
"weight": 0.1,
"weighted_score": 8.5,
"threshold": 0.8
}
},
"config_used": {
"weights": {
"2d_map": 0.25,
"3d_map": 0.3,
"chamfer_distance": 0.2,
"emd": 0.15,
"class_accuracy": 0.1
},
"thresholds": {
"2d_map": 0.8,
"3d_map": 0.7,
"chamfer_distance": 0.3,
"emd": 0.3,
"class_accuracy": 0.8
},
"rendering": {
"num_views": 36,
"image_size": [
512,
512
],
"lighting_conditions": [
"default",
"bright",
"dim"
],
"camera_distance": 2.0,
"camera_elevation": 30.0,
"num_views_for_evaluation": 8
},
"pointcloud": {
"num_points": 10000,
"num_points_emd": 5000,
"num_points_chamfer": 10000
},
"classification": {
"num_classes": 10,
"class_names": [
"chair",
"table",
"sofa",
"bed",
"desk",
"bookshelf",
"lamp",
"cabinet",
"door",
"window"
],
"clustering_enabled": true,
"num_clusters": 5
},
"grade_thresholds": {
"A": 90.0,
"B": 80.0,
"C": 70.0,
"D": 60.0,
"F": 0.0
},
"iou_thresholds": {
"2d_iou": [
0.5,
0.75
],
"3d_iou": [
0.5,
0.7
]
},
"output": {
"save_images": true,
"save_pointclouds": false,
"generate_report": true,
"report_format": "html",
"visualize_results": true
},
"file_paths": {
"output_dir": "results",
"images_dir": "results/images",
"reports_dir": "results/reports",
"temp_dir": "results/temp"
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"file": "results/evaluation.log"
},
"performance": {
"parallel_processing": true,
"max_workers": 4,
"memory_limit_gb": 8,
"cache_enabled": true,
"cache_size_mb": 100
},
"validation": {
"validate_input_files": true,
"check_file_formats": true,
"min_file_size_kb": 1,
"max_file_size_mb": 100
}
}
}
\ No newline at end of file
{
"model_path": "/app/models/model.glb",
"reference_path": "/app/data/model_image.png",
"evaluation_timestamp": "2025-09-12T11:44:08.578711",
"comprehensive_score": 82.87725715080788,
"grade": "B",
"metrics": {
"2d_map": 1.0000000000000002,
"3d_map": 1.0000000000000002,
"chamfer_distance": 0.2770361566262666,
"emd": 0.22782702886267892,
"class_accuracy": 1.0
},
"score_details": {
"2d_map": {
"raw_value": 1.0000000000000002,
"normalized_score": 85.0,
"weight": 0.25,
"weighted_score": 21.25,
"threshold": 0.8
},
"3d_map": {
"raw_value": 1.0000000000000002,
"normalized_score": 88.57142857142858,
"weight": 0.3,
"weighted_score": 26.571428571428573,
"threshold": 0.7
},
"chamfer_distance": {
"raw_value": 0.2770361566262666,
"normalized_score": 73.06184578316444,
"weight": 0.2,
"weighted_score": 14.612369156632889,
"threshold": 0.3
},
"emd": {
"raw_value": 0.22782702886267892,
"normalized_score": 79.62306281830948,
"weight": 0.15,
"weighted_score": 11.943459422746422,
"threshold": 0.3
},
"class_accuracy": {
"raw_value": 1.0,
"normalized_score": 85.0,
"weight": 0.1,
"weighted_score": 8.5,
"threshold": 0.8
}
},
"config_used": {
"weights": {
"2d_map": 0.25,
"3d_map": 0.3,
"chamfer_distance": 0.2,
"emd": 0.15,
"class_accuracy": 0.1
},
"thresholds": {
"2d_map": 0.8,
"3d_map": 0.7,
"chamfer_distance": 0.3,
"emd": 0.3,
"class_accuracy": 0.8
},
"rendering": {
"num_views": 36,
"image_size": [
512,
512
],
"lighting_conditions": [
"default",
"bright",
"dim"
],
"camera_distance": 2.0,
"camera_elevation": 30.0,
"num_views_for_evaluation": 8
},
"pointcloud": {
"num_points": 10000,
"num_points_emd": 5000,
"num_points_chamfer": 10000
},
"classification": {
"num_classes": 10,
"class_names": [
"chair",
"table",
"sofa",
"bed",
"desk",
"bookshelf",
"lamp",
"cabinet",
"door",
"window"
],
"clustering_enabled": true,
"num_clusters": 5
},
"grade_thresholds": {
"A": 90.0,
"B": 80.0,
"C": 70.0,
"D": 60.0,
"F": 0.0
},
"iou_thresholds": {
"2d_iou": [
0.5,
0.75
],
"3d_iou": [
0.5,
0.7
]
},
"output": {
"save_images": true,
"save_pointclouds": false,
"generate_report": true,
"report_format": "html",
"visualize_results": true
},
"file_paths": {
"output_dir": "results",
"images_dir": "results/images",
"reports_dir": "results/reports",
"temp_dir": "results/temp"
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"file": "results/evaluation.log"
},
"performance": {
"parallel_processing": true,
"max_workers": 4,
"memory_limit_gb": 8,
"cache_enabled": true,
"cache_size_mb": 100
},
"validation": {
"validate_input_files": true,
"check_file_formats": true,
"min_file_size_kb": 1,
"max_file_size_mb": 100
}
}
}
\ No newline at end of file
#!/usr/bin/env python3
import sys
import os
sys.path.append('src')
from evaluator import normalize_score_improved
# 테스트 케이스
print('=== 정규화 점수 테스트 결과 ===')
print()
# 실제 계산된 값들로 테스트
chamfer_old = normalize_score_improved('chamfer_distance', 0.2777, 0.1)
chamfer_new = normalize_score_improved('chamfer_distance', 0.2777, 0.3)
emd_old = normalize_score_improved('emd', 0.2265, 0.1)
emd_new = normalize_score_improved('emd', 0.2265, 0.3)
print(f'chamfer_distance: 0.2777')
print(f' 기존 임계값 0.1: {chamfer_old:.1f}점')
print(f' 새 임계값 0.3: {chamfer_new:.1f}점')
print(f' 개선: {chamfer_new - chamfer_old:+.1f}점')
print()
print(f'emd: 0.2265')
print(f' 기존 임계값 0.1: {emd_old:.1f}점')
print(f' 새 임계값 0.3: {emd_new:.1f}점')
print(f' 개선: {emd_new - emd_old:+.1f}점')
print()
# 비율 계산
print('비율 분석:')
print(f'chamfer_distance: 0.2777/0.3 = {0.2777/0.3:.3f} (새 임계값 기준)')
print(f'emd: 0.2265/0.3 = {0.2265/0.3:.3f} (새 임계값 기준)')
"""
3D 모델 및 이미지 데이터 로더
GLB 파일과 이미지 파일을 로드하고 전처리하는 기능을 제공합니다.
"""
import numpy as np
import trimesh
import open3d as o3d
from PIL import Image
import cv2
from typing import Dict, List, Tuple, Optional
import os
class DataLoader:
"""3D 모델과 이미지 데이터를 로드하고 전처리하는 클래스"""
def __init__(self):
self.supported_3d_formats = ['.glb', '.gltf', '.obj', '.ply', '.stl']
self.supported_image_formats = ['.png', '.jpg', '.jpeg', '.bmp', '.tiff']
def load_glb_model(self, path: str) -> Dict:
"""
GLB 파일을 로드하고 메시 정보를 추출합니다.
Args:
path (str): GLB 파일 경로
Returns:
Dict: 3D 모델 정보 (vertices, faces, textures, materials)
"""
try:
# trimesh를 사용하여 GLB 파일 로드
scene = trimesh.load(path)
# 메시 정보 추출
if hasattr(scene, 'geometry'):
# Scene인 경우 첫 번째 메시 사용
mesh = list(scene.geometry.values())[0]
else:
# 단일 메시인 경우
mesh = scene
model_info = {
'vertices': np.array(mesh.vertices),
'faces': np.array(mesh.faces),
'textures': None,
'materials': None,
'bounding_box': mesh.bounds,
'center': mesh.centroid,
'scale': mesh.scale,
'file_path': path
}
# 텍스처 정보가 있는 경우
if hasattr(mesh.visual, 'material'):
model_info['materials'] = mesh.visual.material
# UV 좌표가 있는 경우
if hasattr(mesh.visual, 'uv'):
model_info['uv_coords'] = mesh.visual.uv
return model_info
except Exception as e:
raise ValueError(f"GLB 파일 로드 실패: {path}, 오류: {str(e)}")
def load_reference_image(self, path: str) -> np.ndarray:
"""
참조 이미지를 로드하고 전처리합니다.
Args:
path (str): 이미지 파일 경로
Returns:
np.ndarray: 전처리된 이미지 배열 (H, W, C)
"""
try:
# PIL을 사용하여 이미지 로드
image = Image.open(path)
# RGB로 변환 (RGBA인 경우)
if image.mode == 'RGBA':
image = image.convert('RGB')
elif image.mode != 'RGB':
image = image.convert('RGB')
# numpy 배열로 변환
image_array = np.array(image)
return image_array
except Exception as e:
raise ValueError(f"이미지 로드 실패: {path}, 오류: {str(e)}")
def extract_mesh_info(self, model: Dict) -> Dict:
"""
3D 모델에서 메시 정보를 추출합니다.
Args:
model (Dict): 3D 모델 정보
Returns:
Dict: 추출된 메시 정보
"""
vertices = model['vertices']
faces = model['faces']
# 메시 통계 계산
mesh_info = {
'num_vertices': len(vertices),
'num_faces': len(faces),
'bounding_box_size': np.max(vertices, axis=0) - np.min(vertices, axis=0),
'volume': self._calculate_mesh_volume(vertices, faces),
'surface_area': self._calculate_surface_area(vertices, faces),
'center_of_mass': np.mean(vertices, axis=0)
}
return mesh_info
def create_ground_truth(self, image: np.ndarray) -> Dict:
"""
이미지에서 Ground Truth 정보를 생성합니다.
Args:
image (np.ndarray): 입력 이미지
Returns:
Dict: Ground Truth 정보
"""
# 이미지 크기 정보
height, width = image.shape[:2]
# 간단한 객체 감지를 위한 전처리
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
# 엣지 검출
edges = cv2.Canny(gray, 50, 150)
# 윤곽선 찾기
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 바운딩 박스 생성
bounding_boxes = []
for contour in contours:
if cv2.contourArea(contour) > 100: # 최소 면적 필터
x, y, w, h = cv2.boundingRect(contour)
bounding_boxes.append({
'bbox': [x, y, x + w, y + h],
'area': w * h,
'confidence': 1.0
})
ground_truth = {
'image_size': (width, height),
'bounding_boxes': bounding_boxes,
'num_objects': len(bounding_boxes),
'image_histogram': np.histogram(gray, bins=256)[0]
}
return ground_truth
def mesh_to_pointcloud(self, vertices: np.ndarray, num_points: int = 10000) -> np.ndarray:
"""
메시를 점군으로 변환합니다.
Args:
vertices (np.ndarray): 메시 정점
num_points (int): 생성할 점의 개수
Returns:
np.ndarray: 점군 데이터
"""
if len(vertices) >= num_points:
# 정점이 충분한 경우 랜덤 샘플링
indices = np.random.choice(len(vertices), num_points, replace=False)
return vertices[indices]
else:
# 정점이 부족한 경우 중복 허용하여 샘플링
indices = np.random.choice(len(vertices), num_points, replace=True)
return vertices[indices]
def _calculate_mesh_volume(self, vertices: np.ndarray, faces: np.ndarray) -> float:
"""메시의 부피를 계산합니다."""
try:
mesh = trimesh.Trimesh(vertices=vertices, faces=faces)
return mesh.volume
except:
return 0.0
def _calculate_surface_area(self, vertices: np.ndarray, faces: np.ndarray) -> float:
"""메시의 표면적을 계산합니다."""
try:
mesh = trimesh.Trimesh(vertices=vertices, faces=faces)
return mesh.surface_area
except:
return 0.0
def validate_file(self, file_path: str, file_type: str = 'auto') -> bool:
"""
파일 유효성을 검사합니다.
Args:
file_path (str): 파일 경로
file_type (str): 파일 타입 ('3d', 'image', 'auto')
Returns:
bool: 파일 유효성
"""
if not os.path.exists(file_path):
return False
_, ext = os.path.splitext(file_path.lower())
if file_type == 'auto':
return (ext in self.supported_3d_formats or
ext in self.supported_image_formats)
elif file_type == '3d':
return ext in self.supported_3d_formats
elif file_type == 'image':
return ext in self.supported_image_formats
return False
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
"""
유틸리티 모듈
로깅, 성능 모니터링 등의 유틸리티 기능을 제공합니다.
"""
from .logging_utils import DetailedLogger, get_logger, reset_logger
from .performance_monitor import (
PerformanceMonitor,
MemoryProfiler,
monitor_performance,
memory_profiling,
get_performance_monitor,
get_memory_profiler
)
__all__ = [
'DetailedLogger',
'get_logger',
'reset_logger',
'PerformanceMonitor',
'MemoryProfiler',
'monitor_performance',
'memory_profiling',
'get_performance_monitor',
'get_memory_profiler'
]
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment