(image,
                                labels,
                                bboxes,
                                min_object_covered=0.3,
                                aspect_ratio_range=(0.9, 1.1),
                                area_range=(0.1, 1.0),
                                max_attempts=200,
                                clip_bboxes=True,
                                scope=None)
Generates cropped_image using a one of the bboxes randomly distorted.

    See `tf.image.sample_distorted_bounding_box` for more documentation.

    Args:
        image: 3-D Tensor of image (it will be converted to floats in [0, 1]).
        bbox: 3-D float Tensor of bounding boxes arranged [1, num_boxes, coords]
            where each coordinate is [0, 1) and the coordinates are arranged
            as [ymin, xmin, ymax, xmax]. If num_boxes is 0 then it would use the whole
            image.
        min_object_covered: An optional `float`. Defaults to `0.1`. The cropped
            area of the image must contain at least this fraction of any bounding box
            supplied.
        aspect_ratio_range: An optional list of `floats`. The cropped area of the
            image must have an aspect ratio = width / height within this range.
        area_range: An optional list of `floats`. The cropped area of the image
            must contain a fraction of the supplied image within in this range.
        max_attempts: An optional `int`. Number of attempts at generating a cropped
            region of the image of the specified constraints. After `max_attempts`
            failures, return the entire image.
        scope: Optional scope for name_scope.
    Returns:
        A tuple, a 3-D Tensor cropped_image and the distorted bbox
Generates cropped_image using a one of the bboxes randomly distorted.
Generates cropped_image using a one of the bboxes randomly distorted .
def distorted_bounding_box_crop(image,
                                labels,
                                bboxes,
                                min_object_covered=0.3,
                                aspect_ratio_range=(0.9, 1.1),
                                area_range=(0.1, 1.0),
                                max_attempts=200,
                                clip_bboxes=True,
                                scope=None):
    """Generates cropped_image using a one of the bboxes randomly distorted.

    See `tf.image.sample_distorted_bounding_box` for more documentation.

    Args:
        image: 3-D Tensor of image (it will be converted to floats in [0, 1]).
        bbox: 3-D float Tensor of bounding boxes arranged [1, num_boxes, coords]
            where each coordinate is [0, 1) and the coordinates are arranged
            as [ymin, xmin, ymax, xmax]. If num_boxes is 0 then it would use the whole
            image.
        min_object_covered: An optional `float`. Defaults to `0.1`. The cropped
            area of the image must contain at least this fraction of any bounding box
            supplied.
        aspect_ratio_range: An optional list of `floats`. The cropped area of the
            image must have an aspect ratio = width / height within this range.
        area_range: An optional list of `floats`. The cropped area of the image
            must contain a fraction of the supplied image within in this range.
        max_attempts: An optional `int`. Number of attempts at generating a cropped
            region of the image of the specified constraints. After `max_attempts`
            failures, return the entire image.
        scope: Optional scope for name_scope.
    Returns:
        A tuple, a 3-D Tensor cropped_image and the distorted bbox
    """
    with tf.name_scope(scope, 'distorted_bounding_box_crop', [image, bboxes]):
        # Each bounding box has shape [1, num_boxes, box coords] and
        # the coordinates are ordered [ymin, xmin, ymax, xmax].
        bbox_begin, bbox_size, distort_bbox = tf.image.sample_distorted_bounding_box(
                tf.shape(image),
                bounding_boxes=tf.expand_dims(bboxes, 0),
                min_object_covered=min_object_covered,
                aspect_ratio_range=aspect_ratio_range,
                area_range=area_range,
                max_attempts=max_attempts,
                use_image_if_no_bounding_boxes=True)
        distort_bbox = distort_bbox[0, 0]

        # Crop the image to the specified bounding box.
        cropped_image = tf.slice(image, bbox_begin, bbox_size)
        # Restore the shape since the dynamic slice loses 3rd dimension.
        cropped_image.set_shape([None, None, 3])

        # bboxes = tf.Print(bboxes, [distort_bbox, bboxes], message='before bboxes_resize: ', summarize=20)
        # Update bounding boxes: resize and filter out.
        bboxes = bboxes_resize(distort_bbox, bboxes)

        # bboxes = tf.Print(bboxes, [distort_bbox, bboxes], message='after bboxes_resize: ', summarize=20)

        # filter by overlap, keep at least one
        labels, bboxes = bboxes_filter_overlap(labels, bboxes,
                                                   threshold=BBOX_CROP_OVERLAP,
                                                   assign_negative=False)
        return cropped_image, labels, bboxes, distort_bbox
def distorted_bounding_box_crop ( image , labels , bboxes , min_object_covered = 0.3 , aspect_ratio_range = ( 0.9 , 1.1 ) , area_range = ( 0.1 , 1.0 ) , max_attempts = 200 , clip_bboxes = True , scope = None ) : with tf . name_scope ( scope , 'distorted_bounding_box_crop' , [ image , bboxes ] ) : # Each bounding box has shape [1, num_boxes, box coords] and # the coordinates are ordered [ymin, xmin, ymax, xmax]. bbox_begin , bbox_size , distort_bbox = tf . image . sample_distorted_bounding_box ( tf . shape ( image ) , bounding_boxes = tf . expand_dims ( bboxes , 0 ) , min_object_covered = min_object_covered , aspect_ratio_range = aspect_ratio_range , area_range = area_range , max_attempts = max_attempts , use_image_if_no_bounding_boxes = True ) distort_bbox = distort_bbox [ 0 , 0 ] # Crop the image to the specified bounding box. cropped_image = tf . slice ( image , bbox_begin , bbox_size ) # Restore the shape since the dynamic slice loses 3rd dimension. cropped_image . set_shape ( [ None , None , 3 ] ) # bboxes = tf.Print(bboxes, [distort_bbox, bboxes], message='before bboxes_resize: ', summarize=20) # Update bounding boxes: resize and filter out. bboxes = bboxes_resize ( distort_bbox , bboxes ) # bboxes = tf.Print(bboxes, [distort_bbox, bboxes], message='after bboxes_resize: ', summarize=20) # filter by overlap, keep at least one labels , bboxes = bboxes_filter_overlap ( labels , bboxes , threshold = BBOX_CROP_OVERLAP , assign_negative = False ) return cropped_image , labels , bboxes , distort_bbox