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),
    ]
Exemple #2
0
    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),
Exemple #3
0
#!/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
Exemple #4
0
#         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"])
Exemple #5
0
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):
Exemple #6
0
    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
Exemple #7
0
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))
Exemple #8
0
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),
Exemple #9
0
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),
]

Exemple #10
0
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),
Exemple #11
0
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,
Exemple #12
0
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
Exemple #13
0
 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
Exemple #14
0
    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