コード例 #1
0
    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)
コード例 #2
0
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
コード例 #3
0
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
コード例 #4
0
ファイル: raw2train.py プロジェクト: BoHauHuang/CoachAI
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')
コード例 #5
0
        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: