Spaces:
Runtime error
Runtime error
Iterating predictions even when no shark is sighted. Improving messages for info
Browse files- app.py +49 -17
- metrics.py +5 -3
app.py
CHANGED
@@ -60,8 +60,13 @@ def overlay_text_on_image(image, text_list, font=cv2.FONT_HERSHEY_SIMPLEX, font_
|
|
60 |
y0, dy = margin, int(relative*0.1) # start y position and line gap
|
61 |
for i, line in enumerate(text_list):
|
62 |
y = y0 + i * dy
|
63 |
-
|
64 |
-
|
|
|
|
|
|
|
|
|
|
|
65 |
return image
|
66 |
|
67 |
def overlay_logo(frame,logo, position=(10, 10)):
|
@@ -108,20 +113,46 @@ def draw_cockpit(frame, top_pred,cnt):
|
|
108 |
# Bullet points:
|
109 |
high_danger_color = (255,0,0)
|
110 |
low_danger_color = yellowgreen = (154,205,50)
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
danger_level = 'Danger Level: '
|
116 |
-
danger_level += 'High' if top_pred['
|
117 |
-
|
|
|
|
|
118 |
# Create a list of strings to plot
|
119 |
-
strings = [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
120 |
relative = max(frame.shape[0],frame.shape[1])
|
121 |
-
if top_pred['shark_sighted'] and top_pred['
|
122 |
frame = add_border(frame, color=high_danger_color, thickness=int(relative*0.025))
|
123 |
frame = add_danger_symbol_from_image(frame, top_pred)
|
124 |
-
elif top_pred['shark_sighted'] and not top_pred['
|
125 |
frame = add_border(frame, color=low_danger_color, thickness=int(relative*0.025))
|
126 |
frame = add_danger_symbol_from_image(frame, top_pred)
|
127 |
else:
|
@@ -192,13 +223,14 @@ def process_video(input_video, out_fps = 'auto', skip_frames = 7):
|
|
192 |
#
|
193 |
#video.write(cv2.cvtColor(frame, cv2.COLOR_RGB2BGR))
|
194 |
|
195 |
-
if cnt*skip_frames %2==0
|
196 |
prediction_frame = cv2.resize(prediction_frame, (int(width), int(height)))
|
197 |
frame = prediction_frame
|
198 |
|
199 |
-
if top_pred['shark_sighted']:
|
200 |
frame = draw_cockpit(frame, top_pred,cnt*skip_frames)
|
201 |
|
|
|
202 |
frame = cv2.resize(frame, (int(width), int(height)))
|
203 |
video.write(cv2.cvtColor(frame, cv2.COLOR_RGB2BGR))
|
204 |
|
@@ -208,10 +240,10 @@ def process_video(input_video, out_fps = 'auto', skip_frames = 7):
|
|
208 |
drawn_count += 1
|
209 |
#print('sending frame')
|
210 |
print('finalizing frame:',cnt)
|
211 |
-
print(pred_dashbord.shape)
|
212 |
-
print(frame.shape)
|
213 |
-
print(prediction_frame.shape)
|
214 |
-
print(width, height)
|
215 |
yield frame , None
|
216 |
|
217 |
cnt += 1
|
|
|
60 |
y0, dy = margin, int(relative*0.1) # start y position and line gap
|
61 |
for i, line in enumerate(text_list):
|
62 |
y = y0 + i * dy
|
63 |
+
if 'Shark' in line or 'Human' in line :
|
64 |
+
text_width, _ = cv2.getTextSize(line, font, font_size*1.5, font_thickness)[0]
|
65 |
+
cv2.putText(image, line, (image.shape[1] - text_width - margin, y), font, font_size*1.2, color, font_thickness, lineType=cv2.LINE_AA)
|
66 |
+
else:
|
67 |
+
text_width, _ = cv2.getTextSize(line, font, font_size, font_thickness)[0]
|
68 |
+
cv2.putText(image, line, (image.shape[1] - text_width - margin, y), font, font_size, color, font_thickness, lineType=cv2.LINE_AA)
|
69 |
+
|
70 |
return image
|
71 |
|
72 |
def overlay_logo(frame,logo, position=(10, 10)):
|
|
|
113 |
# Bullet points:
|
114 |
high_danger_color = (255,0,0)
|
115 |
low_danger_color = yellowgreen = (154,205,50)
|
116 |
+
|
117 |
+
if top_pred['shark_sighted'] > 0:
|
118 |
+
shark_suspected = 'Shark Sighted !'
|
119 |
+
elif top_pred['shark_suspected'] > 0:
|
120 |
+
shark_suspected = 'Shark Suspected !'
|
121 |
+
else:
|
122 |
+
shark_suspected = 'No Sharks ...'
|
123 |
+
|
124 |
+
if top_pred['human_sighted'] > 0:
|
125 |
+
human_suspected = 'Human Sighted !'
|
126 |
+
elif top_pred['human_suspected'] > 0:
|
127 |
+
human_suspected = 'Human Suspected !'
|
128 |
+
else:
|
129 |
+
human_suspected = 'No Humans ...'
|
130 |
+
|
131 |
+
shark_size_estimate = 'Biggest shark size: ' + str(top_pred['biggest_shark_size']) if top_pred['biggest_shark_size'] else 'Biggest shark size: ...'
|
132 |
+
shark_weight_estimate = 'Biggest shark weight: ' + str(top_pred['biggest_shark_weight']) if top_pred['biggest_shark_weight'] else 'Biggest shark weight: ...'
|
133 |
+
|
134 |
danger_level = 'Danger Level: '
|
135 |
+
danger_level += 'High' if top_pred['dangerous_dist_confirmed'] else 'Low'
|
136 |
+
|
137 |
+
danger_color = 'orangered' if top_pred['dangerous_dist_confirmed'] else 'yellowgreen'
|
138 |
+
|
139 |
# Create a list of strings to plot
|
140 |
+
strings = [shark_suspected, human_suspected, shark_size_estimate, shark_weight_estimate, danger_level]
|
141 |
+
|
142 |
+
# shark_sighted = 'Shark Detected: ' + str(top_pred['shark_sighted'])
|
143 |
+
# human_sighted = 'Number of Humans: ' + str(top_pred['human_n'])
|
144 |
+
# shark_size_estimate = 'Biggest shark size: ' + str(top_pred['biggest_shark_size'])
|
145 |
+
# shark_weight_estimate = 'Biggest shark weight: ' + str(top_pred['biggest_shark_weight'])
|
146 |
+
# danger_level = 'Danger Level: '
|
147 |
+
# danger_level += 'High' if top_pred['dangerous_dist'] else 'Low'
|
148 |
+
# danger_color = 'orangered' if top_pred['dangerous_dist'] else 'yellowgreen'
|
149 |
+
# # Create a list of strings to plot
|
150 |
+
# strings = [shark_sighted, human_sighted, shark_size_estimate, shark_weight_estimate, danger_level]
|
151 |
relative = max(frame.shape[0],frame.shape[1])
|
152 |
+
if top_pred['shark_sighted'] and top_pred['dangerous_dist_confirmed'] and cnt%2 == 0:
|
153 |
frame = add_border(frame, color=high_danger_color, thickness=int(relative*0.025))
|
154 |
frame = add_danger_symbol_from_image(frame, top_pred)
|
155 |
+
elif top_pred['shark_sighted'] and not top_pred['dangerous_dist_confirmed'] and cnt%2 == 0:
|
156 |
frame = add_border(frame, color=low_danger_color, thickness=int(relative*0.025))
|
157 |
frame = add_danger_symbol_from_image(frame, top_pred)
|
158 |
else:
|
|
|
223 |
#
|
224 |
#video.write(cv2.cvtColor(frame, cv2.COLOR_RGB2BGR))
|
225 |
|
226 |
+
if cnt*skip_frames %2==0:
|
227 |
prediction_frame = cv2.resize(prediction_frame, (int(width), int(height)))
|
228 |
frame = prediction_frame
|
229 |
|
230 |
+
#if top_pred['shark_sighted'] or top_pred['shark_suspected']:
|
231 |
frame = draw_cockpit(frame, top_pred,cnt*skip_frames)
|
232 |
|
233 |
+
|
234 |
frame = cv2.resize(frame, (int(width), int(height)))
|
235 |
video.write(cv2.cvtColor(frame, cv2.COLOR_RGB2BGR))
|
236 |
|
|
|
240 |
drawn_count += 1
|
241 |
#print('sending frame')
|
242 |
print('finalizing frame:',cnt)
|
243 |
+
#print(pred_dashbord.shape)
|
244 |
+
#print(frame.shape)
|
245 |
+
#print(prediction_frame.shape)
|
246 |
+
#print(width, height)
|
247 |
yield frame , None
|
248 |
|
249 |
cnt += 1
|
metrics.py
CHANGED
@@ -50,7 +50,7 @@ def mask_to_boxes(mask):
|
|
50 |
return ltrb_boxes
|
51 |
|
52 |
|
53 |
-
def get_top_predictions(prediction = None, threshold = 0.
|
54 |
if prediction is None:
|
55 |
return None, None
|
56 |
else:
|
@@ -68,10 +68,12 @@ def add_class_labels(top_pred = {}, class_labels = None):
|
|
68 |
return top_pred
|
69 |
else:
|
70 |
top_pred['pred_above_thresh_labels'] = [class_labels[x].lower() for x in top_pred['pred_above_thresh']]
|
|
|
|
|
71 |
top_pred['any_detection'] = len(top_pred['pred_above_thresh_labels']) > 0
|
72 |
if top_pred['any_detection']:
|
73 |
# Get shark / human / unknown vectors
|
74 |
-
top_pred['is_shark'] = np.array([1 if 'shark' in x else 0 for x in top_pred['pred_above_thresh_labels']])
|
75 |
top_pred['is_human'] = np.array([1 if 'person' in x else 1 if 'surfer' in x else 0 for x in top_pred['pred_above_thresh_labels']])
|
76 |
top_pred['is_unknown'] = np.array([1 if 'unidentifiable' in x else 0 for x in top_pred['pred_above_thresh_labels']])
|
77 |
# Get shark / human / unknown numbers of detections
|
@@ -101,7 +103,7 @@ def add_class_sizes(top_pred = {}, class_sizes = None):
|
|
101 |
else:
|
102 |
size_list.append(tmp_class_sizes['feet'])
|
103 |
|
104 |
-
if 'shark' in tmp_pred.lower():
|
105 |
shark_size_list.append(np.mean(tmp_class_sizes['feet']))
|
106 |
|
107 |
top_pred['pred_above_thresh_sizes'] = size_list
|
|
|
50 |
return ltrb_boxes
|
51 |
|
52 |
|
53 |
+
def get_top_predictions(prediction = None, threshold = 0.8):
|
54 |
if prediction is None:
|
55 |
return None, None
|
56 |
else:
|
|
|
68 |
return top_pred
|
69 |
else:
|
70 |
top_pred['pred_above_thresh_labels'] = [class_labels[x].lower() for x in top_pred['pred_above_thresh']]
|
71 |
+
#print(top_pred['pred_above_thresh_labels'])
|
72 |
+
#print(top_pred['pred_above_thresh_scores'])
|
73 |
top_pred['any_detection'] = len(top_pred['pred_above_thresh_labels']) > 0
|
74 |
if top_pred['any_detection']:
|
75 |
# Get shark / human / unknown vectors
|
76 |
+
top_pred['is_shark'] = np.array([1 if 'shark' in x and 'shadow' not in x else 0 for x in top_pred['pred_above_thresh_labels']])
|
77 |
top_pred['is_human'] = np.array([1 if 'person' in x else 1 if 'surfer' in x else 0 for x in top_pred['pred_above_thresh_labels']])
|
78 |
top_pred['is_unknown'] = np.array([1 if 'unidentifiable' in x else 0 for x in top_pred['pred_above_thresh_labels']])
|
79 |
# Get shark / human / unknown numbers of detections
|
|
|
103 |
else:
|
104 |
size_list.append(tmp_class_sizes['feet'])
|
105 |
|
106 |
+
if 'shark' in tmp_pred.lower() and 'shadow' not in tmp_pred.lower() :
|
107 |
shark_size_list.append(np.mean(tmp_class_sizes['feet']))
|
108 |
|
109 |
top_pred['pred_above_thresh_sizes'] = size_list
|