megadetector 5.0.28__py3-none-any.whl → 10.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of megadetector might be problematic. Click here for more details.
- megadetector/api/batch_processing/integration/digiKam/xmp_integration.py +2 -2
- megadetector/api/batch_processing/integration/eMammal/test_scripts/push_annotations_to_emammal.py +1 -1
- megadetector/api/batch_processing/integration/eMammal/test_scripts/select_images_for_testing.py +1 -1
- megadetector/classification/aggregate_classifier_probs.py +3 -3
- megadetector/classification/analyze_failed_images.py +5 -5
- megadetector/classification/cache_batchapi_outputs.py +5 -5
- megadetector/classification/create_classification_dataset.py +11 -12
- megadetector/classification/crop_detections.py +10 -10
- megadetector/classification/csv_to_json.py +8 -8
- megadetector/classification/detect_and_crop.py +13 -15
- megadetector/classification/efficientnet/model.py +8 -8
- megadetector/classification/efficientnet/utils.py +6 -5
- megadetector/classification/evaluate_model.py +7 -7
- megadetector/classification/identify_mislabeled_candidates.py +6 -6
- megadetector/classification/json_to_azcopy_list.py +1 -1
- megadetector/classification/json_validator.py +29 -32
- megadetector/classification/map_classification_categories.py +9 -9
- megadetector/classification/merge_classification_detection_output.py +12 -9
- megadetector/classification/prepare_classification_script.py +19 -19
- megadetector/classification/prepare_classification_script_mc.py +26 -26
- megadetector/classification/run_classifier.py +4 -4
- megadetector/classification/save_mislabeled.py +6 -6
- megadetector/classification/train_classifier.py +1 -1
- megadetector/classification/train_classifier_tf.py +9 -9
- megadetector/classification/train_utils.py +10 -10
- megadetector/data_management/annotations/annotation_constants.py +1 -2
- megadetector/data_management/camtrap_dp_to_coco.py +79 -46
- megadetector/data_management/cct_json_utils.py +103 -103
- megadetector/data_management/cct_to_md.py +49 -49
- megadetector/data_management/cct_to_wi.py +33 -33
- megadetector/data_management/coco_to_labelme.py +75 -75
- megadetector/data_management/coco_to_yolo.py +210 -193
- megadetector/data_management/databases/add_width_and_height_to_db.py +86 -12
- megadetector/data_management/databases/combine_coco_camera_traps_files.py +40 -40
- megadetector/data_management/databases/integrity_check_json_db.py +228 -200
- megadetector/data_management/databases/subset_json_db.py +33 -33
- megadetector/data_management/generate_crops_from_cct.py +88 -39
- megadetector/data_management/get_image_sizes.py +54 -49
- megadetector/data_management/labelme_to_coco.py +133 -125
- megadetector/data_management/labelme_to_yolo.py +159 -73
- megadetector/data_management/lila/create_lila_blank_set.py +81 -83
- megadetector/data_management/lila/create_lila_test_set.py +32 -31
- megadetector/data_management/lila/create_links_to_md_results_files.py +18 -18
- megadetector/data_management/lila/download_lila_subset.py +21 -24
- megadetector/data_management/lila/generate_lila_per_image_labels.py +365 -107
- megadetector/data_management/lila/get_lila_annotation_counts.py +35 -33
- megadetector/data_management/lila/get_lila_image_counts.py +22 -22
- megadetector/data_management/lila/lila_common.py +73 -70
- megadetector/data_management/lila/test_lila_metadata_urls.py +28 -19
- megadetector/data_management/mewc_to_md.py +344 -340
- megadetector/data_management/ocr_tools.py +262 -255
- megadetector/data_management/read_exif.py +249 -227
- megadetector/data_management/remap_coco_categories.py +90 -28
- megadetector/data_management/remove_exif.py +81 -21
- megadetector/data_management/rename_images.py +187 -187
- megadetector/data_management/resize_coco_dataset.py +588 -120
- megadetector/data_management/speciesnet_to_md.py +41 -41
- megadetector/data_management/wi_download_csv_to_coco.py +55 -55
- megadetector/data_management/yolo_output_to_md_output.py +248 -122
- megadetector/data_management/yolo_to_coco.py +333 -191
- megadetector/detection/change_detection.py +832 -0
- megadetector/detection/process_video.py +340 -337
- megadetector/detection/pytorch_detector.py +358 -278
- megadetector/detection/run_detector.py +399 -186
- megadetector/detection/run_detector_batch.py +404 -377
- megadetector/detection/run_inference_with_yolov5_val.py +340 -327
- megadetector/detection/run_tiled_inference.py +257 -249
- megadetector/detection/tf_detector.py +24 -24
- megadetector/detection/video_utils.py +332 -295
- megadetector/postprocessing/add_max_conf.py +19 -11
- megadetector/postprocessing/categorize_detections_by_size.py +45 -45
- megadetector/postprocessing/classification_postprocessing.py +468 -433
- megadetector/postprocessing/combine_batch_outputs.py +23 -23
- megadetector/postprocessing/compare_batch_results.py +590 -525
- megadetector/postprocessing/convert_output_format.py +106 -102
- megadetector/postprocessing/create_crop_folder.py +347 -147
- megadetector/postprocessing/detector_calibration.py +173 -168
- megadetector/postprocessing/generate_csv_report.py +508 -499
- megadetector/postprocessing/load_api_results.py +48 -27
- megadetector/postprocessing/md_to_coco.py +133 -102
- megadetector/postprocessing/md_to_labelme.py +107 -90
- megadetector/postprocessing/md_to_wi.py +40 -40
- megadetector/postprocessing/merge_detections.py +92 -114
- megadetector/postprocessing/postprocess_batch_results.py +319 -301
- megadetector/postprocessing/remap_detection_categories.py +91 -38
- megadetector/postprocessing/render_detection_confusion_matrix.py +214 -205
- megadetector/postprocessing/repeat_detection_elimination/find_repeat_detections.py +57 -57
- megadetector/postprocessing/repeat_detection_elimination/remove_repeat_detections.py +27 -28
- megadetector/postprocessing/repeat_detection_elimination/repeat_detections_core.py +704 -679
- megadetector/postprocessing/separate_detections_into_folders.py +226 -211
- megadetector/postprocessing/subset_json_detector_output.py +265 -262
- megadetector/postprocessing/top_folders_to_bottom.py +45 -45
- megadetector/postprocessing/validate_batch_results.py +70 -70
- megadetector/taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py +52 -52
- megadetector/taxonomy_mapping/map_new_lila_datasets.py +18 -19
- megadetector/taxonomy_mapping/prepare_lila_taxonomy_release.py +54 -33
- megadetector/taxonomy_mapping/preview_lila_taxonomy.py +67 -67
- megadetector/taxonomy_mapping/retrieve_sample_image.py +16 -16
- megadetector/taxonomy_mapping/simple_image_download.py +8 -8
- megadetector/taxonomy_mapping/species_lookup.py +156 -74
- megadetector/taxonomy_mapping/taxonomy_csv_checker.py +14 -14
- megadetector/taxonomy_mapping/taxonomy_graph.py +10 -10
- megadetector/taxonomy_mapping/validate_lila_category_mappings.py +13 -13
- megadetector/utils/ct_utils.py +1049 -211
- megadetector/utils/directory_listing.py +21 -77
- megadetector/utils/gpu_test.py +22 -22
- megadetector/utils/md_tests.py +632 -529
- megadetector/utils/path_utils.py +1520 -431
- megadetector/utils/process_utils.py +41 -41
- megadetector/utils/split_locations_into_train_val.py +62 -62
- megadetector/utils/string_utils.py +148 -27
- megadetector/utils/url_utils.py +489 -176
- megadetector/utils/wi_utils.py +2658 -2526
- megadetector/utils/write_html_image_list.py +137 -137
- megadetector/visualization/plot_utils.py +34 -30
- megadetector/visualization/render_images_with_thumbnails.py +39 -74
- megadetector/visualization/visualization_utils.py +487 -435
- megadetector/visualization/visualize_db.py +232 -198
- megadetector/visualization/visualize_detector_output.py +82 -76
- {megadetector-5.0.28.dist-info → megadetector-10.0.0.dist-info}/METADATA +5 -2
- megadetector-10.0.0.dist-info/RECORD +139 -0
- {megadetector-5.0.28.dist-info → megadetector-10.0.0.dist-info}/WHEEL +1 -1
- megadetector/api/batch_processing/api_core/__init__.py +0 -0
- megadetector/api/batch_processing/api_core/batch_service/__init__.py +0 -0
- megadetector/api/batch_processing/api_core/batch_service/score.py +0 -439
- megadetector/api/batch_processing/api_core/server.py +0 -294
- megadetector/api/batch_processing/api_core/server_api_config.py +0 -97
- megadetector/api/batch_processing/api_core/server_app_config.py +0 -55
- megadetector/api/batch_processing/api_core/server_batch_job_manager.py +0 -220
- megadetector/api/batch_processing/api_core/server_job_status_table.py +0 -149
- megadetector/api/batch_processing/api_core/server_orchestration.py +0 -360
- megadetector/api/batch_processing/api_core/server_utils.py +0 -88
- megadetector/api/batch_processing/api_core_support/__init__.py +0 -0
- megadetector/api/batch_processing/api_core_support/aggregate_results_manually.py +0 -46
- megadetector/api/batch_processing/api_support/__init__.py +0 -0
- megadetector/api/batch_processing/api_support/summarize_daily_activity.py +0 -152
- megadetector/api/batch_processing/data_preparation/__init__.py +0 -0
- megadetector/api/synchronous/__init__.py +0 -0
- megadetector/api/synchronous/api_core/animal_detection_api/__init__.py +0 -0
- megadetector/api/synchronous/api_core/animal_detection_api/api_backend.py +0 -151
- megadetector/api/synchronous/api_core/animal_detection_api/api_frontend.py +0 -263
- megadetector/api/synchronous/api_core/animal_detection_api/config.py +0 -35
- megadetector/api/synchronous/api_core/tests/__init__.py +0 -0
- megadetector/api/synchronous/api_core/tests/load_test.py +0 -110
- megadetector/data_management/importers/add_nacti_sizes.py +0 -52
- megadetector/data_management/importers/add_timestamps_to_icct.py +0 -79
- megadetector/data_management/importers/animl_results_to_md_results.py +0 -158
- megadetector/data_management/importers/auckland_doc_test_to_json.py +0 -373
- megadetector/data_management/importers/auckland_doc_to_json.py +0 -201
- megadetector/data_management/importers/awc_to_json.py +0 -191
- megadetector/data_management/importers/bellevue_to_json.py +0 -272
- megadetector/data_management/importers/cacophony-thermal-importer.py +0 -793
- megadetector/data_management/importers/carrizo_shrubfree_2018.py +0 -269
- megadetector/data_management/importers/carrizo_trail_cam_2017.py +0 -289
- megadetector/data_management/importers/cct_field_adjustments.py +0 -58
- megadetector/data_management/importers/channel_islands_to_cct.py +0 -913
- megadetector/data_management/importers/eMammal/copy_and_unzip_emammal.py +0 -180
- megadetector/data_management/importers/eMammal/eMammal_helpers.py +0 -249
- megadetector/data_management/importers/eMammal/make_eMammal_json.py +0 -223
- megadetector/data_management/importers/ena24_to_json.py +0 -276
- megadetector/data_management/importers/filenames_to_json.py +0 -386
- megadetector/data_management/importers/helena_to_cct.py +0 -283
- megadetector/data_management/importers/idaho-camera-traps.py +0 -1407
- megadetector/data_management/importers/idfg_iwildcam_lila_prep.py +0 -294
- megadetector/data_management/importers/import_desert_lion_conservation_camera_traps.py +0 -387
- megadetector/data_management/importers/jb_csv_to_json.py +0 -150
- megadetector/data_management/importers/mcgill_to_json.py +0 -250
- megadetector/data_management/importers/missouri_to_json.py +0 -490
- megadetector/data_management/importers/nacti_fieldname_adjustments.py +0 -79
- megadetector/data_management/importers/noaa_seals_2019.py +0 -181
- megadetector/data_management/importers/osu-small-animals-to-json.py +0 -364
- megadetector/data_management/importers/pc_to_json.py +0 -365
- megadetector/data_management/importers/plot_wni_giraffes.py +0 -123
- megadetector/data_management/importers/prepare_zsl_imerit.py +0 -131
- megadetector/data_management/importers/raic_csv_to_md_results.py +0 -416
- megadetector/data_management/importers/rspb_to_json.py +0 -356
- megadetector/data_management/importers/save_the_elephants_survey_A.py +0 -320
- megadetector/data_management/importers/save_the_elephants_survey_B.py +0 -329
- megadetector/data_management/importers/snapshot_safari_importer.py +0 -758
- megadetector/data_management/importers/snapshot_serengeti_lila.py +0 -1067
- megadetector/data_management/importers/snapshotserengeti/make_full_SS_json.py +0 -150
- megadetector/data_management/importers/snapshotserengeti/make_per_season_SS_json.py +0 -153
- megadetector/data_management/importers/sulross_get_exif.py +0 -65
- megadetector/data_management/importers/timelapse_csv_set_to_json.py +0 -490
- megadetector/data_management/importers/ubc_to_json.py +0 -399
- megadetector/data_management/importers/umn_to_json.py +0 -507
- megadetector/data_management/importers/wellington_to_json.py +0 -263
- megadetector/data_management/importers/wi_to_json.py +0 -442
- megadetector/data_management/importers/zamba_results_to_md_results.py +0 -180
- megadetector/data_management/lila/add_locations_to_island_camera_traps.py +0 -101
- megadetector/data_management/lila/add_locations_to_nacti.py +0 -151
- megadetector/utils/azure_utils.py +0 -178
- megadetector/utils/sas_blob_utils.py +0 -509
- megadetector-5.0.28.dist-info/RECORD +0 -209
- /megadetector/{api/batch_processing/__init__.py → __init__.py} +0 -0
- {megadetector-5.0.28.dist-info → megadetector-10.0.0.dist-info}/licenses/LICENSE +0 -0
- {megadetector-5.0.28.dist-info → megadetector-10.0.0.dist-info}/top_level.txt +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
remap_detection_categories.py
|
|
4
4
|
|
|
5
|
-
Given a MegaDetector results file, remap the category IDs according to a specified
|
|
5
|
+
Given a MegaDetector results file, remap the category IDs according to a specified
|
|
6
6
|
dictionary, writing the results to a new file.
|
|
7
7
|
|
|
8
8
|
Currently only supports remapping detection categories, not classification categories.
|
|
@@ -11,8 +11,9 @@ Currently only supports remapping detection categories, not classification categ
|
|
|
11
11
|
|
|
12
12
|
#%% Constants and imports
|
|
13
13
|
|
|
14
|
-
import json
|
|
15
14
|
import os
|
|
15
|
+
import json
|
|
16
|
+
import argparse
|
|
16
17
|
|
|
17
18
|
from tqdm import tqdm
|
|
18
19
|
|
|
@@ -28,13 +29,13 @@ def remap_detection_categories(input_file,
|
|
|
28
29
|
overwrite=False):
|
|
29
30
|
"""
|
|
30
31
|
Given a MegaDetector results file [input_file], remap the category IDs according to the dictionary
|
|
31
|
-
[target_category_map], writing the results to [output_file]. The remapped dictionary needs to have
|
|
32
|
+
[target_category_map], writing the results to [output_file]. The remapped dictionary needs to have
|
|
32
33
|
the same category names as the input file's detection_categories dictionary.
|
|
33
|
-
|
|
34
|
+
|
|
34
35
|
Typically used to map, e.g., a variety of species to the class "mammal" or the class "animal".
|
|
35
|
-
|
|
36
|
+
|
|
36
37
|
Currently only supports remapping detection categories, not classification categories.
|
|
37
|
-
|
|
38
|
+
|
|
38
39
|
Args:
|
|
39
40
|
input_file (str): the MD .json results file to remap
|
|
40
41
|
output_file (str): the remapped .json file to write
|
|
@@ -43,21 +44,21 @@ def remap_detection_categories(input_file,
|
|
|
43
44
|
detection_categories dictionary.
|
|
44
45
|
extra_category_handling (str, optional): specifies what we should do if categories are present
|
|
45
46
|
in the source file that are not present in the target mapping:
|
|
46
|
-
|
|
47
|
+
|
|
47
48
|
* 'error' == Error in this case.
|
|
48
|
-
* 'drop_if_unused' == Don't include these in the output file's category mappings if they are
|
|
49
|
+
* 'drop_if_unused' == Don't include these in the output file's category mappings if they are
|
|
49
50
|
unused, error if they are.
|
|
50
51
|
* 'remap' == Remap to unused category IDs. This is reserved for future use, not currently
|
|
51
52
|
implemented.
|
|
52
53
|
overwrite (bool, optional): whether to overwrite [output_file] if it exists; if this is True and
|
|
53
54
|
[output_file] exists, this function is a no-op
|
|
54
|
-
|
|
55
|
+
|
|
55
56
|
"""
|
|
56
|
-
|
|
57
|
+
|
|
57
58
|
if os.path.exists(output_file) and (not overwrite):
|
|
58
|
-
print('File {} exists, bypassing remapping'.format(output_file))
|
|
59
|
+
print('File {} exists, bypassing remapping'.format(output_file))
|
|
59
60
|
return
|
|
60
|
-
|
|
61
|
+
|
|
61
62
|
assert os.path.isfile(input_file), \
|
|
62
63
|
'File {} does not exist'.format(input_file)
|
|
63
64
|
|
|
@@ -69,27 +70,27 @@ def remap_detection_categories(input_file,
|
|
|
69
70
|
d = json.load(f)
|
|
70
71
|
target_category_map = d['detection_categories']
|
|
71
72
|
assert isinstance(target_category_map,dict)
|
|
72
|
-
|
|
73
|
+
|
|
73
74
|
with open(input_file,'r') as f:
|
|
74
75
|
input_data = json.load(f)
|
|
75
|
-
|
|
76
|
+
|
|
76
77
|
input_images = input_data['images']
|
|
77
78
|
input_categories = input_data['detection_categories']
|
|
78
|
-
|
|
79
|
+
|
|
79
80
|
# Figure out which categories are actually used
|
|
80
81
|
used_category_ids = set()
|
|
81
82
|
for im in input_images:
|
|
82
|
-
|
|
83
|
+
|
|
83
84
|
if 'detections' not in im or im['detections'] is None:
|
|
84
85
|
continue
|
|
85
|
-
|
|
86
|
+
|
|
86
87
|
for det in im['detections']:
|
|
87
88
|
used_category_ids.add(det['category'])
|
|
88
89
|
used_category_names = [input_categories[cid] for cid in used_category_ids]
|
|
89
|
-
|
|
90
|
+
|
|
90
91
|
input_names_set = set(input_categories.values())
|
|
91
92
|
output_names_set = set(target_category_map.values())
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
# category_name = list(input_names_set)[0]
|
|
94
95
|
for category_name in input_names_set:
|
|
95
96
|
if category_name in output_names_set:
|
|
@@ -109,9 +110,9 @@ def remap_detection_categories(input_file,
|
|
|
109
110
|
else:
|
|
110
111
|
raise ValueError('Unrecognized extra category handling scheme {}'.format(
|
|
111
112
|
extra_category_handling))
|
|
112
|
-
|
|
113
|
+
|
|
113
114
|
output_category_name_to_output_category_id = invert_dictionary(target_category_map)
|
|
114
|
-
|
|
115
|
+
|
|
115
116
|
input_category_id_to_output_category_id = {}
|
|
116
117
|
for input_category_id in input_categories.keys():
|
|
117
118
|
category_name = input_categories[input_category_id]
|
|
@@ -120,51 +121,103 @@ def remap_detection_categories(input_file,
|
|
|
120
121
|
else:
|
|
121
122
|
output_category_id = output_category_name_to_output_category_id[category_name]
|
|
122
123
|
input_category_id_to_output_category_id[input_category_id] = output_category_id
|
|
123
|
-
|
|
124
|
+
|
|
124
125
|
# im = input_images[0]
|
|
125
126
|
for im in tqdm(input_images):
|
|
126
|
-
|
|
127
|
+
|
|
127
128
|
if 'detections' not in im or im['detections'] is None:
|
|
128
129
|
continue
|
|
129
|
-
|
|
130
|
+
|
|
130
131
|
# det = im['detections'][0]
|
|
131
132
|
for det in im['detections']:
|
|
132
133
|
det['category'] = input_category_id_to_output_category_id[det['category']]
|
|
133
|
-
|
|
134
|
+
|
|
134
135
|
input_data['detection_categories'] = target_category_map
|
|
135
|
-
|
|
136
|
+
|
|
136
137
|
with open(output_file,'w') as f:
|
|
137
138
|
json.dump(input_data,f,indent=1)
|
|
138
|
-
|
|
139
|
-
|
|
139
|
+
|
|
140
|
+
|
|
140
141
|
print('Saved remapped results to {}'.format(output_file))
|
|
141
|
-
|
|
142
|
+
|
|
142
143
|
|
|
143
144
|
#%% Interactive driver
|
|
144
145
|
|
|
145
146
|
if False:
|
|
146
|
-
|
|
147
|
+
|
|
147
148
|
pass
|
|
148
149
|
|
|
149
|
-
#%%
|
|
150
|
-
|
|
151
|
-
target_categories_file = '
|
|
150
|
+
#%%
|
|
151
|
+
|
|
152
|
+
target_categories_file = 'all-classes_usgs-only_yolov5x6.json'
|
|
152
153
|
target_category_map = target_categories_file
|
|
153
|
-
input_file = '
|
|
154
|
+
input_file = 'x.json'
|
|
154
155
|
|
|
155
156
|
output_file = input_file.replace('.json','_remapped.json')
|
|
156
157
|
assert output_file != input_file
|
|
157
158
|
overwrite = True
|
|
158
|
-
|
|
159
|
+
|
|
159
160
|
extra_category_handling = 'drop_if_unused'
|
|
160
|
-
|
|
161
|
+
|
|
161
162
|
remap_detection_categories(input_file=input_file,
|
|
162
163
|
output_file=output_file,
|
|
163
164
|
target_category_map=target_category_map,
|
|
164
|
-
extra_category_handling=extra_category_handling,
|
|
165
|
+
extra_category_handling=extra_category_handling,
|
|
165
166
|
overwrite=overwrite)
|
|
166
167
|
|
|
167
168
|
|
|
168
169
|
#%% Command-line driver
|
|
169
170
|
|
|
170
|
-
|
|
171
|
+
def main():
|
|
172
|
+
"""
|
|
173
|
+
Command-line interface for remapping detection categories in a MegaDetector results file
|
|
174
|
+
"""
|
|
175
|
+
|
|
176
|
+
parser = argparse.ArgumentParser(
|
|
177
|
+
description='Remap detection categories in a MegaDetector .json results file'
|
|
178
|
+
)
|
|
179
|
+
parser.add_argument(
|
|
180
|
+
'input_file',
|
|
181
|
+
type=str,
|
|
182
|
+
help='Path to the MegaDetector .json results file to remap'
|
|
183
|
+
)
|
|
184
|
+
parser.add_argument(
|
|
185
|
+
'output_file',
|
|
186
|
+
type=str,
|
|
187
|
+
help='Path to save the remapped .json results file'
|
|
188
|
+
)
|
|
189
|
+
parser.add_argument(
|
|
190
|
+
'target_category_map_file',
|
|
191
|
+
type=str,
|
|
192
|
+
help="Path to a MegaDetector .json results file from which to take the target 'detection_categories' mapping"
|
|
193
|
+
)
|
|
194
|
+
parser.add_argument(
|
|
195
|
+
'--extra_category_handling',
|
|
196
|
+
type=str,
|
|
197
|
+
default='error',
|
|
198
|
+
choices=['error', 'drop_if_unused'],
|
|
199
|
+
help="How to handle source categories not in target map (default: 'error')"
|
|
200
|
+
)
|
|
201
|
+
parser.add_argument(
|
|
202
|
+
'--overwrite',
|
|
203
|
+
type=str,
|
|
204
|
+
default='false',
|
|
205
|
+
choices=['true', 'false'],
|
|
206
|
+
help="Overwrite output file if it exists (default: 'false')."
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
args = parser.parse_args()
|
|
210
|
+
|
|
211
|
+
overwrite_bool = (args.overwrite.lower() == 'true')
|
|
212
|
+
|
|
213
|
+
print('Starting category remapping...')
|
|
214
|
+
|
|
215
|
+
remap_detection_categories(
|
|
216
|
+
input_file=args.input_file,
|
|
217
|
+
output_file=args.output_file,
|
|
218
|
+
target_category_map=args.target_category_map_file, # Pass filename directly
|
|
219
|
+
extra_category_handling=args.extra_category_handling,
|
|
220
|
+
overwrite=overwrite_bool)
|
|
221
|
+
|
|
222
|
+
if __name__ == '__main__':
|
|
223
|
+
main()
|