Beispiel #1
0
    def get_image(self, angle_idx):
        if self.is_test:
            self.angles_imgs_counter[angle_idx] += 1
            img = self.angles_imgs_lst[angle_idx][
                self.angles_imgs_counter[angle_idx]]
            if (IS_PI):
                self.socket.send_image(img)  # asynchronus send, w/ timeout
            gui_img_manager.add_img(img)
            return img
        else:
            if (IS_PI):
                gpio.setup(7, gpio.IN, pull_up_down=gpio.PUD_DOWN)
                should_enter = True
                try:
                    while True:
                        if (gpio.input(7) == 1):
                            should_enter = True

                        elif (should_enter):
                            img = self.one_still()
                            self.socket.send_image(img)
                            should_enter = False
                            return img

                except KeyboardInterrupt:
                    print('cam err!')

            else:  # gui
                img = self.socket.get_image()
                gui_img_manager.add_img(img)
                return img
Beispiel #2
0
    def get_image(self, angle_idx):
        if self.is_test:
            self.angles_imgs_counter[angle_idx] += 1
            img = self.angles_imgs_lst[angle_idx][
                self.angles_imgs_counter[angle_idx]]
            #        img = cv2.resize(img,(RESIZE_SIZE,RESIZE_SIZE))
            if (IS_PI):
                self.socket.send_image(img)  # asynchronus send, w/ timeout
            gui_img_manager.add_img(img)
            return img
        else:
            if (IS_PI):
                gpio.setmode(gpio.BOARD)
                gpio.setup(btn, gpio.IN, pull_up_down=gpio.PUD_DOWN)
                should_enter = True
                try:
                    print("plz press me honz")
                    while True:
                        if (gpio.input(btn) == 1):
                            should_enter = True

                        elif (should_enter):
                            img = self.one_still()

                            #img = cv2.resize(img,(RESIZE_SIZE,RESIZE_SIZE))
                            self.socket.send_image(img)
                            should_enter = False
                            gpio.cleanup()
                            return img

                except KeyboardInterrupt:
                    print('cam err!')

            else:  # gui
                img = self.socket.get_image()
                gui_img_manager.add_img(img)
                return img
Beispiel #3
0
    def main(self, img):

        edgeim, real_img = self.get_image_from_img(img, True)

        gui_img_manager.add_img(edgeim)

        try:
            egdeim_copy = copy.deepcopy(edgeim)
            ver, her = self.amen_yaavod(edgeim)
            if (DEBUG):
                self.draw_lines(ver, edgeim)
                self.draw_lines(her, edgeim)
            lines = self.filter_lines3(ver, her)
            points = self.get_point_for_rect_cut(lines)

            # find exectly the forth line
            croped_img, x_tikun, y_tikun = self.rect_cutter(
                egdeim_copy, [points[0], points[1]])

            forth_line = self.find_specific_line(croped_img,
                                                 self.get_theta(lines[1]),
                                                 lines, x_tikun, y_tikun)
            # get final points
            final_points = self.get_final_points(lines, forth_line, x_tikun,
                                                 y_tikun)
            #                self.draw_lines_by_points(final_points,egdeim_copy)
            gui_img_manager.add_img(self.get_line_image(final_points, edgeim))
            img = self.projection(final_points, real_img, RESIZE_WIDTH,
                                  RESIZE_HEIGHT)
            edgeim = self.projection(final_points, edgeim, RESIZE_WIDTH,
                                     RESIZE_HEIGHT)
            gui_img_manager.add_img(img)
            return img, edgeim
        except:
            print("identify board has failed")
            return real_img, edgeim
