Spaces:
Runtime error
Runtime error
fixing labels, putting border again
Browse files- app.py +44 -52
- inference.py +4 -4
- metrics.py +2 -0
- pre-requeriments.txt +0 -1
app.py
CHANGED
@@ -65,28 +65,31 @@ def overlay_text_on_image(image, text_list, font=cv2.FONT_HERSHEY_SIMPLEX, font_
|
|
65 |
cv2.putText(image, line, (image.shape[1] - text_width - margin, y), font, font_size, color, font_thickness, lineType=cv2.LINE_AA)
|
66 |
return image
|
67 |
|
68 |
-
def draw_cockpit(frame, top_pred,
|
69 |
-
#
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
#
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
|
|
88 |
return frame
|
89 |
|
|
|
|
|
90 |
def process_video(input_video, out_fps = 'auto', skip_frames = 7):
|
91 |
cap = cv2.VideoCapture(input_video)
|
92 |
|
@@ -107,46 +110,38 @@ def process_video(input_video, out_fps = 'auto', skip_frames = 7):
|
|
107 |
cnt = 0
|
108 |
|
109 |
while iterating:
|
110 |
-
print(cnt)
|
111 |
if (cnt % skip_frames) == 0:
|
112 |
-
|
|
|
113 |
display_frame, result = inference_frame_serial(frame)
|
114 |
-
video.write(cv2.cvtColor(display_frame, cv2.COLOR_BGR2RGB))
|
115 |
|
116 |
#print(result)
|
117 |
-
print('start top_pred')
|
118 |
top_pred = process_results_for_plot(predictions = result.numpy(),
|
119 |
classes = classes,
|
120 |
class_sizes = class_sizes_lower)
|
121 |
-
|
122 |
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
123 |
prediction_frame = cv2.cvtColor(display_frame, cv2.COLOR_BGR2RGB)
|
124 |
|
125 |
-
frame = cv2.resize(frame, (int(width*4), int(height*4)))
|
126 |
|
127 |
-
#
|
128 |
-
# print('first if')
|
129 |
-
# if ((cnt*skip_frames) % 2 == 0): # and top_pred['shark_sighted']:
|
130 |
-
# prediction_frame = cv2.resize(prediction_frame, (int(width*4), int(height*4)))
|
131 |
-
# frame = prediction_frame
|
132 |
-
|
133 |
-
# # Add cockpit to frame
|
134 |
-
# print('cockput if')
|
135 |
-
# if top_pred['shark_sighted']:
|
136 |
-
# frame = draw_cockpit(frame, top_pred, cnt*skip_frames)
|
137 |
|
138 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
pred_dashbord = prediction_dashboard(top_pred = top_pred)
|
140 |
#print('sending frame')
|
141 |
-
print('
|
142 |
-
print(
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
cnt += 1
|
148 |
iterating, frame = cap.read()
|
149 |
-
print('interating: ', iterating)
|
150 |
|
151 |
video.release()
|
152 |
yield None, None, output_path, None
|
@@ -154,15 +149,12 @@ def process_video(input_video, out_fps = 'auto', skip_frames = 7):
|
|
154 |
with gr.Blocks(theme=theme) as demo:
|
155 |
with gr.Row().style(equal_height=True,height='50%'):
|
156 |
input_video = gr.Video(label="Input")
|
157 |
-
output_video = gr.Video(label="Output Video")
|
158 |
-
|
159 |
-
with gr.Row():
|
160 |
processed_frames = gr.Image(label="Shark Engine")
|
|
|
161 |
dashboard = gr.Image(label="Dashboard")
|
162 |
-
original_frames = gr.Image(label="Original Frame") #, width='100%', height='100%')
|
163 |
|
164 |
-
|
165 |
-
|
166 |
|
167 |
with gr.Row():
|
168 |
paths = sorted(pathlib.Path('videos_example/').rglob('*.mp4'))
|
@@ -174,6 +166,6 @@ with gr.Blocks(theme=theme) as demo:
|
|
174 |
|
175 |
demo.queue()
|
176 |
if os.getenv('SYSTEM') == 'spaces':
|
177 |
-
demo.launch(width='40%',auth=(os.environ.get('SHARK_USERNAME'), os.environ.get('SHARK_PASSWORD'))
|
178 |
else:
|
179 |
-
demo.launch(
|
|
|
65 |
cv2.putText(image, line, (image.shape[1] - text_width - margin, y), font, font_size, color, font_thickness, lineType=cv2.LINE_AA)
|
66 |
return image
|
67 |
|
68 |
+
def draw_cockpit(frame, top_pred,cnt):
|
69 |
+
# Bullet points:
|
70 |
+
high_danger_color = (255,0,0)
|
71 |
+
low_danger_color = yellowgreen = (154,205,50)
|
72 |
+
shark_sighted = 'Shark Detected: ' + str(top_pred['shark_sighted'])
|
73 |
+
human_sighted = 'Number of Humans: ' + str(top_pred['human_n'])
|
74 |
+
shark_size_estimate = 'Biggest shark size: ' + str(top_pred['biggest_shark_size'])
|
75 |
+
shark_weight_estimate = 'Biggest shark weight: ' + str(top_pred['biggest_shark_weight'])
|
76 |
+
danger_level = 'Danger Level: '
|
77 |
+
danger_level += 'High' if top_pred['dangerous_dist'] else 'Low'
|
78 |
+
danger_color = 'orangered' if top_pred['dangerous_dist'] else 'yellowgreen'
|
79 |
+
# Create a list of strings to plot
|
80 |
+
strings = [shark_sighted, human_sighted, shark_size_estimate, shark_weight_estimate, danger_level]
|
81 |
+
relative = max(frame.shape[0],frame.shape[1])
|
82 |
+
if top_pred['shark_sighted'] and top_pred['dangerous_dist'] and cnt%2 == 0:
|
83 |
+
relative = max(frame.shape[0],frame.shape[1])
|
84 |
+
frame = add_border(frame, color=high_danger_color, thickness=int(relative*0.025))
|
85 |
+
elif top_pred['shark_sighted'] and not top_pred['dangerous_dist'] and cnt%2 == 0:
|
86 |
+
relative = max(frame.shape[0],frame.shape[1])
|
87 |
+
frame = add_border(frame, color=low_danger_color, thickness=int(relative*0.025))
|
88 |
+
overlay_text_on_image(frame, strings, font=cv2.FONT_HERSHEY_SIMPLEX, font_size=relative*0.0007, font_thickness=1, margin=int(relative*0.05), color=(255, 255, 255))
|
89 |
return frame
|
90 |
|
91 |
+
|
92 |
+
|
93 |
def process_video(input_video, out_fps = 'auto', skip_frames = 7):
|
94 |
cap = cv2.VideoCapture(input_video)
|
95 |
|
|
|
110 |
cnt = 0
|
111 |
|
112 |
while iterating:
|
|
|
113 |
if (cnt % skip_frames) == 0:
|
114 |
+
print('starting Frame: ', cnt)
|
115 |
+
# flip frame vertically
|
116 |
display_frame, result = inference_frame_serial(frame)
|
|
|
117 |
|
118 |
#print(result)
|
|
|
119 |
top_pred = process_results_for_plot(predictions = result.numpy(),
|
120 |
classes = classes,
|
121 |
class_sizes = class_sizes_lower)
|
|
|
122 |
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
123 |
prediction_frame = cv2.cvtColor(display_frame, cv2.COLOR_BGR2RGB)
|
124 |
|
|
|
125 |
|
126 |
+
#frame = cv2.resize(frame, (int(width), int(height)))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
|
128 |
+
if cnt*skip_frames %2==0 and top_pred['shark_sighted']:
|
129 |
+
#prediction_frame = cv2.resize(prediction_frame, (int(width), int(height)))
|
130 |
+
frame =prediction_frame
|
131 |
+
|
132 |
+
if top_pred['shark_sighted']:
|
133 |
+
frame = draw_cockpit(frame, top_pred,cnt*skip_frames)
|
134 |
+
video.write(frame)
|
135 |
pred_dashbord = prediction_dashboard(top_pred = top_pred)
|
136 |
#print('sending frame')
|
137 |
+
print('finalizing frame:',cnt)
|
138 |
+
print(pred_dashbord.shape)
|
139 |
+
print(frame.shape)
|
140 |
+
print(prediction_frame.shape)
|
141 |
+
yield prediction_frame,frame , None, pred_dashbord
|
142 |
+
print('overall count ', cnt)
|
143 |
cnt += 1
|
144 |
iterating, frame = cap.read()
|
|
|
145 |
|
146 |
video.release()
|
147 |
yield None, None, output_path, None
|
|
|
149 |
with gr.Blocks(theme=theme) as demo:
|
150 |
with gr.Row().style(equal_height=True,height='50%'):
|
151 |
input_video = gr.Video(label="Input")
|
|
|
|
|
|
|
152 |
processed_frames = gr.Image(label="Shark Engine")
|
153 |
+
output_video = gr.Video(label="Output Video")
|
154 |
dashboard = gr.Image(label="Dashboard")
|
|
|
155 |
|
156 |
+
with gr.Row():
|
157 |
+
original_frames = gr.Image(label="Original Frame").style( height=768)
|
158 |
|
159 |
with gr.Row():
|
160 |
paths = sorted(pathlib.Path('videos_example/').rglob('*.mp4'))
|
|
|
166 |
|
167 |
demo.queue()
|
168 |
if os.getenv('SYSTEM') == 'spaces':
|
169 |
+
demo.launch(width='40%',auth=(os.environ.get('SHARK_USERNAME'), os.environ.get('SHARK_PASSWORD')))
|
170 |
else:
|
171 |
+
demo.launch()
|
inference.py
CHANGED
@@ -53,11 +53,11 @@ classes = ['Beach',
|
|
53 |
'Dolphin',
|
54 |
'Miscellaneous',
|
55 |
'Unidentifiable shark',
|
56 |
-
'
|
57 |
'Dusty shark',
|
58 |
'Blue shark',
|
59 |
'Great white shark',
|
60 |
-
'
|
61 |
'Nurse shark',
|
62 |
'Silky shark',
|
63 |
'Leopard shark',
|
@@ -106,11 +106,11 @@ class_sizes = {'Beach': None,
|
|
106 |
'Dolphin': {'feet':[6.6, 13.1], 'meter': [2, 4], 'kg': [150, 650], 'pounds': [330, 1430]},
|
107 |
'Miscellaneous': None,
|
108 |
'Unidentifiable shark': {'feet': [2, 15], 'meter': [0.6, 4.5], 'kg': [50, 1000], 'pounds': [110, 2200]},
|
109 |
-
'
|
110 |
'Dusty shark': {'feet': [9, 14], 'meter': [3, 4.25], 'kg': [160, 180], 'pounds': [350, 400]},
|
111 |
'Blue shark': {'feet': [7.9, 12.5], 'meter': [2.4, 3], 'kg': [60, 120], 'pounds': [130, 260]},
|
112 |
'Great white shark': {'feet': [13.1, 20], 'meter': [4, 6], 'kg': [680, 1800], 'pounds': [1500, 4000]},
|
113 |
-
'
|
114 |
'Nurse shark': {'feet': [7.9, 9.8], 'meter': [2.4, 3], 'kg': [90, 115], 'pounds': [200, 250]},
|
115 |
'Silky shark': {'feet': [6.6, 8.2], 'meter': [2, 2.5], 'kg': [300, 380], 'pounds': [660, 840]},
|
116 |
'Leopard shark': {'feet': [3.9, 4.9], 'meter': [1.2, 1.5], 'kg': [11, 20], 'pounds': [22, 44]},
|
|
|
53 |
'Dolphin',
|
54 |
'Miscellaneous',
|
55 |
'Unidentifiable shark',
|
56 |
+
'C Shark',
|
57 |
'Dusty shark',
|
58 |
'Blue shark',
|
59 |
'Great white shark',
|
60 |
+
'Shark',
|
61 |
'Nurse shark',
|
62 |
'Silky shark',
|
63 |
'Leopard shark',
|
|
|
106 |
'Dolphin': {'feet':[6.6, 13.1], 'meter': [2, 4], 'kg': [150, 650], 'pounds': [330, 1430]},
|
107 |
'Miscellaneous': None,
|
108 |
'Unidentifiable shark': {'feet': [2, 15], 'meter': [0.6, 4.5], 'kg': [50, 1000], 'pounds': [110, 2200]},
|
109 |
+
'C Shark': {'feet': [4, 10], 'meter': [1.25, 3], 'kg': [50, 1000], 'pounds': [110, 2200]}, # Prob incorrect
|
110 |
'Dusty shark': {'feet': [9, 14], 'meter': [3, 4.25], 'kg': [160, 180], 'pounds': [350, 400]},
|
111 |
'Blue shark': {'feet': [7.9, 12.5], 'meter': [2.4, 3], 'kg': [60, 120], 'pounds': [130, 260]},
|
112 |
'Great white shark': {'feet': [13.1, 20], 'meter': [4, 6], 'kg': [680, 1800], 'pounds': [1500, 4000]},
|
113 |
+
'Shark': {'feet': [7.2, 10.8], 'meter': [2.2, 3.3], 'kg': [130, 300], 'pounds': [290, 660]},
|
114 |
'Nurse shark': {'feet': [7.9, 9.8], 'meter': [2.4, 3], 'kg': [90, 115], 'pounds': [200, 250]},
|
115 |
'Silky shark': {'feet': [6.6, 8.2], 'meter': [2, 2.5], 'kg': [300, 380], 'pounds': [660, 840]},
|
116 |
'Leopard shark': {'feet': [3.9, 4.9], 'meter': [1.2, 1.5], 'kg': [11, 20], 'pounds': [22, 44]},
|
metrics.py
CHANGED
@@ -49,6 +49,7 @@ def add_class_sizes(top_pred = {}, class_sizes = None):
|
|
49 |
tmp_class_sizes = class_sizes[tmp_pred.lower()]
|
50 |
if tmp_class_sizes == None:
|
51 |
size_list.append(None)
|
|
|
52 |
else:
|
53 |
size_list.append(tmp_class_sizes['feet'])
|
54 |
|
@@ -74,6 +75,7 @@ def add_class_weights(top_pred = {}, class_weights = None):
|
|
74 |
tmp_class_weights = class_weights[tmp_pred.lower()]
|
75 |
if tmp_class_weights == None:
|
76 |
weight_list.append(None)
|
|
|
77 |
else:
|
78 |
weight_list.append(tmp_class_weights['pounds'])
|
79 |
|
|
|
49 |
tmp_class_sizes = class_sizes[tmp_pred.lower()]
|
50 |
if tmp_class_sizes == None:
|
51 |
size_list.append(None)
|
52 |
+
continue
|
53 |
else:
|
54 |
size_list.append(tmp_class_sizes['feet'])
|
55 |
|
|
|
75 |
tmp_class_weights = class_weights[tmp_pred.lower()]
|
76 |
if tmp_class_weights == None:
|
77 |
weight_list.append(None)
|
78 |
+
continue
|
79 |
else:
|
80 |
weight_list.append(tmp_class_weights['pounds'])
|
81 |
|
pre-requeriments.txt
CHANGED
@@ -1,5 +1,4 @@
|
|
1 |
|
2 |
-
|
3 |
numpy==1.22.4
|
4 |
opencv-python-headless==4.5.5.64
|
5 |
openmim==0.1.5
|
|
|
1 |
|
|
|
2 |
numpy==1.22.4
|
3 |
opencv-python-headless==4.5.5.64
|
4 |
openmim==0.1.5
|