megadetector 5.0.9__py3-none-any.whl → 5.0.11__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-5.0.9.dist-info → megadetector-5.0.11.dist-info}/LICENSE +0 -0
- {megadetector-5.0.9.dist-info → megadetector-5.0.11.dist-info}/METADATA +12 -11
- megadetector-5.0.11.dist-info/RECORD +5 -0
- megadetector-5.0.11.dist-info/top_level.txt +1 -0
- api/__init__.py +0 -0
- api/batch_processing/__init__.py +0 -0
- api/batch_processing/api_core/__init__.py +0 -0
- api/batch_processing/api_core/batch_service/__init__.py +0 -0
- api/batch_processing/api_core/batch_service/score.py +0 -439
- api/batch_processing/api_core/server.py +0 -294
- api/batch_processing/api_core/server_api_config.py +0 -98
- api/batch_processing/api_core/server_app_config.py +0 -55
- api/batch_processing/api_core/server_batch_job_manager.py +0 -220
- api/batch_processing/api_core/server_job_status_table.py +0 -152
- api/batch_processing/api_core/server_orchestration.py +0 -360
- api/batch_processing/api_core/server_utils.py +0 -92
- api/batch_processing/api_core_support/__init__.py +0 -0
- api/batch_processing/api_core_support/aggregate_results_manually.py +0 -46
- api/batch_processing/api_support/__init__.py +0 -0
- api/batch_processing/api_support/summarize_daily_activity.py +0 -152
- api/batch_processing/data_preparation/__init__.py +0 -0
- api/batch_processing/data_preparation/manage_local_batch.py +0 -2391
- api/batch_processing/data_preparation/manage_video_batch.py +0 -327
- api/batch_processing/integration/digiKam/setup.py +0 -6
- api/batch_processing/integration/digiKam/xmp_integration.py +0 -465
- api/batch_processing/integration/eMammal/test_scripts/config_template.py +0 -5
- api/batch_processing/integration/eMammal/test_scripts/push_annotations_to_emammal.py +0 -126
- api/batch_processing/integration/eMammal/test_scripts/select_images_for_testing.py +0 -55
- api/batch_processing/postprocessing/__init__.py +0 -0
- api/batch_processing/postprocessing/add_max_conf.py +0 -64
- api/batch_processing/postprocessing/categorize_detections_by_size.py +0 -163
- api/batch_processing/postprocessing/combine_api_outputs.py +0 -249
- api/batch_processing/postprocessing/compare_batch_results.py +0 -958
- api/batch_processing/postprocessing/convert_output_format.py +0 -397
- api/batch_processing/postprocessing/load_api_results.py +0 -195
- api/batch_processing/postprocessing/md_to_coco.py +0 -310
- api/batch_processing/postprocessing/md_to_labelme.py +0 -330
- api/batch_processing/postprocessing/merge_detections.py +0 -401
- api/batch_processing/postprocessing/postprocess_batch_results.py +0 -1904
- api/batch_processing/postprocessing/remap_detection_categories.py +0 -170
- api/batch_processing/postprocessing/render_detection_confusion_matrix.py +0 -661
- api/batch_processing/postprocessing/repeat_detection_elimination/find_repeat_detections.py +0 -211
- api/batch_processing/postprocessing/repeat_detection_elimination/remove_repeat_detections.py +0 -82
- api/batch_processing/postprocessing/repeat_detection_elimination/repeat_detections_core.py +0 -1631
- api/batch_processing/postprocessing/separate_detections_into_folders.py +0 -731
- api/batch_processing/postprocessing/subset_json_detector_output.py +0 -696
- api/batch_processing/postprocessing/top_folders_to_bottom.py +0 -223
- api/synchronous/__init__.py +0 -0
- api/synchronous/api_core/animal_detection_api/__init__.py +0 -0
- api/synchronous/api_core/animal_detection_api/api_backend.py +0 -152
- api/synchronous/api_core/animal_detection_api/api_frontend.py +0 -266
- api/synchronous/api_core/animal_detection_api/config.py +0 -35
- api/synchronous/api_core/animal_detection_api/data_management/annotations/annotation_constants.py +0 -47
- api/synchronous/api_core/animal_detection_api/detection/detector_training/copy_checkpoints.py +0 -43
- api/synchronous/api_core/animal_detection_api/detection/detector_training/model_main_tf2.py +0 -114
- api/synchronous/api_core/animal_detection_api/detection/process_video.py +0 -543
- api/synchronous/api_core/animal_detection_api/detection/pytorch_detector.py +0 -304
- api/synchronous/api_core/animal_detection_api/detection/run_detector.py +0 -627
- api/synchronous/api_core/animal_detection_api/detection/run_detector_batch.py +0 -1029
- api/synchronous/api_core/animal_detection_api/detection/run_inference_with_yolov5_val.py +0 -581
- api/synchronous/api_core/animal_detection_api/detection/run_tiled_inference.py +0 -754
- api/synchronous/api_core/animal_detection_api/detection/tf_detector.py +0 -165
- api/synchronous/api_core/animal_detection_api/detection/video_utils.py +0 -495
- api/synchronous/api_core/animal_detection_api/md_utils/azure_utils.py +0 -174
- api/synchronous/api_core/animal_detection_api/md_utils/ct_utils.py +0 -262
- api/synchronous/api_core/animal_detection_api/md_utils/directory_listing.py +0 -251
- api/synchronous/api_core/animal_detection_api/md_utils/matlab_porting_tools.py +0 -97
- api/synchronous/api_core/animal_detection_api/md_utils/path_utils.py +0 -416
- api/synchronous/api_core/animal_detection_api/md_utils/process_utils.py +0 -110
- api/synchronous/api_core/animal_detection_api/md_utils/sas_blob_utils.py +0 -509
- api/synchronous/api_core/animal_detection_api/md_utils/string_utils.py +0 -59
- api/synchronous/api_core/animal_detection_api/md_utils/url_utils.py +0 -144
- api/synchronous/api_core/animal_detection_api/md_utils/write_html_image_list.py +0 -226
- api/synchronous/api_core/animal_detection_api/md_visualization/visualization_utils.py +0 -841
- api/synchronous/api_core/tests/__init__.py +0 -0
- api/synchronous/api_core/tests/load_test.py +0 -110
- classification/__init__.py +0 -0
- classification/aggregate_classifier_probs.py +0 -108
- classification/analyze_failed_images.py +0 -227
- classification/cache_batchapi_outputs.py +0 -198
- classification/create_classification_dataset.py +0 -627
- classification/crop_detections.py +0 -516
- classification/csv_to_json.py +0 -226
- classification/detect_and_crop.py +0 -855
- classification/efficientnet/__init__.py +0 -9
- classification/efficientnet/model.py +0 -415
- classification/efficientnet/utils.py +0 -610
- classification/evaluate_model.py +0 -520
- classification/identify_mislabeled_candidates.py +0 -152
- classification/json_to_azcopy_list.py +0 -63
- classification/json_validator.py +0 -695
- classification/map_classification_categories.py +0 -276
- classification/merge_classification_detection_output.py +0 -506
- classification/prepare_classification_script.py +0 -194
- classification/prepare_classification_script_mc.py +0 -228
- classification/run_classifier.py +0 -286
- classification/save_mislabeled.py +0 -110
- classification/train_classifier.py +0 -825
- classification/train_classifier_tf.py +0 -724
- classification/train_utils.py +0 -322
- data_management/__init__.py +0 -0
- data_management/annotations/__init__.py +0 -0
- data_management/annotations/annotation_constants.py +0 -34
- data_management/camtrap_dp_to_coco.py +0 -238
- data_management/cct_json_utils.py +0 -395
- data_management/cct_to_md.py +0 -176
- data_management/cct_to_wi.py +0 -289
- data_management/coco_to_labelme.py +0 -272
- data_management/coco_to_yolo.py +0 -662
- data_management/databases/__init__.py +0 -0
- data_management/databases/add_width_and_height_to_db.py +0 -33
- data_management/databases/combine_coco_camera_traps_files.py +0 -206
- data_management/databases/integrity_check_json_db.py +0 -477
- data_management/databases/subset_json_db.py +0 -115
- data_management/generate_crops_from_cct.py +0 -149
- data_management/get_image_sizes.py +0 -188
- data_management/importers/add_nacti_sizes.py +0 -52
- data_management/importers/add_timestamps_to_icct.py +0 -79
- data_management/importers/animl_results_to_md_results.py +0 -158
- data_management/importers/auckland_doc_test_to_json.py +0 -372
- data_management/importers/auckland_doc_to_json.py +0 -200
- data_management/importers/awc_to_json.py +0 -189
- data_management/importers/bellevue_to_json.py +0 -273
- data_management/importers/cacophony-thermal-importer.py +0 -796
- data_management/importers/carrizo_shrubfree_2018.py +0 -268
- data_management/importers/carrizo_trail_cam_2017.py +0 -287
- data_management/importers/cct_field_adjustments.py +0 -57
- data_management/importers/channel_islands_to_cct.py +0 -913
- data_management/importers/eMammal/copy_and_unzip_emammal.py +0 -180
- data_management/importers/eMammal/eMammal_helpers.py +0 -249
- data_management/importers/eMammal/make_eMammal_json.py +0 -223
- data_management/importers/ena24_to_json.py +0 -275
- data_management/importers/filenames_to_json.py +0 -385
- data_management/importers/helena_to_cct.py +0 -282
- data_management/importers/idaho-camera-traps.py +0 -1407
- data_management/importers/idfg_iwildcam_lila_prep.py +0 -294
- data_management/importers/jb_csv_to_json.py +0 -150
- data_management/importers/mcgill_to_json.py +0 -250
- data_management/importers/missouri_to_json.py +0 -489
- data_management/importers/nacti_fieldname_adjustments.py +0 -79
- data_management/importers/noaa_seals_2019.py +0 -181
- data_management/importers/pc_to_json.py +0 -365
- data_management/importers/plot_wni_giraffes.py +0 -123
- data_management/importers/prepare-noaa-fish-data-for-lila.py +0 -359
- data_management/importers/prepare_zsl_imerit.py +0 -131
- data_management/importers/rspb_to_json.py +0 -356
- data_management/importers/save_the_elephants_survey_A.py +0 -320
- data_management/importers/save_the_elephants_survey_B.py +0 -332
- data_management/importers/snapshot_safari_importer.py +0 -758
- data_management/importers/snapshot_safari_importer_reprise.py +0 -665
- data_management/importers/snapshot_serengeti_lila.py +0 -1067
- data_management/importers/snapshotserengeti/make_full_SS_json.py +0 -150
- data_management/importers/snapshotserengeti/make_per_season_SS_json.py +0 -153
- data_management/importers/sulross_get_exif.py +0 -65
- data_management/importers/timelapse_csv_set_to_json.py +0 -490
- data_management/importers/ubc_to_json.py +0 -399
- data_management/importers/umn_to_json.py +0 -507
- data_management/importers/wellington_to_json.py +0 -263
- data_management/importers/wi_to_json.py +0 -441
- data_management/importers/zamba_results_to_md_results.py +0 -181
- data_management/labelme_to_coco.py +0 -548
- data_management/labelme_to_yolo.py +0 -272
- data_management/lila/__init__.py +0 -0
- data_management/lila/add_locations_to_island_camera_traps.py +0 -97
- data_management/lila/add_locations_to_nacti.py +0 -147
- data_management/lila/create_lila_blank_set.py +0 -557
- data_management/lila/create_lila_test_set.py +0 -151
- data_management/lila/create_links_to_md_results_files.py +0 -106
- data_management/lila/download_lila_subset.py +0 -177
- data_management/lila/generate_lila_per_image_labels.py +0 -515
- data_management/lila/get_lila_annotation_counts.py +0 -170
- data_management/lila/get_lila_image_counts.py +0 -111
- data_management/lila/lila_common.py +0 -300
- data_management/lila/test_lila_metadata_urls.py +0 -132
- data_management/ocr_tools.py +0 -874
- data_management/read_exif.py +0 -681
- data_management/remap_coco_categories.py +0 -84
- data_management/remove_exif.py +0 -66
- data_management/resize_coco_dataset.py +0 -189
- data_management/wi_download_csv_to_coco.py +0 -246
- data_management/yolo_output_to_md_output.py +0 -441
- data_management/yolo_to_coco.py +0 -676
- detection/__init__.py +0 -0
- detection/detector_training/__init__.py +0 -0
- detection/detector_training/model_main_tf2.py +0 -114
- detection/process_video.py +0 -703
- detection/pytorch_detector.py +0 -337
- detection/run_detector.py +0 -779
- detection/run_detector_batch.py +0 -1219
- detection/run_inference_with_yolov5_val.py +0 -917
- detection/run_tiled_inference.py +0 -935
- detection/tf_detector.py +0 -188
- detection/video_utils.py +0 -606
- docs/source/conf.py +0 -43
- md_utils/__init__.py +0 -0
- md_utils/azure_utils.py +0 -174
- md_utils/ct_utils.py +0 -612
- md_utils/directory_listing.py +0 -246
- md_utils/md_tests.py +0 -968
- md_utils/path_utils.py +0 -1044
- md_utils/process_utils.py +0 -157
- md_utils/sas_blob_utils.py +0 -509
- md_utils/split_locations_into_train_val.py +0 -228
- md_utils/string_utils.py +0 -92
- md_utils/url_utils.py +0 -323
- md_utils/write_html_image_list.py +0 -225
- md_visualization/__init__.py +0 -0
- md_visualization/plot_utils.py +0 -293
- md_visualization/render_images_with_thumbnails.py +0 -275
- md_visualization/visualization_utils.py +0 -1537
- md_visualization/visualize_db.py +0 -551
- md_visualization/visualize_detector_output.py +0 -406
- megadetector-5.0.9.dist-info/RECORD +0 -224
- megadetector-5.0.9.dist-info/top_level.txt +0 -8
- taxonomy_mapping/__init__.py +0 -0
- taxonomy_mapping/map_lila_taxonomy_to_wi_taxonomy.py +0 -491
- taxonomy_mapping/map_new_lila_datasets.py +0 -154
- taxonomy_mapping/prepare_lila_taxonomy_release.py +0 -142
- taxonomy_mapping/preview_lila_taxonomy.py +0 -591
- taxonomy_mapping/retrieve_sample_image.py +0 -71
- taxonomy_mapping/simple_image_download.py +0 -218
- taxonomy_mapping/species_lookup.py +0 -834
- taxonomy_mapping/taxonomy_csv_checker.py +0 -159
- taxonomy_mapping/taxonomy_graph.py +0 -346
- taxonomy_mapping/validate_lila_category_mappings.py +0 -83
- {megadetector-5.0.9.dist-info → megadetector-5.0.11.dist-info}/WHEEL +0 -0
detection/tf_detector.py
DELETED
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
|
|
3
|
-
tf_detector.py
|
|
4
|
-
|
|
5
|
-
Module containing the class TFDetector, for loading and running a TensorFlow detection model.
|
|
6
|
-
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
#%% Imports and constants
|
|
10
|
-
|
|
11
|
-
import numpy as np
|
|
12
|
-
|
|
13
|
-
from detection.run_detector import CONF_DIGITS, COORD_DIGITS, FAILURE_INFER
|
|
14
|
-
from md_utils.ct_utils import truncate_float
|
|
15
|
-
|
|
16
|
-
import tensorflow.compat.v1 as tf
|
|
17
|
-
|
|
18
|
-
print('TensorFlow version:', tf.__version__)
|
|
19
|
-
print('Is GPU available? tf.test.is_gpu_available:', tf.test.is_gpu_available())
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
#%% Classes
|
|
23
|
-
|
|
24
|
-
class TFDetector:
|
|
25
|
-
"""
|
|
26
|
-
A detector model loaded at the time of initialization. It is intended to be used with
|
|
27
|
-
TensorFlow-based versions of MegaDetector (v2, v3, or v4). If someone can find v1, I
|
|
28
|
-
suppose you could use this class for v1 also.
|
|
29
|
-
"""
|
|
30
|
-
|
|
31
|
-
#: TF versions of MD were trained with batch size of 1, and the resizing function is a
|
|
32
|
-
#: part of the inference graph, so this is fixed.
|
|
33
|
-
#:
|
|
34
|
-
#: :meta private:
|
|
35
|
-
BATCH_SIZE = 1
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def __init__(self, model_path):
|
|
39
|
-
"""
|
|
40
|
-
Loads a model from [model_path] and starts a tf.Session with this graph. Obtains
|
|
41
|
-
input and output tensor handles.
|
|
42
|
-
"""
|
|
43
|
-
|
|
44
|
-
detection_graph = TFDetector.__load_model(model_path)
|
|
45
|
-
self.tf_session = tf.Session(graph=detection_graph)
|
|
46
|
-
self.image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')
|
|
47
|
-
self.box_tensor = detection_graph.get_tensor_by_name('detection_boxes:0')
|
|
48
|
-
self.score_tensor = detection_graph.get_tensor_by_name('detection_scores:0')
|
|
49
|
-
self.class_tensor = detection_graph.get_tensor_by_name('detection_classes:0')
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
@staticmethod
|
|
53
|
-
def __round_and_make_float(d, precision=4):
|
|
54
|
-
return truncate_float(float(d), precision=precision)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
@staticmethod
|
|
58
|
-
def __convert_coords(tf_coords):
|
|
59
|
-
"""
|
|
60
|
-
Converts coordinates from the model's output format [y1, x1, y2, x2] to the
|
|
61
|
-
format used by our API and MegaDB: [x1, y1, width, height]. All coordinates
|
|
62
|
-
(including model outputs) are normalized in the range [0, 1].
|
|
63
|
-
|
|
64
|
-
Args:
|
|
65
|
-
tf_coords: np.array of predicted bounding box coordinates from the TF detector,
|
|
66
|
-
has format [y1, x1, y2, x2]
|
|
67
|
-
|
|
68
|
-
Returns: list of Python float, predicted bounding box coordinates [x1, y1, width, height]
|
|
69
|
-
"""
|
|
70
|
-
|
|
71
|
-
# change from [y1, x1, y2, x2] to [x1, y1, width, height]
|
|
72
|
-
width = tf_coords[3] - tf_coords[1]
|
|
73
|
-
height = tf_coords[2] - tf_coords[0]
|
|
74
|
-
|
|
75
|
-
new = [tf_coords[1], tf_coords[0], width, height] # must be a list instead of np.array
|
|
76
|
-
|
|
77
|
-
# convert numpy floats to Python floats
|
|
78
|
-
for i, d in enumerate(new):
|
|
79
|
-
new[i] = TFDetector.__round_and_make_float(d, precision=COORD_DIGITS)
|
|
80
|
-
return new
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
@staticmethod
|
|
84
|
-
def __load_model(model_path):
|
|
85
|
-
"""
|
|
86
|
-
Loads a detection model (i.e., create a graph) from a .pb file.
|
|
87
|
-
|
|
88
|
-
Args:
|
|
89
|
-
model_path: .pb file of the model.
|
|
90
|
-
|
|
91
|
-
Returns: the loaded graph.
|
|
92
|
-
"""
|
|
93
|
-
|
|
94
|
-
print('TFDetector: Loading graph...')
|
|
95
|
-
detection_graph = tf.Graph()
|
|
96
|
-
with detection_graph.as_default():
|
|
97
|
-
od_graph_def = tf.GraphDef()
|
|
98
|
-
with tf.gfile.GFile(model_path, 'rb') as fid:
|
|
99
|
-
serialized_graph = fid.read()
|
|
100
|
-
od_graph_def.ParseFromString(serialized_graph)
|
|
101
|
-
tf.import_graph_def(od_graph_def, name='')
|
|
102
|
-
print('TFDetector: Detection graph loaded.')
|
|
103
|
-
|
|
104
|
-
return detection_graph
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
def _generate_detections_one_image(self, image):
|
|
108
|
-
"""
|
|
109
|
-
Runs the detector on a single image.
|
|
110
|
-
"""
|
|
111
|
-
|
|
112
|
-
np_im = np.asarray(image, np.uint8)
|
|
113
|
-
im_w_batch_dim = np.expand_dims(np_im, axis=0)
|
|
114
|
-
|
|
115
|
-
# need to change the above line to the following if supporting a batch size > 1 and resizing to the same size
|
|
116
|
-
# np_images = [np.asarray(image, np.uint8) for image in images]
|
|
117
|
-
# images_stacked = np.stack(np_images, axis=0) if len(images) > 1 else np.expand_dims(np_images[0], axis=0)
|
|
118
|
-
|
|
119
|
-
# performs inference
|
|
120
|
-
(box_tensor_out, score_tensor_out, class_tensor_out) = self.tf_session.run(
|
|
121
|
-
[self.box_tensor, self.score_tensor, self.class_tensor],
|
|
122
|
-
feed_dict={self.image_tensor: im_w_batch_dim})
|
|
123
|
-
|
|
124
|
-
return box_tensor_out, score_tensor_out, class_tensor_out
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
def generate_detections_one_image(self, image, image_id, detection_threshold, image_size=None,
|
|
128
|
-
skip_image_resizing=False):
|
|
129
|
-
"""
|
|
130
|
-
Runs the detector on an image.
|
|
131
|
-
|
|
132
|
-
Args:
|
|
133
|
-
image (Image): the PIL Image object on which we should run the detector
|
|
134
|
-
image_id (str): a path to identify the image; will be in the "file" field of the output object
|
|
135
|
-
detection_threshold (float): only detections above this threshold will be included in the return
|
|
136
|
-
value
|
|
137
|
-
image_size (tuple, optional): image size to use for inference, only mess with this
|
|
138
|
-
if (a) you're using a model other than MegaDetector or (b) you know what you're
|
|
139
|
-
doing
|
|
140
|
-
skip_image_resizing (bool, optional): whether to skip internal image resizing (and rely on external
|
|
141
|
-
resizing)... not currently supported, but included here for compatibility with PTDetector.
|
|
142
|
-
|
|
143
|
-
Returns:
|
|
144
|
-
dict: a dictionary with the following fields:
|
|
145
|
-
- 'file' (filename, always present)
|
|
146
|
-
- 'max_detection_conf' (removed from MegaDetector output files by default, but generated here)
|
|
147
|
-
- 'detections' (a list of detection objects containing keys 'category', 'conf', and 'bbox')
|
|
148
|
-
- 'failure' (a failure string, or None if everything went fine)
|
|
149
|
-
"""
|
|
150
|
-
|
|
151
|
-
assert image_size is None, 'Image sizing not supported for TF detectors'
|
|
152
|
-
assert not skip_image_resizing, 'Image sizing not supported for TF detectors'
|
|
153
|
-
|
|
154
|
-
result = { 'file': image_id }
|
|
155
|
-
|
|
156
|
-
try:
|
|
157
|
-
b_box, b_score, b_class = self._generate_detections_one_image(image)
|
|
158
|
-
|
|
159
|
-
# our batch size is 1; need to loop the batch dim if supporting batch size > 1
|
|
160
|
-
boxes, scores, classes = b_box[0], b_score[0], b_class[0]
|
|
161
|
-
|
|
162
|
-
detections_cur_image = [] # will be empty for an image with no confident detections
|
|
163
|
-
max_detection_conf = 0.0
|
|
164
|
-
for b, s, c in zip(boxes, scores, classes):
|
|
165
|
-
if s > detection_threshold:
|
|
166
|
-
detection_entry = {
|
|
167
|
-
'category': str(int(c)), # use string type for the numerical class label, not int
|
|
168
|
-
'conf': truncate_float(float(s), # cast to float for json serialization
|
|
169
|
-
precision=CONF_DIGITS),
|
|
170
|
-
'bbox': TFDetector.__convert_coords(b)
|
|
171
|
-
}
|
|
172
|
-
detections_cur_image.append(detection_entry)
|
|
173
|
-
if s > max_detection_conf:
|
|
174
|
-
max_detection_conf = s
|
|
175
|
-
|
|
176
|
-
result['max_detection_conf'] = truncate_float(float(max_detection_conf),
|
|
177
|
-
precision=CONF_DIGITS)
|
|
178
|
-
result['detections'] = detections_cur_image
|
|
179
|
-
|
|
180
|
-
except Exception as e:
|
|
181
|
-
result['failure'] = FAILURE_INFER
|
|
182
|
-
print('TFDetector: image {} failed during inference: {}'.format(image_id, str(e)))
|
|
183
|
-
|
|
184
|
-
return result
|
|
185
|
-
|
|
186
|
-
# ...def generate_detections_one_image(...)
|
|
187
|
-
|
|
188
|
-
# ...class TFDetector
|