Spaces:
Runtime error
Runtime error
Commit
·
81970c6
1
Parent(s):
fe5c71c
Travel distance
Browse files- aris.py +8 -0
- gradio_scripts/result_ui.py +2 -2
- inference.py +1 -0
- lib/fish_eye/tracker.py +15 -1
- main.py +2 -0
aris.py
CHANGED
@@ -341,6 +341,7 @@ def add_metadata_to_result(aris_fp, json_data, beam_width_dir=BEAM_WIDTH_DIR):
|
|
341 |
}
|
342 |
|
343 |
def get_entry(fish):
|
|
|
344 |
if 'marking_frame' in fish:
|
345 |
frame_num = fish['marking_frame']
|
346 |
entry = None
|
@@ -364,10 +365,14 @@ def add_metadata_to_result(aris_fp, json_data, beam_width_dir=BEAM_WIDTH_DIR):
|
|
364 |
return None # TODO better error handling
|
365 |
|
366 |
entries = []
|
|
|
367 |
for fish in json_data['fish']:
|
368 |
entry = get_entry(fish)
|
369 |
entry['length'] = fish['length']*100
|
370 |
entry['direction'] = fish['direction']
|
|
|
|
|
|
|
371 |
entries.append(entry)
|
372 |
|
373 |
metadata["FISH"] = []
|
@@ -390,6 +395,9 @@ def add_metadata_to_result(aris_fp, json_data, beam_width_dir=BEAM_WIDTH_DIR):
|
|
390 |
fish_entry['FILE'] = 1
|
391 |
fish_entry['TOTAL'] = entry['fish_id']
|
392 |
fish_entry['FRAME_NUM'] = entry['frame_num']
|
|
|
|
|
|
|
393 |
fish_entry['DIR'] = upstream_motion_map[entry['direction']]
|
394 |
fish_entry['R'] = bin_num * pixel_meter_size + frame.windowstart
|
395 |
fish_entry['THETA'] = beam_width_data['beam_center'][beam_num]
|
|
|
341 |
}
|
342 |
|
343 |
def get_entry(fish):
|
344 |
+
print(fish)
|
345 |
if 'marking_frame' in fish:
|
346 |
frame_num = fish['marking_frame']
|
347 |
entry = None
|
|
|
365 |
return None # TODO better error handling
|
366 |
|
367 |
entries = []
|
368 |
+
print(json_data['fish'])
|
369 |
for fish in json_data['fish']:
|
370 |
entry = get_entry(fish)
|
371 |
entry['length'] = fish['length']*100
|
372 |
entry['direction'] = fish['direction']
|
373 |
+
entry['travel_dist'] = fish['travel_dist']
|
374 |
+
entry['start_frame_index'] = fish['start_frame_index']
|
375 |
+
entry['end_frame_index'] = fish['end_frame_index']
|
376 |
entries.append(entry)
|
377 |
|
378 |
metadata["FISH"] = []
|
|
|
395 |
fish_entry['FILE'] = 1
|
396 |
fish_entry['TOTAL'] = entry['fish_id']
|
397 |
fish_entry['FRAME_NUM'] = entry['frame_num']
|
398 |
+
fish_entry['START_FRAME'] = entry['start_frame_index']
|
399 |
+
fish_entry['END_FRAME'] = entry['end_frame_index']
|
400 |
+
fish_entry['TRAVEL'] = entry['travel_dist']
|
401 |
fish_entry['DIR'] = upstream_motion_map[entry['direction']]
|
402 |
fish_entry['R'] = bin_num * pixel_meter_size + frame.windowstart
|
403 |
fish_entry['THETA'] = beam_width_data['beam_center'][beam_num]
|
gradio_scripts/result_ui.py
CHANGED
@@ -14,9 +14,9 @@ js_update_tab_labels = """
|
|
14 |
}
|
15 |
"""
|
16 |
|
17 |
-
table_headers = ["TOTAL" , "
|
18 |
info_headers = [
|
19 |
-
"TOTAL_TIME", "DATE", "START", "END", "
|
20 |
"TOTAL_FISH", "UPSTREAM_FISH", "DOWNSTREAM_FISH", "NONDIRECTIONAL_FISH", "",
|
21 |
"UPSTREAM_MOTION", "INTENSITY", "THRESHOLD", "WATER_TEMP", "",
|
22 |
]
|
|
|
14 |
}
|
15 |
"""
|
16 |
|
17 |
+
table_headers = ["TOTAL", "START_FRAME", "END_FRAME", "DIR", "R", "THETA", "L", "TRAVEL"]
|
18 |
info_headers = [
|
19 |
+
"TOTAL_TIME", "DATE", "START", "END", "FRAME_RATE", "",
|
20 |
"TOTAL_FISH", "UPSTREAM_FISH", "DOWNSTREAM_FISH", "NONDIRECTIONAL_FISH", "",
|
21 |
"UPSTREAM_MOTION", "INTENSITY", "THRESHOLD", "WATER_TEMP", "",
|
22 |
]
|
inference.py
CHANGED
@@ -323,6 +323,7 @@ def do_tracking(all_preds, image_meter_width, image_meter_height, gp=None, max_a
|
|
323 |
pbar.update(1)
|
324 |
|
325 |
json_data = tracker.finalize(min_length=min_length)
|
|
|
326 |
|
327 |
return json_data
|
328 |
|
|
|
323 |
pbar.update(1)
|
324 |
|
325 |
json_data = tracker.finalize(min_length=min_length)
|
326 |
+
print(json_data['fish'])
|
327 |
|
328 |
return json_data
|
329 |
|
lib/fish_eye/tracker.py
CHANGED
@@ -20,6 +20,8 @@ class Tracker:
|
|
20 |
def update(self, dets=np.empty((0, 5))):
|
21 |
new_frame_entries = []
|
22 |
for track in self.algorithm.update(dets):
|
|
|
|
|
23 |
conf = 0
|
24 |
min_score = 1000000
|
25 |
for det in dets:
|
@@ -27,6 +29,8 @@ class Tracker:
|
|
27 |
if (score < min_score):
|
28 |
min_score = score
|
29 |
conf = det[4]
|
|
|
|
|
30 |
self.fish_ids[int(track[4])] += 1
|
31 |
new_frame_entries.append({
|
32 |
'fish_id': int(track[4]),
|
@@ -96,6 +100,8 @@ class Tracker:
|
|
96 |
start_bbox = boxes[0][0]
|
97 |
end_bbox = boxes[-1][0]
|
98 |
fish_entry['direction'] = Tracker.get_direction(start_bbox, end_bbox)
|
|
|
|
|
99 |
|
100 |
fish_entry['start_frame_index'] = boxes[0][1]
|
101 |
fish_entry['end_frame_index'] = boxes[-1][1]
|
@@ -103,7 +109,7 @@ class Tracker:
|
|
103 |
|
104 |
json_data['fish'].append(fish_entry)
|
105 |
|
106 |
-
|
107 |
|
108 |
# filter 'fish' field by fish length
|
109 |
json_data = Fish_Length.add_lengths(json_data)
|
@@ -157,6 +163,14 @@ class Tracker:
|
|
157 |
else:
|
158 |
return 'none'
|
159 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
160 |
@staticmethod
|
161 |
def count_dirs(json_data):
|
162 |
right = 0
|
|
|
20 |
def update(self, dets=np.empty((0, 5))):
|
21 |
new_frame_entries = []
|
22 |
for track in self.algorithm.update(dets):
|
23 |
+
|
24 |
+
# Match confidence with correct track
|
25 |
conf = 0
|
26 |
min_score = 1000000
|
27 |
for det in dets:
|
|
|
29 |
if (score < min_score):
|
30 |
min_score = score
|
31 |
conf = det[4]
|
32 |
+
|
33 |
+
# Assign Track
|
34 |
self.fish_ids[int(track[4])] += 1
|
35 |
new_frame_entries.append({
|
36 |
'fish_id': int(track[4]),
|
|
|
100 |
start_bbox = boxes[0][0]
|
101 |
end_bbox = boxes[-1][0]
|
102 |
fish_entry['direction'] = Tracker.get_direction(start_bbox, end_bbox)
|
103 |
+
|
104 |
+
fish_entry['travel_dist'] = Tracker.get_travel_distance(start_bbox, end_bbox, json_data['image_meter_width'], json_data['image_meter_height'])
|
105 |
|
106 |
fish_entry['start_frame_index'] = boxes[0][1]
|
107 |
fish_entry['end_frame_index'] = boxes[-1][1]
|
|
|
109 |
|
110 |
json_data['fish'].append(fish_entry)
|
111 |
|
112 |
+
print(json_data['fish'])
|
113 |
|
114 |
# filter 'fish' field by fish length
|
115 |
json_data = Fish_Length.add_lengths(json_data)
|
|
|
163 |
else:
|
164 |
return 'none'
|
165 |
|
166 |
+
@staticmethod
|
167 |
+
def get_travel_distance(start_bbox, end_bbox, image_meter_width, image_meter_height):
|
168 |
+
dx = (start_bbox[2] + start_bbox[0])/2 - (end_bbox[2] + end_bbox[0])/2
|
169 |
+
dx *= image_meter_width
|
170 |
+
dy = (start_bbox[3] + start_bbox[1])/2 - (end_bbox[3] + end_bbox[1])/2
|
171 |
+
dy *= image_meter_height
|
172 |
+
return np.sqrt(dx*dx + dy*dy)
|
173 |
+
|
174 |
@staticmethod
|
175 |
def count_dirs(json_data):
|
176 |
right = 0
|
main.py
CHANGED
@@ -47,8 +47,10 @@ def predict_task(filepath, hyperparams, gradio_progress=None):
|
|
47 |
# run detection + tracking
|
48 |
results = do_full_inference(dataloader, image_meter_width, image_meter_height, gp=gradio_progress, hyperparams=hyperparams)
|
49 |
|
|
|
50 |
# re-index results if desired - this should be done before writing the file
|
51 |
results = prep_for_mm(results)
|
|
|
52 |
results = add_metadata_to_result(filepath, results)
|
53 |
results['metadata']['hyperparameters'] = hyperparams
|
54 |
|
|
|
47 |
# run detection + tracking
|
48 |
results = do_full_inference(dataloader, image_meter_width, image_meter_height, gp=gradio_progress, hyperparams=hyperparams)
|
49 |
|
50 |
+
print(results['fish'])
|
51 |
# re-index results if desired - this should be done before writing the file
|
52 |
results = prep_for_mm(results)
|
53 |
+
print(results['fish'])
|
54 |
results = add_metadata_to_result(filepath, results)
|
55 |
results['metadata']['hyperparameters'] = hyperparams
|
56 |
|