def get_shared_options(is_forward): # (Downward, Forward) return [ # Global options.BoolOption('in_simulator', False), options.BoolOption('preprocess_debug', False), options.BoolOption('thresh_debug', True), options.BoolOption('contour_debug', False), options.BoolOption('bins_debug', True), options.BoolOption('funnels_debug', False), # Preprocess options.IntOption('gaussian_kernel', (5, 5)[is_forward], 1, 40), options.IntOption('gaussian_stdev', 20, 0, 40), # Threshing options.IntOption('erode_size', (3, 5)[is_forward], 1, 40), options.IntOption('thresh_size', (15, 15)[is_forward], 1, 100), options.IntOption("lab_b_min_red_bin", 140, 0, 255), options.IntOption("lab_b_max_red_bin", 250, 0, 255), options.IntOption("color_dist_min_red_funnel", (137, 0)[is_forward], 0, 255), options.IntOption("color_dist_max_red_funnel", (250, 35)[is_forward], 0, 255), options.IntOption("color_dist_min_yellow_funnel", (0, -1)[is_forward], 0, 255), options.IntOption("color_dist_max_yellow_funnel", (25, -1)[is_forward], 0, 255), # Contouring options.IntOption('min_area', (50, 100)[is_forward], 1, 2000), options.IntOption('min_y', (0, 200)[is_forward], 0, 2000), options.DoubleOption('min_circularity', (0.8, 0.1)[is_forward], 0, 1), options.DoubleOption('max_rectangularity', 0.9, 0, 1), # Binning options.DoubleOption('max_joining_dist', 120, 0, 500), ]
options.IntOption('blur_kernel', 3, 0, 255), options.IntOption('blur_std', 10, 0, 500), options.DoubleOption('resize_width_scale', 0.5, 0, 1), options.DoubleOption('resize_height_scale', 0.5, 0, 1), options.IntOption('dilate_kernel', 1, 0, 255), options.IntOption('erode_kernel', 1, 0, 255), options.IntOption('min_contour_area', 30, 0, 500), options.DoubleOption('min_contour_rect', 0.4, 0, 1), options.DoubleOption('min_contour_ratio', 4.5, 0, 10), options.DoubleOption('max_angle_from_vertical', 15, 0, 90), options.DoubleOption('min_length', 15, 0, 500), options.IntOption('auto_distance_percentile', 25, 0, 100), options.IntOption('nonblack_thresh', 900, 0, 10000), options.IntOption('water_a_thresh', 20, 0, 255), options.IntOption('water_b_thresh', 25, 0, 255), options.BoolOption('debug', True), ] OPTS_AJAX = [ options.IntOption('lab_l_ref', 255, 0, 255), options.IntOption('lab_a_ref', 175, 0, 255), options.IntOption('lab_b_ref', 169, 0, 255), options.IntOption('color_dist_thresh', 40, 0, 255), options.IntOption('blur_kernel', 3, 0, 255), options.IntOption('blur_std', 10, 0, 500), options.DoubleOption('resize_width_scale', 0.25, 0, 1), options.DoubleOption('resize_height_scale', 0.25, 0, 1), options.IntOption('dilate_kernel', 1, 0, 255), options.IntOption('erode_kernel', 1, 0, 255), options.IntOption('min_contour_area', 30, 0, 500), options.DoubleOption('min_contour_ratio', 4.5, 0, 10),
#!/usr/bin/env python3 import cv2 import shm import numpy import time import ctypes from auv_python_helpers import load_library from vision.modules.base import ModuleBase from vision import options options = [options.BoolOption('verbose', False)] _lib_color_balance = load_library('libauv-color-balance.so') """ Convert from RGB color space to HSI color space """ def conv_rgb_to_hsi(r_channel, g_channel, b_channel): #start_time = time.time() i_channel = (r_channel + g_channel + b_channel) / 3 rgb_min_channel = numpy.minimum(r_channel, g_channel) rgb_min_channel = numpy.minimum(rgb_min_channel, b_channel) s_channel = 1 - (rgb_min_channel / i_channel) g_gte_b_channel = g_channel >= b_channel h_channel1 = numpy.arccos( (r_channel - (g_channel / 2) - (b_channel / 2)) / (numpy.sqrt(r_channel**2 + g_channel**2 + b_channel**2 - (r_channel * g_channel) - (r_channel * b_channel) - (g_channel * b_channel)))) h_channel2 = (2 * numpy.pi) - h_channel1
# gui_options.DoubleOption('min_angle_diff', np.pi/8, 0, np.pi*2), # # gui_options.DoubleOption('min_line_dist', 100, 0, 1000), # # A circle with radius 1 inscribed in a square has # # 'rectangularity' pi/4 ~ 0.78. # gui_options.DoubleOption('min_line_hough_length',45, 0, 500), # gui_options.IntOption('color_dist_min', 0, 255), # gui_options.IntOption('color_dist_max', 20, 0, 255), # # Preprocess # # gui_options.IntOption('gaussian_kernel', 5, 1, 40), # # gui_options.IntOption('gaussian_stdev', 20, 0, 40), # ], # } vision_options = [ gui_options.BoolOption('debugging', False), gui_options.IntOption('canny1', 50, 0, 200), gui_options.IntOption('canny2', 150, 0, 200), gui_options.DoubleOption('min_angle_diff', np.pi / 8, 0, np.pi * 2), gui_options.DoubleOption('min_line_hough_length', 45, 0, 500), gui_options.IntOption('color_dist_min', 0, 0, 255), gui_options.IntOption('color_dist_max', 20, 0, 255), gui_options.IntOption('min_angle_range', 35, 0, 180), gui_options.IntOption('max_angle_range', 55, 0, 180), ] segment_info = namedtuple("segment_info", ["x1", "y1", "x2", "y2", "angle", "id", "updated"]) line_info = namedtuple("line_info", ["x1", "y1", "x2", "y2", "angle", "length", "id"])
from vision.vision_common import draw_angled_arrow, \ get_angle_from_rotated_rect from vision.modules.base import ModuleBase from vision import options as gui_options log = auvlog.client.log.vision.pipes vision_options = [ gui_options.DoubleOption('block_size', .061, 0, .1), gui_options.IntOption('c_thresh', -13, -100, 100), gui_options.DoubleOption('erode_size', .018, 0, .1), gui_options.DoubleOption('dilate_size', .038, 0, .1), gui_options.DoubleOption('min_percent_frame', .02, 0, 1), gui_options.DoubleOption('min_rectangularity', 1000), gui_options.DoubleOption('heuristic_power', 5), gui_options.BoolOption('debugging', True) ] def get_zero_pipe_group(): pipe_group = shm.pipe_results.get() pipe_group.angle = 0 pipe_group.center_x = 0 pipe_group.center_y = 0 pipe_group.heuristic_score = 0 pipe_group.rectangularity = 0 return pipe_group class Pipes(ModuleBase): def process(self, mat):
options.IntOption('adaptive_thresh_block_size', constants.block_size, 1, 2500), options.IntOption('adaptive_thresh_c', constants.thresh_c, 0, 20), # options.IntOption('cmyk_y_min', 20, 0, 255), # options.IntOption('cmyk_y_max', 255, 0, 255), # options.IntOption('hsv_h_min', 18, 0, 255), # options.IntOption('hsv_h_max', 59, 0, 255), # options.IntOption('hsv_s_min', 0, 0, 255), # options.IntOption('hsv_s_max', 255, 0, 255), # options.IntOption('hsv_v_min', 0, 0, 255), # options.IntOption('hsv_v_max', 255, 0, 255), options.DoubleOption('min_area', constants.min_area, 0, 1000), options.IntOption('kernel_size', constants.kernel_size, 1, 255), options.DoubleOption('min_aspect_ratio', 6, 1, 40), options.BoolOption('debugging', constants.debugging), options.BoolOption('lab a', True), options.BoolOption('lab b', False), options.BoolOption('ycrcb cb', False), options.BoolOption('yellow_debug', False), options.IntOption('yellow_hls_h_min', 58, 0, 255), options.IntOption('yellow_hls_h_max', 100, 0, 255), options.IntOption('yellow_ycrcb_cb_min', 111, 0, 255), options.IntOption('yellow_ycrcb_cb_max', 145, 0, 255), options.IntOption('yellow_lab_a_min', 0, 0, 255), options.IntOption('yellow_lab_a_max', 101, 0, 255), options.IntOption('yellow_lab_b_min', 95, 0, 255), options.IntOption('yellow_lab_b_max', 152, 0, 255) ] DOWNSCALE_RATIO = .33
from vision.framework.helpers import to_umat # , from_umat from vision.framework.transform import resize, simple_gaussian_blur import cv2 import shm opts = [ options.DoubleOption('camera_scale', 0.35, 0, 1), options.IntOption('lid_l_trg', 198, 0, 255), options.IntOption('lid_a_trg', 119, 0, 255), options.IntOption('lid_b_trg', 196, 0, 255), options.IntOption('lid_d_thresh', 40, 0, 255), # 128 options.IntOption('canny1', 459, 0, 1000), # 25 options.IntOption('canny2', 496, 0, 1000), # 93 options.IntOption('houghness', 51, 0, 1000), options.DoubleOption('min_cross_score', .15, 0, 1), options.BoolOption('debug', False) ] def make_poly(d1, d2): #print(d1, d2) return np.complex64([0, d1, (d1 + d2), d2])[:, np.newaxis] class BinsCover(ModuleBase): def process(self, mat): camera_scale = self.options['camera_scale'] debug = self.options['debug'] if camera_scale != 0: mat = resize(mat, int(mat.shape[1] * camera_scale), int(mat.shape[0] * camera_scale))
from vision.framework.color import bgr_to_lab, range_threshold from vision.modules.gate import thresh_color_distance from mission.missions.stake import MOVE_DIRECTION from vision import options opts = [ options.DoubleOption('rectangular_thresh', 0.8, 0, 1), options.DoubleOption('source_x_scale_board', 0.1, 0, 1), options.DoubleOption('source_y_scale_board', 0.1, 0, 1), options.DoubleOption('downsize_camera', 0.5, 0, 1), options.IntOption('min_match_count', 3, 0, 255), options.DoubleOption('good_ratio', 0.8, 0, 1), options.BoolOption('show_keypoints', False), options.IntOption('board_separation', 450, 0, 4000), options.IntOption('board_horizontal_offset', 70, -1000, 1000), options.IntOption('lever_position_x', -500 if MOVE_DIRECTION == 1 else 2700, -3000, 3000), options.IntOption('lever_position_y', 2500, 0, 6000), options.IntOption('heart_offset_x', -307, -3000, 3000), options.IntOption('heart_offset_y', 0, -3000, 3000), options.IntOption('belt_offset_x', 0, -3000, 3000), options.IntOption('belt_offset_y', 0, -3000, 3000), options.IntOption('left_circle_offset_x', -284, -3000, 3000), options.IntOption('left_circle_offset_y', 565, -3000, 3000), options.IntOption('right_circle_offset_x', -519, -3000, 3000), options.IntOption('right_circle_offset_y', 565, -3000, 3000), options.IntOption('lever_l', 129, 0, 255), options.IntOption('lever_a', 201, 0, 255),
from vision import options from vision.vision_common import ( draw_angled_arrow, get_angle_from_rotated_rect, Hierarchy, is_clipping, ) from vision.modules.base import ModuleBase from mission.constants.config import bins as constants CONTOUR_HEURISTIC_LIMIT = 5 CONTOUR_SCALED_HEURISTIC_LIMIT = 2 options = [ options.BoolOption('clipping_guard', constants.clipping_guard), options.BoolOption('debug', False), options.IntOption('max_fps', 30, 0, 30), options.IntOption('border_bgr_compon', constants.border_bgr_compon, 0, 2), options.IntOption('block_size', 401, 0, 4000, lambda x: x % 2 == 1), # options.IntOption('border_thresh', constants.border_thresh, 0, 255), options.IntOption('morph_size', 25, 1, 30, lambda x: x % 2 == 1), options.DoubleOption('min_size', 0.1, 0, 2), # Min length of min length side options.DoubleOption('min_rectangularity', 0.7, 0, 1), options.DoubleOption('min_inner_outer_ratio', 0.3, 0, 1), options.DoubleOption('min_cover_diff', 25, 0, 255), options.IntOption('blur', 27, 0, 100, lambda x: x % 2 == 1), ]
from collections import namedtuple from functools import reduce from itertools import permutations import cv2 import numpy as np import shm from vision.modules.base import ModuleBase from vision.vision_common import green, red, white, yellow from vision import options from color_balance import balance options = [ options.BoolOption('debug', False), options.BoolOption('red_debug', False), options.BoolOption('green_debug', False), options.BoolOption('yellow_debug', True), options.BoolOption('rescale_image', True), options.BoolOption('use_color_correction', False), options.IntOption('hls_l_min', 0, 0, 255), options.IntOption('hls_l_max', 255, 0, 255), options.IntOption('red_hls_h_min', 0, 0, 255), options.IntOption('red_hls_h_max', 23, 0, 255), options.IntOption('red_ycrcb_cb_min', 0, 0, 255), options.IntOption('red_ycrcb_cb_max', 120, 0, 255), options.IntOption('red_lab_a_min', 130, 0, 255), options.IntOption('red_lab_a_max', 183, 0, 255), options.IntOption('red_lab_b_min', 132, 0, 255), options.IntOption('red_lab_b_max', 230, 0, 255),
from functools import reduce from itertools import permutations, starmap import numpy as np import shm from mission.constants.config import buoys as constants from mission.constants.config import buoysVision as bv from vision.modules.base import ModuleBase from vision.vision_common import green, red, white, yellow from vision import options from vision.modules.color_balance import balance options = [ options.BoolOption('debug', False), options.BoolOption('red_debug', False), options.BoolOption('green_debug', False), options.BoolOption('yellow_debug', False), options.BoolOption('use_color_correction', False), options.IntOption('hls_l_min', bv.hls_l_min, 0, 255), options.IntOption('hls_l_max', bv.hls_l_max, 0, 255), options.IntOption('red_hls_h_min', bv.red_hls_h_min, 0, 255), options.IntOption('red_hls_h_max', bv.red_hls_h_max, 0, 255), options.IntOption('red_ycrcb_cb_min', bv.red_ycrcb_cb_min, 0, 255), options.IntOption('red_ycrcb_cb_max', bv.red_ycrcb_cb_max, 0, 255), options.IntOption('red_lab_a_min', bv.red_lab_a_min, 0, 255), options.IntOption('red_lab_a_max', bv.red_lab_a_max, 0, 255), options.IntOption('red_lab_b_min', bv.red_lab_b_min, 0, 255), options.IntOption('red_lab_b_max', bv.red_lab_b_max, 0, 255), options.IntOption('red_erode_kernel_size', bv.red_erode_kernel_size, 1,
from vision.framework.helpers import to_umat # , from_umat from vision.framework.draw import draw_circle from vision.framework.color import bgr_to_lab, range_threshold from vision import options opts = [ options.DoubleOption('rectangular_thresh', 0.8, 0, 1), options.DoubleOption('source_x_scale_bat', 0.1, 0, 1), options.DoubleOption('source_y_scale_bat', 0.1, 0, 1), options.DoubleOption('source_x_scale_wolf', 0.1, 0, 1), options.DoubleOption('source_y_scale_wolf', 0.1, 0, 1), options.DoubleOption('camera_scale', 0.35, 0, 1), options.IntOption('min_match_count', 10, 0, 255), options.DoubleOption('good_ratio', 0.8, 0, 1), options.BoolOption('show_keypoints', True), options.IntOption('min_gray', 83, 0, 255), #options.IntOption('img_l_trg', 71, 0, 255), #options.IntOption('img_a_trg', 94, 0, 255), #options.IntOption('img_b_trg', 164, 0, 255), #options.IntOption('img_d_thresh', 96, 0, 255), # 128 ] def make_poly(d1, d2): #print(d1, d2) return np.complex64([0, d1, (d1 + d2), d2])[:, np.newaxis] PADDING = 50 GUTTER_PAD = 500
def __init__(self, module): self.module = module self.options = [ options.BoolOption('PPX_grayscale', False), options.BoolOption('PPX_rgb_split', False), options.BoolOption('PPX_lab_split', False), options.BoolOption('PPX_hsv_split', False), options.BoolOption('PPX_hls_split', False), options.BoolOption('PPX_ycrcb_split', False), options.BoolOption('PPX_luv_split', False), options.BoolOption('PPX_color_correction', False), options.IntOption('PPX_r_bias', 0, -255, 255), options.IntOption('PPX_g_bias', 0, -255, 255), options.IntOption('PPX_b_bias', 0, -255, 255), options.DoubleOption('PPX_contrast', 1, 0, 255), options.IntOption('PPX_brightness', 0, -255, 255), options.BoolOption('PPX_gaussian_blur', False), options.IntOption('PPX_gaussian_blur_kernel', 1, 1, 100), options.IntOption('PPX_gaussian_noise', 0, 0, 255), options.BoolOption('PPX_erode', False), options.IntOption('PPX_erode_kernel', 1, 1, 50), options.BoolOption('PPX_dilate', False), options.IntOption('PPX_dilate_kernel', 1, 1, 50), options.IntOption('PPX_rotate', 0, 0, 359), options.BoolOption('PPX_resize', False), options.IntOption( 'PPX_resize_width', 512, 1, 2048, lambda x: x * self.options_dict['PPX_resize_height'].value * 3 <= self.module.max_buffer_size), options.IntOption( 'PPX_resize_height', 512, 1, 2048, lambda x: x * self.options_dict['PPX_resize_width'].value * 3 <= self.module.max_buffer_size), options.DoubleOption('PPX_resize_ratio', 1, 0.01, 1), options.IntOption('PPX_translate_x', 0, -2048, 2048), options.IntOption('PPX_translate_y', 0, -2048, 2048), ] self.options_dict = {option.name: option for option in self.options} for option in self.options: self.module.options_dict[option.name] = option
gui_options.IntOption('dark_hsv_v_max', 255, 0, 255), gui_options.IntOption('dark_rgb_r_min', 85, 0, 255), gui_options.IntOption('dark_rgb_r_max', 255, 0, 255), gui_options.IntOption('dark_ycrcb_y_min', 32, 0, 255), gui_options.IntOption('dark_ycrcb_y_max', 255, 0, 255), gui_options.IntOption('light_lab_l_min', 200, 0, 255), gui_options.IntOption('light_lab_l_max', 255, 0, 255), gui_options.IntOption('light_hsv_v_min', 172, 0, 255), gui_options.IntOption('light_hsv_v_max', 255, 0, 255), gui_options.IntOption('light_rgb_r_min', 250, 0, 255), gui_options.IntOption('light_rgb_r_max', 255, 0, 255), gui_options.IntOption('light_ycrcb_y_min', 207, 0, 255), gui_options.IntOption('light_ycrcb_y_max', 255, 0, 255), gui_options.IntOption('max_redness', 254, 0, 255), gui_options.IntOption('min_redness', 0, 0, 255), gui_options.BoolOption('debugging', False), gui_options.BoolOption('orange_debug', False), gui_options.BoolOption('dark_debug', False), gui_options.BoolOption('light_debug', False) ] def get_zero_pipe_group(): pipe_group = shm.pipe_results.get() pipe_group.angle = 0 pipe_group.center_x = 0 pipe_group.center_y = 0 pipe_group.heuristic_score = 0 pipe_group.rectangularity = 0 return pipe_group