From 67576ec7f189518174e4044f1386367d230381bd Mon Sep 17 00:00:00 2001 From: Hyan Date: Thu, 16 May 2024 12:00:46 -0300 Subject: [PATCH 1/2] [feat]: add laser point --- src/__main__.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/src/__main__.py b/src/__main__.py index f4154b2..cff3802 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -6,12 +6,12 @@ DNN = cv2.dnn.readNetFromCaffe(PROTO_TXT, CAFFE_MODEL) -cap = cv2.VideoCapture("data/4.mp4") +cap = cv2.VideoCapture("data/3.mp4") tracker = cv2.TrackerKCF_create() tracking = False prev_centers = [] -frame_count = 20 +frame_count = 4 while True: ret, frame = cap.read() @@ -51,10 +51,37 @@ current_center = (x + (w/2), y + (h/2)) cv2.circle(frame, (int(current_center[0]), int(current_center[1])), 5, (0, 0, 255), -1) + cat_left_edge = x + cat_right_edge = x + w + + height, width, _ = frame.shape + + right_edge = width-1 + left_edge = 0 + prev_centers.append(current_center) if len(prev_centers) > frame_count: prev_centers = prev_centers[-frame_count:] + + if len(prev_centers) == frame_count: + prev_center = prev_centers[0] + movement_vector = (current_center[0] - prev_center[0], current_center[1] - prev_center[1]) + next_position = (current_center[0] + movement_vector[0], current_center[1] + movement_vector[1]) + + if next_position[0] > current_center[0]: + laser_offset_x = 2 + + laser_x = cat_right_edge + (laser_offset_x * movement_vector[0]) + 50 + laser_y = cat_bottom_edge + movement_vector[1] + cv2.circle(frame, (int(laser_x), int(laser_y)), 5, (255, 255, 255), -1) + else: + laser_offset_x = -2 + + laser_x = cat_left_edge - (laser_offset_x * movement_vector[0]) - 50 + laser_y = cat_bottom_edge + movement_vector[1] + cv2.circle(frame, (int(laser_x), int(laser_y)), 5, (255, 255, 255), -1) + print("Tracking started") else: @@ -65,6 +92,15 @@ current_center = (x + (w/2), y + (h/2)) cv2.circle(frame, (int(current_center[0]), int(current_center[1])), 5, (0, 0, 255), -1) + cat_left_edge = x + cat_right_edge = x + w + cat_bottom_edge = y + h + + height, width, _ = frame.shape + + right_edge = width-1 + left_edge = 0 + prev_centers.append(current_center) if len(prev_centers) > frame_count: @@ -75,6 +111,19 @@ movement_vector = (current_center[0] - prev_center[0], current_center[1] - prev_center[1]) next_position = (current_center[0] + movement_vector[0], current_center[1] + movement_vector[1]) + if next_position[0] > current_center[0]: + laser_offset_x = 2 + + laser_x = cat_right_edge + (laser_offset_x * movement_vector[0]) + 50 + laser_y = cat_bottom_edge + movement_vector[1] + cv2.circle(frame, (int(laser_x), int(laser_y)), 5, (255, 255, 255), -1) + else: + laser_offset_x = -2 + + laser_x = cat_left_edge - (laser_offset_x * movement_vector[0]) - 50 + laser_y = cat_bottom_edge + movement_vector[1] + cv2.circle(frame, (int(laser_x), int(laser_y)), 5, (255, 255, 255), -1) + cv2.circle(frame, (int(next_position[0]), int(next_position[1])), 5, (0, 0, 255), -1) cv2.line(frame, (int(current_center[0]), int(current_center[1])), (int(next_position[0]), int(next_position[1])), (0, 255, 255), 2) else: From 8a8442e005f908d19bee25adad1ed540ac810e90 Mon Sep 17 00:00:00 2001 From: Hyan Date: Thu, 16 May 2024 12:39:13 -0300 Subject: [PATCH 2/2] [fix] : when approaching the frame edges points the laser to other side --- src/__main__.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/__main__.py b/src/__main__.py index cff3802..a250e64 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -112,12 +112,22 @@ next_position = (current_center[0] + movement_vector[0], current_center[1] + movement_vector[1]) if next_position[0] > current_center[0]: + if (cat_right_edge + 75) > right_edge: + laser_x = cat_left_edge - (laser_offset_x * movement_vector[0]) - 50 + laser_y = cat_bottom_edge + movement_vector[1] + cv2.circle(frame, (int(laser_x), int(laser_y)), 5, (255, 255, 255), -1) + laser_offset_x = 2 laser_x = cat_right_edge + (laser_offset_x * movement_vector[0]) + 50 laser_y = cat_bottom_edge + movement_vector[1] cv2.circle(frame, (int(laser_x), int(laser_y)), 5, (255, 255, 255), -1) - else: + else: + if (cat_left_edge - 75) < left_edge: + laser_x = cat_right_edge + (laser_offset_x * movement_vector[0]) + 50 + laser_y = cat_bottom_edge + movement_vector[1] + cv2.circle(frame, (int(laser_x), int(laser_y)), 5, (255, 255, 255), -1) + laser_offset_x = -2 laser_x = cat_left_edge - (laser_offset_x * movement_vector[0]) - 50