allow bounding box rectangle of face detection to go out of bounds
This commit is contained in:
		
							parent
							
								
									63e679d99c
								
							
						
					
					
						commit
						9061c1dd45
					
				| 
						 | 
				
			
			@ -59,7 +59,6 @@ def _normalized_to_pixel_coordinates(
 | 
			
		|||
 | 
			
		||||
  if not (is_valid_normalized_value(normalized_x) and
 | 
			
		||||
          is_valid_normalized_value(normalized_y)):
 | 
			
		||||
    # TODO: Draw coordinates even if it's outside of the image bounds.
 | 
			
		||||
    return None
 | 
			
		||||
  x_px = min(math.floor(normalized_x * image_width), image_width - 1)
 | 
			
		||||
  y_px = min(math.floor(normalized_y * image_height), image_height - 1)
 | 
			
		||||
| 
						 | 
				
			
			@ -86,6 +85,20 @@ def draw_detection(
 | 
			
		|||
      a) If the input image is not three channel BGR.
 | 
			
		||||
      b) If the location data is not relative data.
 | 
			
		||||
  """
 | 
			
		||||
 | 
			
		||||
  def _normalized_to_pixel_coordinates_unsafe(
 | 
			
		||||
      normalized_x: float, normalized_y: float, image_width: int,
 | 
			
		||||
      image_height: int) -> Tuple[int, int]:
 | 
			
		||||
    """Converts normalized coordinates to pixel coordinates.
 | 
			
		||||
    Normalized coordinates can be out of image bounds, therefore the result
 | 
			
		||||
    may also be outside image bounds."""
 | 
			
		||||
 | 
			
		||||
    x_px = math.floor(normalized_x * image_width)
 | 
			
		||||
    y_px = math.floor(normalized_y * image_height)
 | 
			
		||||
 | 
			
		||||
    return x_px, y_px
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  if not detection.location_data:
 | 
			
		||||
    return
 | 
			
		||||
  if image.shape[2] != _BGR_CHANNELS:
 | 
			
		||||
| 
						 | 
				
			
			@ -98,7 +111,7 @@ def draw_detection(
 | 
			
		|||
        'LocationData must be relative for this drawing funtion to work.')
 | 
			
		||||
  # Draws keypoints.
 | 
			
		||||
  for keypoint in location.relative_keypoints:
 | 
			
		||||
    keypoint_px = _normalized_to_pixel_coordinates(keypoint.x, keypoint.y,
 | 
			
		||||
    keypoint_px = _normalized_to_pixel_coordinates_unsafe(keypoint.x, keypoint.y,
 | 
			
		||||
                                                   image_cols, image_rows)
 | 
			
		||||
    cv2.circle(image, keypoint_px, keypoint_drawing_spec.circle_radius,
 | 
			
		||||
               keypoint_drawing_spec.color, keypoint_drawing_spec.thickness)
 | 
			
		||||
| 
						 | 
				
			
			@ -106,10 +119,10 @@ def draw_detection(
 | 
			
		|||
  if not location.HasField('relative_bounding_box'):
 | 
			
		||||
    return
 | 
			
		||||
  relative_bounding_box = location.relative_bounding_box
 | 
			
		||||
  rect_start_point = _normalized_to_pixel_coordinates(
 | 
			
		||||
  rect_start_point = _normalized_to_pixel_coordinates_unsafe(
 | 
			
		||||
      relative_bounding_box.xmin, relative_bounding_box.ymin, image_cols,
 | 
			
		||||
      image_rows)
 | 
			
		||||
  rect_end_point = _normalized_to_pixel_coordinates(
 | 
			
		||||
  rect_end_point = _normalized_to_pixel_coordinates_unsafe(
 | 
			
		||||
      relative_bounding_box.xmin + relative_bounding_box.width,
 | 
			
		||||
      relative_bounding_box.ymin + relative_bounding_box.height, image_cols,
 | 
			
		||||
      image_rows)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user