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
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
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
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