123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- ##################################################################
- #
- # Copyright (c) 2023 CICV, Inc. All Rights Reserved
- #
- ##################################################################
- """
- @Authors: yangzihao(yangzihao@china-icv.cn)
- @Data: 2024/01/30
- @Last Modified: 2024/01/30
- @Summary: Evaluateion functions
- """
- import os
- import sys
- sys.path.append('../config')
- sys.path.append('../common')
- sys.path.append('../modules')
- sys.path.append('../results')
- import json
- import traceback
- import log
- from config_parser import ConfigParse
- from single_case_evaluate import single_case_evaluate, single_case_statistic
- # from data_quality import frame_loss_statistic
- # from pdf_report_generate import report_generate
- from report_generate import report_generate
- def single_case_eval(configPath, resultPath, case_name):
- logger = log.get_logger()
- # case_name = os.path.basename(os.path.dirname(dataPath))
- # case_name = dataPath.split('/')[-1]
- # 判断文件夹是否为空
- if len(os.listdir(resultPath)) == 0:
- print("No files in data_path!") # 路径异常
- logger.error(f"[case:{case_name}] SINGLE_CASE_EVAL: No files in data_path!")
- sys.exit(-1)
- # 加载配置文件
- try:
- # json_file = os.path.join(configPath, 'config.json')
- config = ConfigParse(configPath)
- except Exception as e:
- print('Config file parsing ERROR!', e)
- traceback.print_exc()
- logger.error(f"[case:{case_name}] SINGLE_CASE_EVAL: Config file parsing ERROR: {repr(e)}!", exc_info=True)
- sys.exit(-1)
- # 单用例评价,并生成报告
- try:
- case_dict = single_case_evaluate(resultPath, config, case_name) # 评估单用例
- single_case_dict = single_case_statistic(case_dict) # 对单用例结果增加内容,并生成报告
- # 将单用例测试结果保存为json文件
- # single_case_dict.pop('playbackData')
- # single_case_dict.pop('evalData')
- # with open(f'{resultPath}/report.json', 'w', encoding='utf-8') as f:
- # f.write(json.dumps(single_case_dict, ensure_ascii=False))
- reportDict = single_case_dict
- reportPdf = f'{resultPath}/report.pdf'
- report_generate(reportDict, reportPdf)
- except Exception as e:
- traceback.print_exc()
- logger.error(f"[case:{case_name}] SINGLE_CASE_EVAL: Evaluate single case ERROR: {repr(e)}!", exc_info=True)
- sys.exit(-1)
- # def data_quality_detect(dataPath, case_name):
- # logger = log.get_logger()
- #
- # # first_order_loss = 0.01 # first : little loss 100
- # second_order_loss = 0.05 # second : could use 95
- # third_order_loss = 0.10 # third : could not use 90
- #
- # frame_loss_dict = frame_loss_statistic(dataPath)
- #
- # flag_frame_loss = False
- # for key, value in frame_loss_dict.items():
- # # sensor data
- # sensor_data = ["RoadMark", "RoadPos", "TrafficLight", "TrafficSign"]
- # if any(file in key for file in sensor_data):
- # # if "RoadMark" in key or "RoadPos" in key or "TrafficLight" in key or "TrafficSign" in key:
- # # if key[:-4] in ["RoadMark", "RoadPos", "TrafficLight", "TrafficSign"]:
- # logger.info(f"[case:{case_name}] SINGLE_CASE_EVAL: [{key}] : {value['result']}")
- # continue
- #
- # if value['frame_loss_rate'] > third_order_loss:
- # logger.error(
- # f"[case:{case_name}] SINGLE_CASE_EVAL: [{key}] frame loss rate > {third_order_loss * 100}%: {value['result']}")
- # flag_frame_loss = True
- # elif value['frame_loss_rate'] > second_order_loss:
- # logger.info(
- # f"[case:{case_name}] SINGLE_CASE_EVAL: [{key}] frame loss rate > {second_order_loss * 100}%: {value['result']}")
- # else:
- # logger.info(
- # f"[case:{case_name}] SINGLE_CASE_EVAL: [{key}] frame loss rate < {second_order_loss * 100}%: {value['result']}")
- #
- # return flag_frame_loss
|