oskarastrom commited on
Commit
81970c6
·
1 Parent(s): fe5c71c

Travel distance

Browse files
Files changed (5) hide show
  1. aris.py +8 -0
  2. gradio_scripts/result_ui.py +2 -2
  3. inference.py +1 -0
  4. lib/fish_eye/tracker.py +15 -1
  5. 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" , "FRAME_NUM", "DIR", "R", "THETA", "L", "TIME", "DATE", "SPECIES"]
18
  info_headers = [
19
- "TOTAL_TIME", "DATE", "START", "END", "TOTAL_FRAMES", "FRAME_RATE", "",
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