Beispiel #4
0
    def main(self, real_img, edgeim):

        def get_theta(line):
            if line[2] == line[0]:
                return math.pi / 2
            else:
                return (float)(math.atan2(float(line[3] - line[1]),
                                           float(line[2] - line[0]))) % math.pi

            """"""

        """
         do not use with vertical lines.
         """

        def get_y_point_on_line(line):
            x1 = line[0]
            y1 = line[1]
            y = y1 - (x1 - RESIZE_WIDTH // 2) * (line[3] - y1) * 1.0 / (line[2] - x1)
            return y

        """
        do not use with horizontal lines.
        """

        def get_x_point_on_line(line):
            x1 = line[0]
            y1 = line[1]
            return x1 - (y1 - RESIZE_HEIGHT // 2) * (line[2] - x1) * 1.0 / (line[3]  - y1)

        def get_theta_hor(line):
            angle = self.get_theta(line)
            if angle > math.pi / 2:
                return angle - math.pi
            return angle

        def get_theta_ver(line):
            return self.get_theta(line)
        try:
            hor, ver = self.get_lines(edgeim)

            hor = self.remove_bad_bottom_lines(hor,get_y_point_on_line,real_img)

            new_hor, best_hor_idx, hor_d = self.get_line_series(hor,
                                                             get_y_point_on_line, len(edgeim) * MIN_GRID_SIZE,
                                                             len(edgeim) * MAX_GRID_SIZE, 9)
            new_ver, best_ver_idx, ver_d = self.get_line_series(ver,
                                                             get_x_point_on_line, len(edgeim[0]) * MIN_GRID_SIZE,
                                                             len(edgeim[0]) * MAX_GRID_SIZE, 9)
            if(DEBUG):
                self.draw_lines(ver, edgeim)
                self.draw_lines(new_ver, edgeim)
                self.draw_lines(hor, edgeim)
                self.draw_lines(new_hor, edgeim)


            best_hor_idx = self.get_highest_horizontal_line_index(new_hor,
                                                                  best_hor_idx,
                                                                  hor_d,
                                                                  get_y_point_on_line, get_theta_hor)

            best_ver_pair = self.get_best_vertical_line_pair_index(new_ver,
                                                                  best_ver_idx,
                                                                  ver_d,
                                                                  get_x_point_on_line,
                                                                  get_theta_ver)

            line_num = 8-best_hor_idx
            left_num = min(best_ver_pair)
            right_num = max(best_ver_pair)
            up_line = new_hor[best_hor_idx]
            down_line = new_hor[8]
            left_line = new_ver[left_num]
            right_line = new_ver[right_num]
            """

            up_pos, up_angle = self.get_last_line_extrapolation(new_hor, best_hor, 0, get_theta_hor, lambda x: -get_y_point_on_line(x),
                                                                 hor_d)
            down_pos, down_angle = self.get_last_line_extrapolation(new_hor, best_hor, 8, get_theta_hor,
                                                                    lambda x: get_y_point_on_line(x), hor_d)
            left_pos, left_angle = self.get_last_line_extrapolation(new_ver, best_ver, 0, get_theta_ver,
                                                                    get_x_point_on_line, ver_d)
            right_pos, right_angle = self.get_last_line_extrapolation(new_ver, best_ver, 8, get_theta_ver,
                                                                     get_x_point_on_line, ver_d)
            up_point = (RESIZE_WIDTH * 1.0 / 2, -up_pos)
            down_point = (RESIZE_WIDTH * 1.0 / 2, -down_pos)
            left_point = (left_pos, RESIZE_HEIGHT * 1.0 / 2)
            right_point = (right_pos, RESIZE_HEIGHT * 1.0 / 2)
            points = [up_point, left_point, down_point, right_point]
            self.draw_points(real_img, points)
    #        print "up angle=" + str(up_angle)
    #        print "down angle=" + str(down_angle)

            up_line = self.make_hor_line(up_point, up_angle)
            down_line = self.make_hor_line(down_point, down_angle)
            left_line = self.make_ver_line(left_point, left_angle)
            right_line = self.make_ver_line(right_point, right_angle)
            """

            points = self.get_board_limits(up_line, right_line, down_line, left_line)
            if(DEBUG):
                self.draw_lines([up_line, left_line, right_line, down_line], edgeim)
                self.draw_points(real_img, points)
            proim = self.projection(points, real_img, [line_num,right_num,0 ,
                                                       left_num] )
            gui_img_manager.add_img(self.get_line_image(hor, edgeim))
            gui_img_manager.add_img(self.get_line_image(new_hor, edgeim))
            gui_img_manager.add_img(self.get_line_image([up_line, left_line, right_line, down_line], edgeim))
            gui_img_manager.add_img(proim)
            return proim
        except:
            print("cut board fixer has failed")
            return real_img