Files
massive-cloud/alg/train_measurement_system_v3.2_0629/main.py

127 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""列车点云测量系统 - 主程序入口"""
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())