diff --git a/final_project/mouse_class.py b/final_project/mouse_class.py index 52f97bf67dddbecc93032b5afa2427d12a630bd8..67f95dfbf423a12e3a74874146046eda8a008fea 100644 --- a/final_project/mouse_class.py +++ b/final_project/mouse_class.py @@ -3,7 +3,7 @@ import pyautogui from collections import Counter from screeninfo import get_monitors -from parameters import DETECTION_SIDE_MARGIN, DETECTION_BOTTOM_MARGIN, DEFAULT_HAND_SIZE +from parameters import DETECTION_SIDE_MARGIN, DEFAULT_HAND_SIZE, VISUALIZATION_MARGIN MONITOR = get_monitors()[0] WIDTH, HEIGHT = MONITOR.width, MONITOR.height @@ -27,9 +27,9 @@ class Mouse: def get_hand_pos(self, hand_pos): self.hand_pos_x = hand_pos[0] self.hand_pos_y = hand_pos[1] - #print(f"{self.hand_pos_x}, {self.hand_pos_y}") + #print(f"hand size: {self.hand_size}") + #print(f"hand coord: {self.hand_pos_x}, {self.hand_pos_y} \n") self.resize_coordinates() - #print(f"{self.hand_pos_x}, {self.hand_pos_y} \n") def add_prediction(self, prediction): @@ -52,7 +52,6 @@ class Mouse: if self.previous_action != action and self.previous_action == "drag": pyautogui.mouseUp() self.drag_start = None - print("drop") self.mouse_control(action) self.update_init(action) @@ -71,9 +70,11 @@ class Mouse: elif prediction == "move cursor": #hand_point = ([int(self.hand_pos_x*WIDTH), int(self.hand_pos_y*HEIGHT)]) - hand_x = np.clip(int(self.hand_pos_x*WIDTH), 0, WIDTH-1) - hand_y = np.clip(int(self.hand_pos_y*HEIGHT), 0, HEIGHT-1) - pyautogui.moveTo(hand_x, hand_y, tween = pyautogui.easeOutQuad) + hand_x = np.clip(int(self.hand_pos_x*WIDTH), VISUALIZATION_MARGIN, WIDTH-VISUALIZATION_MARGIN) + hand_y = np.clip(int(self.hand_pos_y*HEIGHT), VISUALIZATION_MARGIN, HEIGHT-VISUALIZATION_MARGIN) + #print(f"x: {hand_x}, y: {hand_y} \n width: {WIDTH}, height: {HEIGHT}") + #pyautogui.moveTo(hand_x, hand_y, tween = pyautogui.easeOutQuad) + pyautogui.moveTo(hand_x, hand_y) elif prediction == "stop moving": pyautogui.move(0, 0) # Stop cursor @@ -99,13 +100,13 @@ class Mouse: self.drag_start = self.stop_pos pyautogui.mouseDown(*self.drag_start) elif self.drag_start is None: - hand_x = np.clip(int(self.hand_pos_x*WIDTH), 0, WIDTH-1) - hand_y = np.clip(int(self.hand_pos_y*HEIGHT), 0, HEIGHT-1) + hand_x = np.clip(int(self.hand_pos_x*WIDTH), VISUALIZATION_MARGIN, WIDTH-VISUALIZATION_MARGIN) + hand_y = np.clip(int(self.hand_pos_y*HEIGHT), VISUALIZATION_MARGIN, HEIGHT-VISUALIZATION_MARGIN) self.drag_start = [hand_x, hand_y] pyautogui.mouseDown(*self.drag_start) - hand_x = np.clip(int(self.hand_pos_x*WIDTH), 0, WIDTH-1) - hand_y = np.clip(int(self.hand_pos_y*HEIGHT), 0, HEIGHT-1) + hand_x = np.clip(int(self.hand_pos_x*WIDTH), VISUALIZATION_MARGIN, WIDTH-VISUALIZATION_MARGIN) + hand_y = np.clip(int(self.hand_pos_y*HEIGHT), VISUALIZATION_MARGIN, HEIGHT-VISUALIZATION_MARGIN) pyautogui.moveTo(hand_x, hand_y) elif prediction == "drop": pyautogui.mouseUp() @@ -127,9 +128,19 @@ class Mouse: def resize_coordinates(self): max_x = 1 - 2 * DETECTION_SIDE_MARGIN - self.hand_pos_x = (self.hand_pos_x-DETECTION_SIDE_MARGIN) / (max_x - DETECTION_SIDE_MARGIN) #* DEFAULT_HAND_SIZE/self.hand_size - self.hand_pos_y = (self.hand_pos_y-DETECTION_SIDE_MARGIN) / (DETECTION_BOTTOM_MARGIN - DETECTION_SIDE_MARGIN) #* DEFAULT_HAND_SIZE/self.hand_size - + calculated_bottom_margin = (-0.7)*self.hand_size + 1 + #default_bottom_margin = -0.7*DEFAULT_HAND_SIZE + 1 + if self.hand_size > DEFAULT_HAND_SIZE: # close + #speed = default_bottom_margin / calculated_bottom_margin + speed = 2*(self.hand_size-DEFAULT_HAND_SIZE)**2 + 1 + else: # far away + #speed = calculated_bottom_margin / default_bottom_margin + speed = 7*(self.hand_size-DEFAULT_HAND_SIZE)**2 + 1 + + self.hand_pos_x = (self.hand_pos_x-DETECTION_SIDE_MARGIN) / (max_x - DETECTION_SIDE_MARGIN) * speed + self.hand_pos_y = (self.hand_pos_y-DETECTION_SIDE_MARGIN) / (calculated_bottom_margin - DETECTION_SIDE_MARGIN) * speed + + #print(f"DETECTION_BOTTOM_MARGIN: {calculated_bottom_margin} DEFAULT_BOTTOM_MARGIN: {default_bottom_margin} \n SPEED: {speed} \n") def get_hand_size(self, middle_tip_coord, palm_coord): self.hand_size = palm_coord[1] - middle_tip_coord[1] diff --git a/final_project/parameters.py b/final_project/parameters.py index 7e8af1567984ddae703c7b3b109d04a330cb25c7..8449e8ab3a4d34ad25fd12728d312683dc003ce3 100644 --- a/final_project/parameters.py +++ b/final_project/parameters.py @@ -1,4 +1,4 @@ - +#MODEL NAMES MOUSE_MODEL_NAME = 'mouse_v2.p' KEYBOARD_MODEL_NAME = "" @@ -10,6 +10,9 @@ CAMERA_MARGIN_BOTTON = 70 # DETECTION WINDOW DETECTION_SIDE_MARGIN = 0.06 -DETECTION_BOTTOM_MARGIN = 0.6 +#DETECTION_BOTTOM_MARGIN = 0.6 #not used DEFAULT_HAND_SIZE = 0.5 + +#VISUALIZATION WINDOW +VISUALIZATION_MARGIN = 10