Example #1
0
    def test_for_four(self):
        four_allowed = 1-numpy.clip(cv2.imread("Resources/four_allowed.png", cv2.IMREAD_GRAYSCALE), 0, 1)

        contours = ImagePreprocessor.find_contours(four_allowed)
        number_of_recognized_signs1 = ImagePreprocessor.calculate_number_of_signs(four_allowed, contours)

        self.assertEqual(4, number_of_recognized_signs1)
Example #2
0
    def test_if_odd(self):
        two_allowed = 1 - numpy.clip(cv2.imread("Resources/odd.png", cv2.IMREAD_GRAYSCALE), 0, 1)

        contours = ImagePreprocessor.find_contours(two_allowed)
        number_of_recognized_signs = ImagePreprocessor.calculate_number_of_signs(two_allowed, contours)
        number_of_recognized_signs = number_of_recognized_signs % 2

        self.assertEqual(1, number_of_recognized_signs)
Example #3
0
    def process_frame(self, image):
        """
        Processes the frame captured by Cozmo's camera
        :param image: Current frame from Cozmo's feed
        :type image: PIL image
        """
        # Convert image to binary
        bin_img = ImagePreprocessor.pil_rgb_to_numpy_binary(image)

        # Find contours on image
        contours = ImagePreprocessor.find_contours(bin_img)

        # Extract lane shape and remove noise
        lane_img = ImagePreprocessor.extract_lane_shape(bin_img, contours)

        # Create image for later display
        display_img = cv2.cvtColor(lane_img * 255, cv2.COLOR_GRAY2BGR)

        # Counting signs and overwrite attribute in Lane Analyzer
        if RobotStatusController.enable_sign_recognition and \
                not Settings.disable_sign_detection and \
                not RobotStatusController.disable_autonomous_behavior:
            RobotStatusController.sign_count = ImagePreprocessor.calculate_number_of_signs(
                display_img, contours)
            self.sign_handler.react_to_signs(RobotStatusController.sign_count)

        lane_correction = 0
        if not RobotStatusController.disable_autonomous_behavior:
            # Calculate lane correction based on image data
            lane_correction = self.corr_calculator.calculate_lane_correction(
                lane_img)

            if not RobotStatusController.is_in_packet_station:
                crossing_type = CrossingTypeIdentifier.analyze_frame(lane_img)
                if crossing_type is not None:
                    Navigator.navigate()

        if not RobotStatusController.disable_autonomous_behavior:
            # If correction is required let Cozmo correct
            if lane_correction is not None:
                self.drive_controller.correct(lane_correction)

        # Update current frame
        self.current_cam_frame = display_img * 255

        # Show cam live preview if enabled
        if Settings.show_live_preview:
            # self.preview_utils.show_cam_frame(bin_img*255)
            self.preview_utils.show_cam_frame(display_img)