Anki2004 commited on
Commit
4854777
1 Parent(s): 0ba5855

initial commit

Browse files
Files changed (1) hide show
  1. ballTracking.ipynb +503 -0
ballTracking.ipynb ADDED
@@ -0,0 +1,503 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "nbformat": 4,
3
+ "nbformat_minor": 0,
4
+ "metadata": {
5
+ "colab": {
6
+ "provenance": [],
7
+ "gpuType": "T4"
8
+ },
9
+ "kernelspec": {
10
+ "name": "python3",
11
+ "display_name": "Python 3"
12
+ },
13
+ "language_info": {
14
+ "name": "python"
15
+ },
16
+ "accelerator": "GPU"
17
+ },
18
+ "cells": [
19
+ {
20
+ "cell_type": "code",
21
+ "execution_count": 3,
22
+ "metadata": {
23
+ "colab": {
24
+ "base_uri": "https://localhost:8080/"
25
+ },
26
+ "id": "mLWjwg8voVoQ",
27
+ "outputId": "6bcef00f-e4f3-4c97-cee0-d92cf6383d3c"
28
+ },
29
+ "outputs": [
30
+ {
31
+ "output_type": "stream",
32
+ "name": "stdout",
33
+ "text": [
34
+ "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (1.25.2)\n",
35
+ "Requirement already satisfied: opencv-python in /usr/local/lib/python3.10/dist-packages (4.8.0.76)\n"
36
+ ]
37
+ }
38
+ ],
39
+ "source": [
40
+ "pip install numpy opencv-python\n"
41
+ ]
42
+ },
43
+ {
44
+ "cell_type": "code",
45
+ "source": [
46
+ "import numpy as np\n",
47
+ "import cv2\n",
48
+ "from collections import defaultdict\n",
49
+ "\n",
50
+ "\n",
51
+ "# Define color ranges (in HSV)\n",
52
+ "COLOR_RANGES = {\n",
53
+ " 'red': ([0, 100, 100], [10, 255, 255]),\n",
54
+ " 'blue': ([110, 100, 100], [130, 255, 255]),\n",
55
+ " 'green': ([50, 100, 100], [70, 255, 255]),\n",
56
+ " 'yellow': ([20, 100, 100], [30, 255, 255])\n",
57
+ "}\n",
58
+ "\n",
59
+ "def process_video(video_path):\n",
60
+ " cap = cv2.VideoCapture(video_path)\n",
61
+ "\n",
62
+ " frame_count = 0\n",
63
+ " ball_trackers = defaultdict(lambda: defaultdict(dict))\n",
64
+ " events = []\n",
65
+ "\n",
66
+ " while cap.isOpened():\n",
67
+ " ret, frame = cap.read()\n",
68
+ " if not ret:\n",
69
+ " break\n",
70
+ "\n",
71
+ " frame_count += 1\n",
72
+ "\n",
73
+ " balls = detect_balls(frame)\n",
74
+ " update_trackers(ball_trackers, balls, frame_count)\n",
75
+ " new_events = check_events(ball_trackers, frame_count)\n",
76
+ " events.extend(new_events)\n",
77
+ "\n",
78
+ " cap.release()\n",
79
+ " return events\n",
80
+ "\n"
81
+ ],
82
+ "metadata": {
83
+ "id": "pydVgym-odFz"
84
+ },
85
+ "execution_count": 4,
86
+ "outputs": []
87
+ },
88
+ {
89
+ "cell_type": "code",
90
+ "source": [
91
+ "def detect_balls(frame):\n",
92
+ " hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)\n",
93
+ " balls = {}\n",
94
+ "\n",
95
+ " for color, (lower, upper) in COLOR_RANGES.items():\n",
96
+ " mask = cv2.inRange(hsv, np.array(lower), np.array(upper))\n",
97
+ " mask = cv2.erode(mask, None, iterations=2)\n",
98
+ " mask = cv2.dilate(mask, None, iterations=2)\n",
99
+ "\n",
100
+ " contours, _ = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)\n",
101
+ "\n",
102
+ " for contour in contours:\n",
103
+ " if cv2.contourArea(contour) > 100: # Minimum area threshold\n",
104
+ " M = cv2.moments(contour)\n",
105
+ " center = (int(M[\"m10\"] / M[\"m00\"]), int(M[\"m01\"] / M[\"m00\"]))\n",
106
+ " balls[center] = color\n",
107
+ "\n",
108
+ " return balls"
109
+ ],
110
+ "metadata": {
111
+ "id": "z9rpgDjOovlP"
112
+ },
113
+ "execution_count": 5,
114
+ "outputs": []
115
+ },
116
+ {
117
+ "cell_type": "code",
118
+ "source": [
119
+ "def update_trackers(trackers, balls, frame_count):\n",
120
+ " for center, color in balls.items():\n",
121
+ " if color not in trackers or all(abs(existing_center[0] - center[0]) > 20 or abs(existing_center[1] - center[1]) > 20 for existing_center in trackers[color]):\n",
122
+ " trackers[color][center] = {'first_seen': frame_count, 'last_seen': frame_count, 'current_quadrant': get_quadrant(center)}\n",
123
+ " else:\n",
124
+ " closest_center = min(trackers[color], key=lambda x: ((x[0] - center[0])**2 + (x[1] - center[1])**2)**0.5)\n",
125
+ " trackers[color][closest_center]['last_seen'] = frame_count\n",
126
+ " trackers[color][closest_center]['current_quadrant'] = get_quadrant(center)\n",
127
+ " if closest_center != center:\n",
128
+ " trackers[color][center] = trackers[color].pop(closest_center)\n",
129
+ "\n",
130
+ "def get_quadrant(center):\n",
131
+ " x, y = center\n",
132
+ " if x < 320 and y < 240:\n",
133
+ " return 1\n",
134
+ " elif x >= 320 and y < 240:\n",
135
+ " return 2\n",
136
+ " elif x < 320 and y >= 240:\n",
137
+ " return 3\n",
138
+ " else:\n",
139
+ " return 4"
140
+ ],
141
+ "metadata": {
142
+ "id": "dPa63ZoAoz7H"
143
+ },
144
+ "execution_count": 6,
145
+ "outputs": []
146
+ },
147
+ {
148
+ "cell_type": "code",
149
+ "source": [
150
+ "def check_events(trackers, frame_count):\n",
151
+ " events = []\n",
152
+ " for color in list(trackers.keys()):\n",
153
+ " for center in list(trackers[color].keys()):\n",
154
+ " data = trackers[color][center]\n",
155
+ " if frame_count - data['last_seen'] > 5: # Ball disappeared\n",
156
+ " events.append({\n",
157
+ " 'time': data['last_seen'],\n",
158
+ " 'quadrant': data['current_quadrant'],\n",
159
+ " 'color': color,\n",
160
+ " 'type': 'Exit'\n",
161
+ " })\n",
162
+ " del trackers[color][center]\n",
163
+ " if not trackers[color]: # If this was the last ball of this color\n",
164
+ " del trackers[color]\n",
165
+ " elif data['first_seen'] == frame_count: # New ball appeared\n",
166
+ " events.append({\n",
167
+ " 'time': frame_count,\n",
168
+ " 'quadrant': data['current_quadrant'],\n",
169
+ " 'color': color,\n",
170
+ " 'type': 'Entry'\n",
171
+ " })\n",
172
+ " elif data['current_quadrant'] != get_quadrant(center): # Ball changed quadrant\n",
173
+ " events.append({\n",
174
+ " 'time': frame_count,\n",
175
+ " 'quadrant': data['current_quadrant'],\n",
176
+ " 'color': color,\n",
177
+ " 'type': 'Exit'\n",
178
+ " })\n",
179
+ " data['current_quadrant'] = get_quadrant(center)\n",
180
+ " events.append({\n",
181
+ " 'time': frame_count,\n",
182
+ " 'quadrant': data['current_quadrant'],\n",
183
+ " 'color': color,\n",
184
+ " 'type': 'Entry'\n",
185
+ " })\n",
186
+ " return events"
187
+ ],
188
+ "metadata": {
189
+ "id": "YWoyBRfHqHPJ"
190
+ },
191
+ "execution_count": 7,
192
+ "outputs": []
193
+ },
194
+ {
195
+ "cell_type": "code",
196
+ "source": [
197
+ "video_path = \"/content/sample.mp4\"\n",
198
+ "events = process_video(video_path)\n",
199
+ "\n",
200
+ "# Output events\n",
201
+ "for event in events:\n",
202
+ " print(f\"Time: {event['time']}, Quadrant: {event['quadrant']}, \"\n",
203
+ " f\"Color: {event['color']}, Type: {event['type']}\")"
204
+ ],
205
+ "metadata": {
206
+ "colab": {
207
+ "base_uri": "https://localhost:8080/"
208
+ },
209
+ "id": "00mLRHrOo7Q1",
210
+ "outputId": "52d32c49-1b8e-4846-9df8-e9373624fd20"
211
+ },
212
+ "execution_count": 11,
213
+ "outputs": [
214
+ {
215
+ "output_type": "stream",
216
+ "name": "stdout",
217
+ "text": [
218
+ "Time: 1, Quadrant: 4, Color: red, Type: Entry\n",
219
+ "Time: 1, Quadrant: 2, Color: red, Type: Entry\n",
220
+ "Time: 2, Quadrant: 2, Color: red, Type: Exit\n",
221
+ "Time: 14, Quadrant: 4, Color: red, Type: Exit\n",
222
+ "Time: 61, Quadrant: 4, Color: yellow, Type: Entry\n",
223
+ "Time: 62, Quadrant: 4, Color: yellow, Type: Entry\n",
224
+ "Time: 63, Quadrant: 4, Color: yellow, Type: Entry\n",
225
+ "Time: 63, Quadrant: 4, Color: red, Type: Entry\n",
226
+ "Time: 64, Quadrant: 4, Color: yellow, Type: Entry\n",
227
+ "Time: 64, Quadrant: 4, Color: red, Type: Entry\n",
228
+ "Time: 65, Quadrant: 2, Color: yellow, Type: Entry\n",
229
+ "Time: 65, Quadrant: 4, Color: red, Type: Entry\n",
230
+ "Time: 66, Quadrant: 2, Color: yellow, Type: Entry\n",
231
+ "Time: 61, Quadrant: 4, Color: yellow, Type: Exit\n",
232
+ "Time: 67, Quadrant: 2, Color: yellow, Type: Entry\n",
233
+ "Time: 62, Quadrant: 4, Color: yellow, Type: Exit\n",
234
+ "Time: 63, Quadrant: 4, Color: yellow, Type: Exit\n",
235
+ "Time: 64, Quadrant: 4, Color: yellow, Type: Exit\n",
236
+ "Time: 64, Quadrant: 4, Color: red, Type: Exit\n",
237
+ "Time: 65, Quadrant: 2, Color: yellow, Type: Exit\n",
238
+ "Time: 65, Quadrant: 4, Color: red, Type: Exit\n",
239
+ "Time: 66, Quadrant: 2, Color: yellow, Type: Exit\n",
240
+ "Time: 80, Quadrant: 2, Color: yellow, Type: Entry\n",
241
+ "Time: 78, Quadrant: 2, Color: yellow, Type: Exit\n",
242
+ "Time: 84, Quadrant: 4, Color: red, Type: Exit\n",
243
+ "Time: 99, Quadrant: 4, Color: red, Type: Entry\n",
244
+ "Time: 102, Quadrant: 4, Color: red, Type: Exit\n",
245
+ "Time: 111, Quadrant: 2, Color: red, Type: Entry\n",
246
+ "Time: 131, Quadrant: 4, Color: red, Type: Entry\n",
247
+ "Time: 131, Quadrant: 4, Color: red, Type: Exit\n",
248
+ "Time: 137, Quadrant: 4, Color: red, Type: Entry\n",
249
+ "Time: 137, Quadrant: 4, Color: red, Type: Exit\n",
250
+ "Time: 168, Quadrant: 2, Color: red, Type: Exit\n",
251
+ "Time: 177, Quadrant: 4, Color: red, Type: Entry\n",
252
+ "Time: 182, Quadrant: 2, Color: red, Type: Entry\n",
253
+ "Time: 182, Quadrant: 4, Color: red, Type: Exit\n",
254
+ "Time: 300, Quadrant: 2, Color: red, Type: Exit\n",
255
+ "Time: 309, Quadrant: 4, Color: red, Type: Entry\n",
256
+ "Time: 312, Quadrant: 2, Color: red, Type: Entry\n",
257
+ "Time: 314, Quadrant: 4, Color: red, Type: Entry\n",
258
+ "Time: 309, Quadrant: 4, Color: red, Type: Exit\n",
259
+ "Time: 316, Quadrant: 2, Color: red, Type: Entry\n",
260
+ "Time: 313, Quadrant: 2, Color: red, Type: Exit\n",
261
+ "Time: 315, Quadrant: 4, Color: red, Type: Exit\n",
262
+ "Time: 316, Quadrant: 2, Color: red, Type: Exit\n",
263
+ "Time: 335, Quadrant: 2, Color: red, Type: Entry\n",
264
+ "Time: 362, Quadrant: 4, Color: red, Type: Entry\n",
265
+ "Time: 363, Quadrant: 4, Color: red, Type: Entry\n",
266
+ "Time: 364, Quadrant: 4, Color: red, Type: Entry\n",
267
+ "Time: 364, Quadrant: 2, Color: red, Type: Entry\n",
268
+ "Time: 365, Quadrant: 4, Color: red, Type: Entry\n",
269
+ "Time: 366, Quadrant: 4, Color: red, Type: Entry\n",
270
+ "Time: 362, Quadrant: 4, Color: red, Type: Exit\n",
271
+ "Time: 363, Quadrant: 4, Color: red, Type: Exit\n",
272
+ "Time: 364, Quadrant: 4, Color: red, Type: Exit\n",
273
+ "Time: 364, Quadrant: 2, Color: red, Type: Exit\n",
274
+ "Time: 364, Quadrant: 2, Color: red, Type: Exit\n",
275
+ "Time: 365, Quadrant: 4, Color: red, Type: Exit\n",
276
+ "Time: 374, Quadrant: 2, Color: red, Type: Entry\n",
277
+ "Time: 387, Quadrant: 2, Color: red, Type: Exit\n",
278
+ "Time: 412, Quadrant: 2, Color: red, Type: Entry\n",
279
+ "Time: 420, Quadrant: 2, Color: red, Type: Exit\n",
280
+ "Time: 432, Quadrant: 4, Color: red, Type: Entry\n",
281
+ "Time: 434, Quadrant: 2, Color: red, Type: Entry\n",
282
+ "Time: 438, Quadrant: 4, Color: red, Type: Exit\n",
283
+ "Time: 442, Quadrant: 2, Color: red, Type: Exit\n",
284
+ "Time: 453, Quadrant: 2, Color: red, Type: Entry\n",
285
+ "Time: 458, Quadrant: 2, Color: red, Type: Exit\n",
286
+ "Time: 466, Quadrant: 2, Color: red, Type: Entry\n",
287
+ "Time: 474, Quadrant: 4, Color: red, Type: Entry\n",
288
+ "Time: 479, Quadrant: 4, Color: red, Type: Entry\n",
289
+ "Time: 479, Quadrant: 4, Color: red, Type: Exit\n",
290
+ "Time: 479, Quadrant: 4, Color: red, Type: Exit\n",
291
+ "Time: 497, Quadrant: 4, Color: red, Type: Entry\n",
292
+ "Time: 494, Quadrant: 2, Color: red, Type: Exit\n",
293
+ "Time: 499, Quadrant: 4, Color: red, Type: Exit\n",
294
+ "Time: 530, Quadrant: 4, Color: red, Type: Entry\n",
295
+ "Time: 530, Quadrant: 4, Color: red, Type: Exit\n",
296
+ "Time: 536, Quadrant: 4, Color: red, Type: Entry\n",
297
+ "Time: 536, Quadrant: 2, Color: red, Type: Entry\n",
298
+ "Time: 537, Quadrant: 4, Color: red, Type: Entry\n",
299
+ "Time: 536, Quadrant: 4, Color: red, Type: Exit\n",
300
+ "Time: 536, Quadrant: 2, Color: red, Type: Exit\n",
301
+ "Time: 542, Quadrant: 4, Color: red, Type: Entry\n",
302
+ "Time: 542, Quadrant: 2, Color: red, Type: Entry\n",
303
+ "Time: 539, Quadrant: 4, Color: red, Type: Exit\n",
304
+ "Time: 548, Quadrant: 4, Color: red, Type: Entry\n",
305
+ "Time: 547, Quadrant: 4, Color: red, Type: Exit\n",
306
+ "Time: 548, Quadrant: 2, Color: red, Type: Exit\n",
307
+ "Time: 548, Quadrant: 4, Color: red, Type: Exit\n",
308
+ "Time: 627, Quadrant: 2, Color: red, Type: Entry\n",
309
+ "Time: 628, Quadrant: 4, Color: red, Type: Entry\n",
310
+ "Time: 628, Quadrant: 4, Color: red, Type: Exit\n",
311
+ "Time: 635, Quadrant: 4, Color: red, Type: Entry\n",
312
+ "Time: 636, Quadrant: 4, Color: red, Type: Entry\n",
313
+ "Time: 637, Quadrant: 4, Color: red, Type: Entry\n",
314
+ "Time: 638, Quadrant: 2, Color: red, Type: Entry\n",
315
+ "Time: 634, Quadrant: 2, Color: red, Type: Exit\n",
316
+ "Time: 634, Quadrant: 4, Color: red, Type: Exit\n",
317
+ "Time: 635, Quadrant: 4, Color: red, Type: Exit\n",
318
+ "Time: 636, Quadrant: 4, Color: red, Type: Exit\n",
319
+ "Time: 637, Quadrant: 4, Color: red, Type: Exit\n",
320
+ "Time: 643, Quadrant: 2, Color: red, Type: Entry\n",
321
+ "Time: 638, Quadrant: 2, Color: red, Type: Exit\n",
322
+ "Time: 649, Quadrant: 2, Color: red, Type: Entry\n",
323
+ "Time: 645, Quadrant: 2, Color: red, Type: Exit\n",
324
+ "Time: 660, Quadrant: 2, Color: red, Type: Exit\n",
325
+ "Time: 700, Quadrant: 4, Color: red, Type: Entry\n",
326
+ "Time: 701, Quadrant: 4, Color: red, Type: Entry\n",
327
+ "Time: 702, Quadrant: 4, Color: red, Type: Entry\n",
328
+ "Time: 703, Quadrant: 4, Color: red, Type: Entry\n",
329
+ "Time: 704, Quadrant: 4, Color: red, Type: Entry\n",
330
+ "Time: 705, Quadrant: 2, Color: red, Type: Entry\n",
331
+ "Time: 700, Quadrant: 4, Color: red, Type: Exit\n",
332
+ "Time: 701, Quadrant: 4, Color: red, Type: Exit\n",
333
+ "Time: 702, Quadrant: 4, Color: red, Type: Exit\n",
334
+ "Time: 703, Quadrant: 4, Color: red, Type: Exit\n",
335
+ "Time: 709, Quadrant: 4, Color: red, Type: Entry\n",
336
+ "Time: 704, Quadrant: 4, Color: red, Type: Exit\n",
337
+ "Time: 706, Quadrant: 2, Color: red, Type: Exit\n",
338
+ "Time: 713, Quadrant: 2, Color: red, Type: Entry\n",
339
+ "Time: 710, Quadrant: 4, Color: red, Type: Exit\n",
340
+ "Time: 717, Quadrant: 2, Color: red, Type: Entry\n",
341
+ "Time: 720, Quadrant: 2, Color: red, Type: Exit\n",
342
+ "Time: 733, Quadrant: 4, Color: red, Type: Entry\n",
343
+ "Time: 737, Quadrant: 4, Color: red, Type: Entry\n",
344
+ "Time: 737, Quadrant: 2, Color: red, Type: Entry\n",
345
+ "Time: 738, Quadrant: 4, Color: red, Type: Entry\n",
346
+ "Time: 741, Quadrant: 2, Color: red, Type: Entry\n",
347
+ "Time: 736, Quadrant: 2, Color: red, Type: Exit\n",
348
+ "Time: 737, Quadrant: 2, Color: red, Type: Exit\n",
349
+ "Time: 738, Quadrant: 4, Color: red, Type: Exit\n",
350
+ "Time: 738, Quadrant: 4, Color: red, Type: Exit\n",
351
+ "Time: 738, Quadrant: 4, Color: red, Type: Exit\n",
352
+ "Time: 741, Quadrant: 2, Color: red, Type: Exit\n",
353
+ "Time: 790, Quadrant: 4, Color: red, Type: Entry\n",
354
+ "Time: 792, Quadrant: 4, Color: red, Type: Entry\n",
355
+ "Time: 793, Quadrant: 4, Color: red, Type: Entry\n",
356
+ "Time: 790, Quadrant: 4, Color: red, Type: Exit\n",
357
+ "Time: 796, Quadrant: 2, Color: red, Type: Entry\n",
358
+ "Time: 792, Quadrant: 4, Color: red, Type: Exit\n",
359
+ "Time: 796, Quadrant: 2, Color: red, Type: Exit\n",
360
+ "Time: 818, Quadrant: 4, Color: red, Type: Entry\n",
361
+ "Time: 818, Quadrant: 4, Color: red, Type: Exit\n",
362
+ "Time: 885, Quadrant: 4, Color: red, Type: Entry\n",
363
+ "Time: 887, Quadrant: 4, Color: red, Type: Entry\n",
364
+ "Time: 887, Quadrant: 2, Color: red, Type: Entry\n",
365
+ "Time: 886, Quadrant: 4, Color: red, Type: Exit\n",
366
+ "Time: 892, Quadrant: 2, Color: red, Type: Entry\n",
367
+ "Time: 893, Quadrant: 2, Color: yellow, Type: Entry\n",
368
+ "Time: 887, Quadrant: 4, Color: red, Type: Exit\n",
369
+ "Time: 887, Quadrant: 2, Color: red, Type: Exit\n",
370
+ "Time: 897, Quadrant: 2, Color: red, Type: Entry\n",
371
+ "Time: 898, Quadrant: 4, Color: red, Type: Entry\n",
372
+ "Time: 899, Quadrant: 2, Color: red, Type: Entry\n",
373
+ "Time: 897, Quadrant: 2, Color: yellow, Type: Exit\n",
374
+ "Time: 903, Quadrant: 4, Color: red, Type: Entry\n",
375
+ "Time: 898, Quadrant: 2, Color: yellow, Type: Exit\n",
376
+ "Time: 898, Quadrant: 4, Color: red, Type: Exit\n",
377
+ "Time: 898, Quadrant: 2, Color: red, Type: Exit\n",
378
+ "Time: 898, Quadrant: 2, Color: red, Type: Exit\n",
379
+ "Time: 904, Quadrant: 4, Color: red, Type: Entry\n",
380
+ "Time: 905, Quadrant: 4, Color: red, Type: Entry\n",
381
+ "Time: 900, Quadrant: 2, Color: red, Type: Exit\n",
382
+ "Time: 906, Quadrant: 4, Color: red, Type: Entry\n",
383
+ "Time: 907, Quadrant: 2, Color: red, Type: Entry\n",
384
+ "Time: 907, Quadrant: 2, Color: red, Type: Entry\n",
385
+ "Time: 903, Quadrant: 4, Color: red, Type: Exit\n",
386
+ "Time: 904, Quadrant: 4, Color: red, Type: Exit\n",
387
+ "Time: 910, Quadrant: 2, Color: red, Type: Entry\n",
388
+ "Time: 908, Quadrant: 2, Color: red, Type: Exit\n",
389
+ "Time: 911, Quadrant: 4, Color: red, Type: Exit\n",
390
+ "Time: 911, Quadrant: 4, Color: red, Type: Exit\n",
391
+ "Time: 911, Quadrant: 2, Color: red, Type: Exit\n",
392
+ "Time: 920, Quadrant: 4, Color: red, Type: Entry\n",
393
+ "Time: 921, Quadrant: 4, Color: red, Type: Entry\n",
394
+ "Time: 929, Quadrant: 2, Color: red, Type: Exit\n",
395
+ "Time: 935, Quadrant: 2, Color: red, Type: Entry\n",
396
+ "Time: 935, Quadrant: 4, Color: red, Type: Exit\n",
397
+ "Time: 936, Quadrant: 2, Color: red, Type: Exit\n",
398
+ "Time: 943, Quadrant: 2, Color: red, Type: Entry\n",
399
+ "Time: 939, Quadrant: 4, Color: red, Type: Exit\n",
400
+ "Time: 944, Quadrant: 2, Color: red, Type: Exit\n",
401
+ "Time: 955, Quadrant: 2, Color: red, Type: Entry\n",
402
+ "Time: 955, Quadrant: 2, Color: red, Type: Exit\n",
403
+ "Time: 1017, Quadrant: 4, Color: red, Type: Entry\n",
404
+ "Time: 1031, Quadrant: 4, Color: red, Type: Entry\n",
405
+ "Time: 1034, Quadrant: 4, Color: red, Type: Entry\n",
406
+ "Time: 1035, Quadrant: 2, Color: red, Type: Entry\n",
407
+ "Time: 1035, Quadrant: 2, Color: red, Type: Entry\n",
408
+ "Time: 1036, Quadrant: 4, Color: red, Type: Entry\n",
409
+ "Time: 1036, Quadrant: 2, Color: red, Type: Entry\n",
410
+ "Time: 1031, Quadrant: 4, Color: red, Type: Exit\n",
411
+ "Time: 1037, Quadrant: 2, Color: red, Type: Entry\n",
412
+ "Time: 1037, Quadrant: 2, Color: red, Type: Entry\n",
413
+ "Time: 1039, Quadrant: 2, Color: red, Type: Entry\n",
414
+ "Time: 1040, Quadrant: 4, Color: red, Type: Entry\n",
415
+ "Time: 1035, Quadrant: 4, Color: red, Type: Exit\n",
416
+ "Time: 1035, Quadrant: 4, Color: red, Type: Exit\n",
417
+ "Time: 1035, Quadrant: 2, Color: red, Type: Exit\n",
418
+ "Time: 1041, Quadrant: 2, Color: red, Type: Entry\n",
419
+ "Time: 1043, Quadrant: 2, Color: red, Type: Entry\n",
420
+ "Time: 1038, Quadrant: 2, Color: red, Type: Exit\n",
421
+ "Time: 1038, Quadrant: 2, Color: red, Type: Exit\n",
422
+ "Time: 1040, Quadrant: 2, Color: red, Type: Exit\n",
423
+ "Time: 1040, Quadrant: 2, Color: red, Type: Exit\n",
424
+ "Time: 1044, Quadrant: 4, Color: red, Type: Exit\n",
425
+ "Time: 1044, Quadrant: 2, Color: red, Type: Exit\n",
426
+ "Time: 1044, Quadrant: 2, Color: red, Type: Exit\n",
427
+ "Time: 1048, Quadrant: 2, Color: red, Type: Exit\n",
428
+ "Time: 1050, Quadrant: 4, Color: red, Type: Exit\n",
429
+ "Time: 1082, Quadrant: 4, Color: yellow, Type: Entry\n",
430
+ "Time: 1083, Quadrant: 4, Color: red, Type: Entry\n",
431
+ "Time: 1083, Quadrant: 4, Color: yellow, Type: Entry\n",
432
+ "Time: 1084, Quadrant: 4, Color: yellow, Type: Entry\n",
433
+ "Time: 1085, Quadrant: 4, Color: yellow, Type: Entry\n",
434
+ "Time: 1082, Quadrant: 4, Color: yellow, Type: Exit\n",
435
+ "Time: 1083, Quadrant: 4, Color: yellow, Type: Exit\n",
436
+ "Time: 1084, Quadrant: 4, Color: yellow, Type: Exit\n",
437
+ "Time: 1089, Quadrant: 4, Color: red, Type: Exit\n",
438
+ "Time: 1095, Quadrant: 2, Color: red, Type: Entry\n",
439
+ "Time: 1141, Quadrant: 2, Color: red, Type: Exit\n",
440
+ "Time: 1168, Quadrant: 4, Color: red, Type: Entry\n",
441
+ "Time: 1170, Quadrant: 2, Color: red, Type: Entry\n",
442
+ "Time: 1171, Quadrant: 2, Color: red, Type: Exit\n",
443
+ "Time: 1177, Quadrant: 4, Color: red, Type: Exit\n",
444
+ "Time: 1195, Quadrant: 2, Color: red, Type: Entry\n",
445
+ "Time: 1203, Quadrant: 4, Color: red, Type: Entry\n",
446
+ "Time: 1200, Quadrant: 2, Color: red, Type: Exit\n",
447
+ "Time: 1209, Quadrant: 2, Color: red, Type: Entry\n",
448
+ "Time: 1205, Quadrant: 4, Color: red, Type: Exit\n",
449
+ "Time: 1220, Quadrant: 2, Color: red, Type: Exit\n",
450
+ "Time: 1227, Quadrant: 2, Color: red, Type: Entry\n",
451
+ "Time: 1232, Quadrant: 4, Color: red, Type: Entry\n",
452
+ "Time: 1234, Quadrant: 4, Color: red, Type: Entry\n",
453
+ "Time: 1230, Quadrant: 2, Color: red, Type: Exit\n",
454
+ "Time: 1237, Quadrant: 4, Color: red, Type: Exit\n",
455
+ "Time: 1243, Quadrant: 2, Color: red, Type: Entry\n",
456
+ "Time: 1243, Quadrant: 2, Color: red, Type: Exit\n",
457
+ "Time: 1251, Quadrant: 4, Color: red, Type: Entry\n",
458
+ "Time: 1251, Quadrant: 4, Color: red, Type: Exit\n",
459
+ "Time: 1260, Quadrant: 4, Color: red, Type: Entry\n",
460
+ "Time: 1261, Quadrant: 4, Color: red, Type: Entry\n",
461
+ "Time: 1262, Quadrant: 4, Color: red, Type: Entry\n",
462
+ "Time: 1262, Quadrant: 2, Color: red, Type: Entry\n",
463
+ "Time: 1259, Quadrant: 4, Color: red, Type: Exit\n",
464
+ "Time: 1260, Quadrant: 4, Color: red, Type: Exit\n",
465
+ "Time: 1266, Quadrant: 2, Color: red, Type: Entry\n",
466
+ "Time: 1261, Quadrant: 4, Color: red, Type: Exit\n",
467
+ "Time: 1262, Quadrant: 4, Color: red, Type: Exit\n",
468
+ "Time: 1267, Quadrant: 2, Color: red, Type: Exit\n",
469
+ "Time: 1286, Quadrant: 4, Color: red, Type: Exit\n",
470
+ "Time: 1287, Quadrant: 2, Color: red, Type: Exit\n",
471
+ "Time: 1312, Quadrant: 4, Color: red, Type: Entry\n",
472
+ "Time: 1312, Quadrant: 4, Color: red, Type: Entry\n",
473
+ "Time: 1312, Quadrant: 4, Color: red, Type: Exit\n",
474
+ "Time: 1312, Quadrant: 4, Color: red, Type: Exit\n",
475
+ "Time: 1319, Quadrant: 4, Color: yellow, Type: Entry\n",
476
+ "Time: 1321, Quadrant: 4, Color: red, Type: Entry\n",
477
+ "Time: 1318, Quadrant: 4, Color: yellow, Type: Exit\n",
478
+ "Time: 1319, Quadrant: 4, Color: yellow, Type: Exit\n",
479
+ "Time: 1321, Quadrant: 4, Color: red, Type: Exit\n",
480
+ "Time: 1331, Quadrant: 2, Color: red, Type: Entry\n",
481
+ "Time: 1332, Quadrant: 2, Color: red, Type: Exit\n",
482
+ "Time: 1341, Quadrant: 4, Color: red, Type: Entry\n",
483
+ "Time: 1350, Quadrant: 4, Color: red, Type: Exit\n",
484
+ "Time: 1383, Quadrant: 4, Color: red, Type: Entry\n",
485
+ "Time: 1383, Quadrant: 4, Color: red, Type: Exit\n",
486
+ "Time: 1390, Quadrant: 4, Color: red, Type: Entry\n",
487
+ "Time: 1395, Quadrant: 4, Color: red, Type: Entry\n",
488
+ "Time: 1391, Quadrant: 4, Color: red, Type: Exit\n"
489
+ ]
490
+ }
491
+ ]
492
+ },
493
+ {
494
+ "cell_type": "code",
495
+ "source": [],
496
+ "metadata": {
497
+ "id": "ijmEcqE3Hnnl"
498
+ },
499
+ "execution_count": null,
500
+ "outputs": []
501
+ }
502
+ ]
503
+ }