def callback(self, data): try: cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8") except CvBridgeError as e: print(e) center_dict = {'blue': 'None', 'red': 'None', 'green': 'None'} blue_center = Int64MultiArray() red_center = Int64MultiArray() green_center = Int64MultiArray() image, center_dict, blue_center, red_center, green_center = self.image_centers( cv_image, center_dict, blue_center, red_center, green_center) try: blue_direction = direction(blue_center, self.data_K, "blue") except: pass try: red_direction = direction(red_center, self.data_K, "red") except: pass try: green_direction = direction(green_center, self.data_K, "green") except: pass try: self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image, "bgr8")) if blue_direction.layout.dim[0].size != 0: self.marker_blue.publish(blue_direction) if red_direction.layout.dim[0].size != 0: self.marker_red.publish(red_direction) if green_direction.layout.dim[0].size != 0: self.marker_green.publish(green_direction) except CvBridgeError as e: print(e)
def check_goban_moved(prev_corners, current_corners): """Comprobamos si es posible el movimiento de tablero detectado. :Param prev_corners: corners detectados anteriormente :Type prev_corners: list :Param current_corners: corners detectados actualmente :Type current_corners: list :Return: True si el tablero se ha movido :Rtype: bool """ if not prev_corners or not current_corners: return True # dist_min_of_movement = get_max_edge(prev_corners)/(2*GOBAN_SIZE) " Comprobamos primero si existe mucho movimiento. " dist = [] directions = [] for i in xrange(NUM_EDGES): dist.append(abs(distance(prev_corners[i], current_corners[i]))) directions.append(direction(prev_corners[i], current_corners[i])) f = lambda x: x>1 dist_list = filter(f, dist) if len(dist_list) > 2: # min_mov=1/3 square TODO check impossible movement (Direcction) min_mov = get_max_edge(prev_corners)/((GOBAN_SIZE-1)*3.0) dist_list.sort() if (dist_list[-1] - dist_list[0]) < min_mov: return check_directions(directions) elif (dist_list[-1] - dist_list[-3]) < min_mov: return check_directions(directions) else: return False else: return False
def check_goban_moved(prev_corners, current_corners): """Comprobamos si es posible el movimiento de tablero detectado. :Param prev_corners: corners detectados anteriormente :Type prev_corners: list :Param current_corners: corners detectados actualmente :Type current_corners: list :Return: True si el tablero se ha movido :Rtype: bool """ if not prev_corners or not current_corners: return True dist_min_of_movement = get_max_edge(prev_corners) / (2 * GOBAN_SIZE) " Comprobamos primero si existe mucho movimiento. " dist = [] directions = [] for i in xrange(NUM_EDGES): dist.append(abs(distance(prev_corners[i], current_corners[i]))) directions.append(direction(prev_corners[i], current_corners[i])) f = lambda x: x > 1 dist_list = filter(f, dist) if len(dist_list) > 2: # min_mov=1/3 square TODO check impossible movement (Direcction) min_mov = get_max_edge(prev_corners) / ((GOBAN_SIZE - 1) * 3.0) dist_list.sort() if (dist_list[-1] - dist_list[0]) < min_mov: return check_directions(directions) elif (dist_list[-1] - dist_list[-3]) < min_mov: return check_directions(directions) else: return False else: return False
def get_velocity(filename, unique_id, savename): data = pd.read_csv(filename, encoding='utf-8') # extract columns hit_x = data['hit_x'] hit_y = data['hit_y'] hit_area = data['hit_area'] landing_x = data['landing_x'] landing_y = data['landing_y'] landing_area = data['landing_area'] time = data['time'] lose_reason = data['lose_reason'] ball_type = data['type'] data_num = data.shape[0] velocity = [] direction = [] for i in range(data_num): if type(lose_reason[i]) != float: velocity.append('0') direction.append('') continue # velocity v = functions.velocity(time[i], time[i + 1], hit_x[i], hit_y[i], landing_x[i], landing_y[i]) velocity.append(v) # direction (first para means diagonal angle) d = functions.direction(30, hit_x[i], hit_y[i], hit_area[i], landing_x[i], landing_y[i], landing_area[i]) direction.append(d) data['velocity'] = velocity data['direction'] = direction data.insert(loc=0, column='unique_id', value=unique_id) data.to_csv(savename, index=False, encoding='utf-8')
npoints = nose_point(frame, predictor, detector) w, h = 25, 20 multiple = 1 if npoints != None: if start: x, y = npoints start = False else: cv2.rectangle(frame, (x - w, y - h), (x + w, y + h), GREEN_COLOR, 2) cv2.line(frame, (x, y), npoints, BLUE_COLOR, 2) dir = direction(npoints, (x, y), w, h) drag = 17 scrollDrag = 1 # Diagonal moves if dir == 'leftdown': if not SCROLL_MODE: pyautogui.moveRel(-drag, drag) elif dir == 'leftup': if not SCROLL_MODE: pyautogui.moveRel(-drag, -drag) elif dir == 'rightdown': if not SCROLL_MODE: pyautogui.moveRel(drag, drag) elif dir == 'rightup': if not SCROLL_MODE: