def test_find_combined_objects_two_objects_with_symbols_and_pattern(): detector = od.ObjectDetector() img = cv2.imread('images/comb_obj_two_symbol_and_pattern.bmp') objects_list = detector.detect_objects( img, real_distance=None, prepare_image_before_detection=False) assert len(objects_list) is 2 assert isinstance(objects_list[0], CombinedObject) assert isinstance(objects_list[1], CombinedObject) correct_part_count_for_first = 0 corret_part_count_for_second = 0 for object in objects_list: if len(object.parts) is 3: for part in object.parts: if (part.color is Color.GREEN and part.type is Shape.RECTANGLE and len(part.symbols) is 1 and part.symbols[0].color is Color.BLUE and part.symbols[0].type is Shape.PENTAGON) or \ (part.color is Color.RED and _is_triangle(part.type) and len(part.symbols) is 0) or \ (part.color is Color.YELLOW and part.type is Shape.PENTAGON and len(part.symbols) is 0 and part.pattern is Pattern.VERTICAL_LINES and part.pattern_color is Color.BLUE): correct_part_count_for_first += 1 elif len(object.parts) is 4: for part in object.parts: if (part.color is Color.YELLOW and part.type is Shape.EQUILATERAL_TRIANGLE and len(part.symbols) is 0) or \ (part.color is Color.YELLOW and part.type is Shape.EQUILATERAL_TRIANGLE and len(part.symbols) is 1 and part.symbols[0].type is Shape.RECTANGLE and part.symbols[0].color is Color.RED) or \ (part.color is Color.BLUE and part.type is Shape.PENTAGON and len(part.symbols) is 0 and part.pattern is Pattern.LEFT_INCLINED_LINES and part.pattern_color is Color.RED) or \ (part.color is Color.RED and part.type is Shape.HEXAGON and len(part.symbols) is 0): corret_part_count_for_second += 1 assert correct_part_count_for_first is 3 assert corret_part_count_for_second is 4
def test_find_combined_objects_two_objects(): detector = od.ObjectDetector() img = cv2.imread('images/comb_obj_two.bmp') objects_list = detector.detect_objects( img, real_distance=None, prepare_image_before_detection=False) assert len(objects_list) is 2 assert isinstance(objects_list[0], CombinedObject) assert isinstance(objects_list[1], CombinedObject) correct_part_count_for_first = 0 correct_part_count_for_second = 0 for x in objects_list: if len(x.parts) is 3: for part in x.parts: if (part.color is Color.GREEN and part.type is Shape.RECTANGLE and len(part.symbols) is 0) or \ (part.color is Color.RED and part.type is Shape.EQUILATERAL_TRIANGLE and len(part.symbols) is 0) or \ (part.color is Color.YELLOW and part.type is Shape.PENTAGON and len(part.symbols) is 0): correct_part_count_for_first += 1 elif len(x.parts) is 4: for part in x.parts: if (part.color is Color.YELLOW and part.type is Shape.EQUILATERAL_TRIANGLE and len(part.symbols) is 0) or \ (part.color is Color.BLUE and part.type is Shape.PENTAGON and len(part.symbols) is 0) or \ (part.color is Color.RED and part.type is Shape.HEXAGON and len(part.symbols) is 0): correct_part_count_for_second += 1 assert correct_part_count_for_first is 3 assert correct_part_count_for_second is 4
def test_detect_object_green_triangle_pattern_horizontal_lines(): detector = od.ObjectDetector() frame = cv2.imread('images/obj_det_green_triangle_pattern_hor_lines.bmp') objects_list = detector.detect_objects( frame, real_distance=None, auto_contour_clear=False, prepare_image_before_detection=False) assert len(objects_list) is 1 obj = objects_list[0] assert obj.color is Color.GREEN assert obj.pattern is Pattern.HORIZONTAL_LINES assert obj.pattern_color is Color.RED
def test_detect_object_green_triangle_with_blue_rectangle(): detector = od.ObjectDetector() frame = cv2.imread('images/obj_det_green_triangle.bmp') objects_list = detector.detect_objects( frame, real_distance=None, auto_contour_clear=False, prepare_image_before_detection=False) obj = None for x in objects_list: if x.color is Color.GREEN and _is_triangle(x.type) and len(x.symbols) is 1 and \ x.symbols[0].color is Color.BLUE and x.symbols[0].type is Shape.RECTANGLE: obj = x break assert obj is not None
def test_detect_object_blue_pentagon_with_red_parallelogram(): detector = od.ObjectDetector() frame = cv2.imread('images/obj_det_blue_pentagon.bmp') objects_list = detector.detect_objects( frame, real_distance=None, auto_contour_clear=False, prepare_image_before_detection=False) obj = None for x in objects_list: if x.color is Color.BLUE and x.type is Shape.PENTAGON and len(x.symbols) is 1 and \ x.symbols[0].color is Color.RED and x.symbols[0].type is Shape.SQUARE: obj = x break assert obj is not None
def test_detect_object_all_objects(): detector = od.ObjectDetector() frame = cv2.imread('images/obj_det_all.jpg') objects_list = detector.detect_objects( frame, real_distance=None, auto_contour_clear=False, prepare_image_before_detection=False) obj = None for x in objects_list: if x.color is Color.RED and x.type is Shape.RECTANGLE and len(x.symbols) is 1 and \ x.symbols[0].color is Color.GREEN and x.symbols[0].type is Shape.TRIANGLE: obj = x break assert obj is not None obj = None for x in objects_list: if x.color is Color.BLUE and x.type is Shape.SQUARE and len( x.symbols) is 2: matched_symbols = 0 for symbol in x.symbols: if (symbol.color is Color.RED and _is_triangle(symbol.type)) or \ (symbol.color is Color.GREEN and symbol.type is Shape.SQUARE): matched_symbols += 1 if matched_symbols is 2: obj = x break assert obj is not None obj = None for x in objects_list: if x.color is Color.BLUE and x.type is Shape.PENTAGON and len(x.symbols) is 1 and \ x.symbols[0].color is Color.RED and x.symbols[0].type is Shape.SQUARE: obj = x break assert obj is not None obj = None for x in objects_list: if x.color is Color.GREEN and _is_triangle(x.type) and len(x.symbols) is 1 and \ x.symbols[0].color is Color.BLUE and x.symbols[0].type is Shape.RECTANGLE: obj = x break assert obj is not None
def test_find_combined_objects_single_object(): detector = od.ObjectDetector() img = cv2.imread('images/comb_obj_single.bmp') objects_list = detector.detect_objects( img, real_distance=None, prepare_image_before_detection=False) assert len(objects_list) is 1 correct_part_count = 0 if isinstance(objects_list[0], CombinedObject) and len(objects_list[0].parts) is 3: for part in objects_list[0].parts: if (part.color is Color.GREEN and part.type is Shape.RECTANGLE and len(part.symbols) is 0) or \ (part.color is Color.RED and part.type is Shape.EQUILATERAL_TRIANGLE and len(part.symbols) is 0) or \ (part.color is Color.YELLOW and part.type is Shape.PENTAGON and len(part.symbols) is 0): correct_part_count += 1 assert correct_part_count is 3
def test_detect_object_blue_square_with_red_triangle_and_green_parallelogram(): detector = od.ObjectDetector() frame = cv2.imread('images/obj_det_blue_rectangle.bmp') objects_list = detector.detect_objects( frame, real_distance=None, auto_contour_clear=False, prepare_image_before_detection=False) obj = None for x in objects_list: if x.color is Color.BLUE and x.type is Shape.SQUARE and len( x.symbols) is 2: matched_symbols = 0 for symbol in x.symbols: if (symbol.color is Color.RED and _is_triangle(symbol.type)) or \ (symbol.color is Color.GREEN and symbol.type is Shape.SQUARE): matched_symbols += 1 if matched_symbols is 2: obj = x break assert obj is not None
def test_find_combined_objects_single_object_symbol_and_pattern(): detector = od.ObjectDetector() img = cv2.imread('images/comb_obj_single_symbol_and_pattern.bmp') objects_list = detector.detect_objects( img, real_distance=None, prepare_image_before_detection=False) assert len(objects_list) is 1 assert isinstance(objects_list[0], CombinedObject) assert len(objects_list[0].parts) is 3 correct_part_count = 0 for object in objects_list: for part in object.parts: if (part.color is Color.GREEN and part.type is Shape.RECTANGLE and len(part.symbols) is 1 and part.pattern is Pattern.NONE and part.symbols[0].color is Color.YELLOW and part.symbols[0].type is Shape.PENTAGON) or \ (part.color is Color.RED and _is_triangle(part.type) and len(part.symbols) is 0) or \ (part.color is Color.YELLOW and part.type is Shape.PENTAGON and len(part.symbols) is 0 and part.pattern is Pattern.HORIZONTAL_LINES and part.pattern_color is Color.RED): correct_part_count += 1 assert correct_part_count is 3
def test__detect_basic_objects_contours_blue_rectangle(): detector = od.ObjectDetector() frame = cv2.imread('images/obj_det_green_triangle.bmp') contours = detector._detect_basic_objects_contours(Color.BLUE, frame) assert len(contours) is 1 assert contours[0].shape[0] is 3 or contours[0].shape[0] is 4
def test__detect_basic_objects_contours_red_square(): detector = od.ObjectDetector() frame = cv2.imread('images/obj_det_blue_pentagon.bmp') contours = detector._detect_basic_objects_contours(Color.RED, frame) assert len(contours) is 1 assert contours[0].shape[0] is 4 or contours[0].shape[0] is 5