feat: update algorithm integrations and point cloud overlays

This commit is contained in:
2026-06-30 16:46:36 +08:00
parent ddca7e5436
commit 7e2e56a50d
64 changed files with 4356 additions and 2781 deletions

View File

@@ -0,0 +1,126 @@
"""列车点云测量系统 - 主程序入口"""
import sys
import argparse
from pathlib import Path
# 添加src目录到Python路径
sys.path.insert(0, str(Path(__file__).parent / "src"))
from task_manager import TaskManager
def parse_args():
"""解析命令行参数"""
parser = argparse.ArgumentParser(
description="列车点云测量系统",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
示例:
python main.py # 使用默认配置文件
python main.py -c config/custom.yaml # 指定配置文件
python main.py -p data/train.ply # 指定点云文件(覆盖配置)
python main.py -o results/output # 指定输出目录
python main.py -c config/custom.yaml -p data/train.ply -o results/
"""
)
parser.add_argument(
'-c', '--config',
type=str,
default='config/measurements_0617_test.yaml',
help='配置文件路径 (默认: config/measurements.yaml)'
)
parser.add_argument(
'-p', '--pointcloud',
type=str,
default=None,
help='点云文件路径 (覆盖配置文件中的路径)'
)
parser.add_argument(
'-o', '--output',
type=str,
default=None,
help='结果输出目录 (覆盖配置文件中的路径,默认: results/)'
)
return parser.parse_args()
def main():
"""主函数"""
print("=" * 60)
print("列车点云测量系统")
print("=" * 60)
# 解析命令行参数
args = parse_args()
# 配置文件路径(支持相对路径和绝对路径)
config_file = Path(args.config)
if not config_file.is_absolute():
config_file = Path(__file__).parent / config_file
if not config_file.exists():
print(f"错误: 配置文件不存在: {config_file}")
return 1
print(f"\n加载配置文件: {config_file}")
# 创建任务管理器
manager = TaskManager()
# 命令行参数覆盖配置(必须在load_config之前设置)
if args.pointcloud:
pointcloud_path = Path(args.pointcloud)
if not pointcloud_path.is_absolute():
pointcloud_path = Path(__file__).parent / pointcloud_path
manager.override_pointcloud_path(str(pointcloud_path))
print(f"使用命令行指定的点云文件: {pointcloud_path}")
# 加载配置
if not manager.load_config(str(config_file)):
print("错误: 配置文件加载失败")
return 1
if args.output:
output_dir = Path(args.output)
if not output_dir.is_absolute():
output_dir = Path(__file__).parent / output_dir
manager.override_output_dir(str(output_dir))
print(f"使用命令行指定的输出目录: {output_dir}")
# 执行所有测量任务
print("\n开始执行测量任务...")
print("-" * 60)
results = manager.run_all_tasks()
# 输出结果摘要
print("\n" + "=" * 60)
print("测量结果摘要")
print("=" * 60)
success_count = sum(1 for r in results if r['status'] == 'success')
failed_count = len(results) - success_count
print(f"\n总任务数: {len(results)}")
print(f"成功: {success_count}")
print(f"失败: {failed_count}")
if failed_count > 0:
print("\n失败的任务:")
for result in results:
if result['status'] == 'failed':
print(f" - {result['name']}: {result.get('error', '未知错误')}")
print("\n" + "=" * 60)
print("测量完成!")
print("=" * 60)
return 0 if failed_count == 0 else 1
if __name__ == "__main__":
sys.exit(main())