pji_run.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. ##################################################################
  4. #
  5. # Copyright (c) 2023 CICV, Inc. All Rights Reserved
  6. #
  7. ##################################################################
  8. """
  9. @Authors: yangzihao(yangzihao@china-icv.cn)
  10. @Data: 2024/04/21
  11. @Last Modified: 2024/08/01
  12. @Summary: Pji outdoor robot evaluate entrance
  13. """
  14. import os
  15. import sys
  16. import time
  17. from single_case_evaluate import single_case_eval
  18. from common import get_subfolders_name
  19. from pjirebot_evaluate_csv import parsebag
  20. import log
  21. if __name__ == "__main__":
  22. # 屏蔽warning,减少非必要问题的干扰
  23. from warnings import simplefilter
  24. # simplefilter(action="ignore", category=FutureWarning)
  25. simplefilter(action="ignore")
  26. # TODO:优化输入为dict
  27. # input_dict = {
  28. # "data_path": dataPath,
  29. # "resultPath": resultPath,
  30. # "trackPath": trackPath
  31. # }
  32. # 判断参数数量是否足够
  33. if len(sys.argv) >= 3:
  34. dataPath = sys.argv[1] # 数据地址路径,包含多个csv
  35. resultPath = sys.argv[2] # 结果文件保存路径,结果文件包括几个过程图片、报告等
  36. trackPath = sys.argv[3] # 轨迹图片地址路径,用于报告展示
  37. # 用例名称,可选参数,如果传输则选用,不传输则选择文件路径名作为用例名称
  38. if len(sys.argv) > 4:
  39. case_name = sys.argv[4]
  40. else:
  41. case_name = dataPath.split('/')[-1] # .split('.')[0]
  42. configPath = r"./config.json" # 配置信息,包含指标列表及评分系数
  43. # logFileName = f'{resultPath}/log.log'
  44. logFileName = os.path.join(resultPath, 'log.log') # 日志文件名
  45. log.setup_logger(logFileName) # 日志设置
  46. # 获取日志记录器
  47. logger = log.get_logger()
  48. # 如果数据路径不存在,报错,存入日志,退出
  49. if not os.path.exists(dataPath):
  50. print('Invalid dataPath!')
  51. logger.error(f"[case:{case_name}] SINGLE_CASE_EVAL: Invalid dataPath!")
  52. sys.exit(-1)
  53. else:
  54. try:
  55. logger.info(f"[case:{case_name}] SINGLE_CASE_EVAL: Start evaluating:")
  56. print("SINGLE_CASE_EVAL程序开始运行:")
  57. print(
  58. f" configPath: {configPath},\n dataPath: {dataPath},\n resultPath: {resultPath},\n trackPath: {trackPath}")
  59. # 统计运行时间
  60. t1 = time.time()
  61. # 将输入的bag进行解析
  62. # parsebag(dataPath, resultPath) # EgoState_pji.csv存放resultPath下
  63. # 进入主要模块进行单用例评价分析
  64. single_case_eval(configPath, resultPath, resultPath, trackPath, case_name)
  65. t2 = time.time()
  66. print(f"程序结束,执行时间:{int(t2 - t1)} s")
  67. logger.info(f"[case:{case_name}] SINGLE_CASE_EVAL: End.")
  68. # 正常运行完成,返回状态0
  69. sys.exit(0)
  70. # 异常打印,退出
  71. except Exception as e:
  72. print("异常,退出...")
  73. print(repr(e))
  74. sys.exit(-1)
  75. # 增加兜底策略,输出问题报告(内容暂定为日志及问题总结)
  76. # finally:
  77. # pass
  78. # 参数量不够,报错退出
  79. else:
  80. print('No enough arguments!')
  81. sys.exit(-1)