def test_invalid_connection(self):
   landmark_list = text_format.Parse(
       'landmark {x: 0.5 y: 0.5} landmark {x: 0.2 y: 0.2}',
       landmark_pb2.NormalizedLandmarkList())
   image = np.arange(27, dtype=np.uint8).reshape(3, 3, 3)
   with self.assertRaisesRegex(ValueError, 'Landmark index is out of range.'):
     drawing_utils.draw_landmarks(image, landmark_list, [(0, 2)])
예제 #2
0
    def _convert_format(
            self, inputs: annotation_data_pb2.FrameAnnotation
    ) -> List[ObjectronOutputs]:
        new_outputs = list()
        for annotation in inputs.annotations:
            # Get 3d object pose.
            rotation = np.reshape(np.array(annotation.rotation), (3, 3))
            translation = np.array(annotation.translation)
            scale = np.array(annotation.scale)
            # Get 2d/3d landmakrs.
            landmarks_2d = landmark_pb2.NormalizedLandmarkList()
            landmarks_3d = landmark_pb2.LandmarkList()
            for keypoint in annotation.keypoints:
                point_2d = keypoint.point_2d
                landmarks_2d.landmark.add(x=point_2d.x, y=point_2d.y)
                point_3d = keypoint.point_3d
                landmarks_3d.landmark.add(x=point_3d.x,
                                          y=point_3d.y,
                                          z=point_3d.z)

            # Add to objectron outputs.
            new_outputs.append(
                ObjectronOutputs(landmarks_2d,
                                 landmarks_3d,
                                 rotation,
                                 translation,
                                 scale=scale))
        return new_outputs
 def test_drawing_spec(self):
   landmark_list = text_format.Parse(
       'landmark {x: 0.1 y: 0.1}'
       'landmark {x: 0.8 y: 0.8}', landmark_pb2.NormalizedLandmarkList())
   image = np.zeros((100, 100, 3), np.uint8)
   landmark_drawing_spec = drawing_utils.DrawingSpec(
       color=(0, 0, 255), thickness=5)
   connection_drawing_spec = drawing_utils.DrawingSpec(
       color=(255, 0, 0), thickness=3)
   expected_result = np.copy(image)
   start_point = (10, 10)
   end_point = (80, 80)
   cv2.line(expected_result, start_point, end_point,
            connection_drawing_spec.color, connection_drawing_spec.thickness)
   cv2.circle(expected_result, start_point,
              landmark_drawing_spec.circle_radius, landmark_drawing_spec.color,
              landmark_drawing_spec.thickness)
   cv2.circle(expected_result, end_point, landmark_drawing_spec.circle_radius,
              landmark_drawing_spec.color, landmark_drawing_spec.thickness)
   drawing_utils.draw_landmarks(
       image=image,
       landmark_list=landmark_list,
       connections=[(0, 1)],
       landmark_drawing_spec=landmark_drawing_spec,
       connection_drawing_spec=connection_drawing_spec)
   np.testing.assert_array_equal(image, expected_result)
예제 #4
0
 def test_min_and_max_coordinate_values(self):
     landmark_list = text_format.Parse(
         'landmark {x: 0.0 y: 1.0}'
         'landmark {x: 1.0 y: 0.0}', landmark_pb2.NormalizedLandmarkList())
     image = np.zeros((100, 100, 3), np.uint8)
     expected_result = np.copy(image)
     start_point = (0, 99)
     end_point = (99, 0)
     cv2.line(expected_result, start_point, end_point,
              DEFAULT_CONNECTION_DRAWING_SPEC.color,
              DEFAULT_CONNECTION_DRAWING_SPEC.thickness)
     cv2.circle(expected_result, start_point,
                DEFAULT_CIRCLE_DRAWING_SPEC.circle_radius + 1,
                DEFAULT_CYCLE_BORDER_COLOR,
                DEFAULT_CIRCLE_DRAWING_SPEC.thickness)
     cv2.circle(expected_result, end_point,
                DEFAULT_CIRCLE_DRAWING_SPEC.circle_radius + 1,
                DEFAULT_CYCLE_BORDER_COLOR,
                DEFAULT_CIRCLE_DRAWING_SPEC.thickness)
     cv2.circle(expected_result, start_point,
                DEFAULT_CIRCLE_DRAWING_SPEC.circle_radius,
                DEFAULT_CIRCLE_DRAWING_SPEC.color,
                DEFAULT_CIRCLE_DRAWING_SPEC.thickness)
     cv2.circle(expected_result, end_point,
                DEFAULT_CIRCLE_DRAWING_SPEC.circle_radius,
                DEFAULT_CIRCLE_DRAWING_SPEC.color,
                DEFAULT_CIRCLE_DRAWING_SPEC.thickness)
     drawing_utils.draw_landmarks(image=image,
                                  landmark_list=landmark_list,
                                  connections=[(0, 1)])
     np.testing.assert_array_equal(image, expected_result)
