diff --git a/log_evaluator_migration_tool/annotationless_perception_migration.py b/log_evaluator_migration_tool/annotationless_perception_migration.py deleted file mode 100644 index 736ffcfd..00000000 --- a/log_evaluator_migration_tool/annotationless_perception_migration.py +++ /dev/null @@ -1,72 +0,0 @@ -import argparse -from pathlib import Path - -import yaml - - -def convert_scenario(scenario_path: Path) -> None: - scenario_file = scenario_path.open("r+") - yaml_obj = yaml.safe_load(scenario_file) - - if yaml_obj["Evaluation"]["UseCaseName"] != "annotationless_perception": - print(f"{scenario_path} does not require conversion") # noqa - scenario_file.close() - return - - if ( - yaml_obj["ScenarioFormatVersion"] != "3.0.0" - or yaml_obj["Evaluation"]["UseCaseFormatVersion"] != "1.0.0" - ): - print(f"{scenario_path} does not match format version") # noqa - scenario_file.close() - return - - yaml_obj["Evaluation"]["UseCaseFormatVersion"] = "2.0.0" - - class_cond = yaml_obj["Evaluation"]["Conditions"]["ClassConditions"] - - for k, v in class_cond.items(): - pass_range_dict = expand_pass_range(v["PassRange"]) - for name, value in v["Threshold"].items(): - threshold_values = {} - for m_k, m_v in value.items(): - threshold_values[m_k] = { - "lower": m_v * pass_range_dict[m_k][0], - "upper": m_v * pass_range_dict[m_k][1], - } - class_cond[k] |= {name: threshold_values} - class_cond[k].pop("Threshold") - class_cond[k].pop("PassRange") - - # 既存の内容を消す - scenario_file.seek(0) - scenario_file.truncate() - - # 更新済みの内容を書き込む - yaml.safe_dump(yaml_obj, scenario_file, sort_keys=False) - scenario_file.close() - - -def expand_pass_range(pass_range_dict: dict) -> dict: - rtn_dict = {} - for k, v in pass_range_dict.items(): - s_lower, s_upper = v.split("-") - rtn_dict[k] = [float(s_lower), float(s_upper)] - return rtn_dict - - -def main() -> None: - parser = argparse.ArgumentParser() - parser.add_argument( - "data_directory", - help="data_directory of log_evaluator", - ) - args = parser.parse_args() - scenario_paths = Path(args.data_directory).resolve().glob("**/scenario*.y*ml") # yaml or yml - for scenario_path in sorted(scenario_paths): - print(f"convert {scenario_path}") # noqa - convert_scenario(scenario_path) - - -if __name__ == "__main__": - main() diff --git a/log_evaluator_migration_tool/log_evaluator_migration_tool.py b/log_evaluator_migration_tool/log_evaluator_migration_tool.py index 7011d882..c49a0bd1 100644 --- a/log_evaluator_migration_tool/log_evaluator_migration_tool.py +++ b/log_evaluator_migration_tool/log_evaluator_migration_tool.py @@ -57,6 +57,56 @@ def convert_scenario(scenario_path: Path) -> None: scenario_file.close() +def update_annotationless_1_to_2(scenario_path: Path) -> None: + scenario_file = scenario_path.open("r+") + yaml_obj = yaml.safe_load(scenario_file) + + if yaml_obj["Evaluation"]["UseCaseName"] != "annotationless_perception": + scenario_file.close() + return + + if ( + yaml_obj["ScenarioFormatVersion"] != "3.0.0" + or yaml_obj["Evaluation"]["UseCaseFormatVersion"] != "1.0.0" + ): + print(f"{scenario_path} does not match format version") # noqa + scenario_file.close() + return + + yaml_obj["Evaluation"]["UseCaseFormatVersion"] = "2.0.0" + + class_cond = yaml_obj["Evaluation"]["Conditions"]["ClassConditions"] + + for k, v in class_cond.items(): + pass_range_dict = expand_pass_range(v["PassRange"]) + for name, value in v["Threshold"].items(): + threshold_values = {} + for m_k, m_v in value.items(): + threshold_values[m_k] = { + "lower": m_v * pass_range_dict[m_k][0], + "upper": m_v * pass_range_dict[m_k][1], + } + class_cond[k] |= {name: threshold_values} + class_cond[k].pop("Threshold") + class_cond[k].pop("PassRange") + + # 既存の内容を消す + scenario_file.seek(0) + scenario_file.truncate() + + # 更新済みの内容を書き込む + yaml.safe_dump(yaml_obj, scenario_file, sort_keys=False) + scenario_file.close() + + +def expand_pass_range(pass_range_dict: dict) -> dict: + rtn_dict = {} + for k, v in pass_range_dict.items(): + s_lower, s_upper = v.split("-") + rtn_dict[k] = [float(s_lower), float(s_upper)] + return rtn_dict + + def move_dataset_and_map(scenario_path: Path) -> None: scenario_file = scenario_path.open("r+") yaml_obj = yaml.safe_load(scenario_file) # scenario file is 3.0.0 format @@ -119,6 +169,7 @@ def main() -> None: for scenario_path in sorted(scenario_paths): print(f"convert {scenario_path}") # noqa convert_scenario(scenario_path) + update_annotationless_1_to_2(scenario_path) move_dataset_and_map(scenario_path) diff --git a/sample/annotationless_perception/scenario.ja.yaml b/sample/annotationless_perception/scenario.ja.yaml index 0e2d81b8..ace0cbc5 100644 --- a/sample/annotationless_perception/scenario.ja.yaml +++ b/sample/annotationless_perception/scenario.ja.yaml @@ -20,4 +20,3 @@ Evaluation: Datasets: - sample_dataset: VehicleId: default -