예제 #5
0
 def test_draw_landmarks_and_connections(self, landmark_list_text):
     landmark_list = text_format.Parse(
         landmark_list_text, landmark_pb2.NormalizedLandmarkList())
     image = np.zeros((100, 100, 3), np.uint8)
     expected_result = np.copy(image)
     start_point = (10, 50)
     end_point = (50, 10)
     cv2.line(expected_result, start_point, end_point,
              DEFAULT_CONNECTION_DRAWING_SPEC.color,
              DEFAULT_CONNECTION_DRAWING_SPEC.thickness)
     cv2.circle(expected_result, start_point,
                DEFAULT_CIRCLE_DRAWING_SPEC.circle_radius + 1,
                DEFAULT_CYCLE_BORDER_COLOR,
                DEFAULT_CIRCLE_DRAWING_SPEC.thickness)
     cv2.circle(expected_result, end_point,
                DEFAULT_CIRCLE_DRAWING_SPEC.circle_radius + 1,
                DEFAULT_CYCLE_BORDER_COLOR,
                DEFAULT_CIRCLE_DRAWING_SPEC.thickness)
     cv2.circle(expected_result, start_point,
                DEFAULT_CIRCLE_DRAWING_SPEC.circle_radius,
                DEFAULT_CIRCLE_DRAWING_SPEC.color,
                DEFAULT_CIRCLE_DRAWING_SPEC.thickness)
     cv2.circle(expected_result, end_point,
                DEFAULT_CIRCLE_DRAWING_SPEC.circle_radius,
                DEFAULT_CIRCLE_DRAWING_SPEC.color,
                DEFAULT_CIRCLE_DRAWING_SPEC.thickness)
     drawing_utils.draw_landmarks(image=image,
                                  landmark_list=landmark_list,
                                  connections=[(0, 1)])
     np.testing.assert_array_equal(image, expected_result)
 def test_draw_single_landmark_point(self, landmark_list_text):
   landmark_list = text_format.Parse(landmark_list_text,
                                     landmark_pb2.NormalizedLandmarkList())
   image = np.zeros((100, 100, 3), np.uint8)
   expected_result = np.copy(image)
   cv2.circle(expected_result, (10, 10),
              DEFAULT_CIRCLE_DRAWING_SPEC.circle_radius,
              DEFAULT_CIRCLE_DRAWING_SPEC.color,
              DEFAULT_CIRCLE_DRAWING_SPEC.thickness)
   drawing_utils.draw_landmarks(image, landmark_list)
   np.testing.assert_array_equal(image, expected_result)
예제 #7
0
 def test_invalid_input_image(self):
     image = np.arange(18, dtype=np.uint8).reshape(3, 3, 2)
     with self.assertRaisesRegex(
             ValueError,
             'Input image must contain three channel rgb data.'):
         drawing_utils.draw_landmarks(image,
                                      landmark_pb2.NormalizedLandmarkList())
     with self.assertRaisesRegex(
             ValueError,
             'Input image must contain three channel rgb data.'):
         drawing_utils.draw_detection(image, detection_pb2.Detection())