diff --git a/tensorflow/core/api_def/python_api/api_def_DrawBoundingBoxes.pbtxt b/tensorflow/core/api_def/python_api/api_def_DrawBoundingBoxes.pbtxt index 54d644c013b..aec62ddfec5 100644 --- a/tensorflow/core/api_def/python_api/api_def_DrawBoundingBoxes.pbtxt +++ b/tensorflow/core/api_def/python_api/api_def_DrawBoundingBoxes.pbtxt @@ -1,6 +1,4 @@ op { graph_op_name: "DrawBoundingBoxes" - endpoint { - name: "image.draw_bounding_boxes" - } + visibility: HIDDEN } diff --git a/tensorflow/python/kernel_tests/draw_bounding_box_op_test.py b/tensorflow/python/kernel_tests/draw_bounding_box_op_test.py index 22644736a16..e683f8d2380 100644 --- a/tensorflow/python/kernel_tests/draw_bounding_box_op_test.py +++ b/tensorflow/python/kernel_tests/draw_bounding_box_op_test.py @@ -93,7 +93,7 @@ class DrawBoundingBoxOpTest(test.TestCase): if colors is None: image = image_ops.draw_bounding_boxes(image, bboxes) else: - image = gen_image_ops.draw_bounding_boxes_v2(image, bboxes, colors) + image = image_ops.draw_bounding_boxes_v2(image, bboxes, colors) with self.cached_session(use_gpu=False) as sess: op_drawn_image = np.squeeze(sess.run(image), 0) self.assertAllEqual(test_drawn_image, op_drawn_image) diff --git a/tensorflow/python/ops/image_ops_impl.py b/tensorflow/python/ops/image_ops_impl.py index dd6292b75a7..ebb21587d29 100644 --- a/tensorflow/python/ops/image_ops_impl.py +++ b/tensorflow/python/ops/image_ops_impl.py @@ -3333,7 +3333,6 @@ def crop_and_resize_v1( # pylint: disable=missing-docstring crop_and_resize_v1.__doc__ = gen_image_ops.crop_and_resize.__doc__ - @tf_export(v1=['image.extract_glimpse']) def extract_glimpse( input, # pylint: disable=redefined-builtin @@ -3533,3 +3532,70 @@ def combined_non_max_suppression(boxes, return gen_image_ops.combined_non_max_suppression( boxes, scores, max_output_size_per_class, max_total_size, iou_threshold, score_threshold, pad_per_class) + +@tf_export(v1=['image.draw_bounding_boxes']) +def draw_bounding_boxes( + images, + boxes, + name=None): + """Draw bounding boxes on a batch of images. + + Outputs a copy of `images` but draws on top of the pixels zero or more bounding + boxes specified by the locations in `boxes`. The coordinates of the each + bounding box in `boxes` are encoded as `[y_min, x_min, y_max, x_max]`. The + bounding box coordinates are floats in `[0.0, 1.0]` relative to the width and + height of the underlying image. + + For example, if an image is 100 x 200 pixels (height x width) and the bounding + box is `[0.1, 0.2, 0.5, 0.9]`, the upper-left and bottom-right coordinates of + the bounding box will be `(40, 10)` to `(180, 50)` (in (x,y) coordinates). + + Parts of the bounding box may fall outside the image. + + Args: + images: A `Tensor`. Must be one of the following types: `float32`, `half`. + 4-D with shape `[batch, height, width, depth]`. A batch of images. + boxes: A `Tensor` of type `float32`. + 3-D with shape `[batch, num_bounding_boxes, 4]` containing bounding + boxes. + name: A name for the operation (optional). + + Returns: + A `Tensor`. Has the same type as `images`. + """ + return gen_image_ops.draw_bounding_boxes(images, boxes, name) + +@tf_export('image.draw_bounding_boxes', v1=[]) +def draw_bounding_boxes_v2( + images, + boxes, + colors, + name=None): + """Draw bounding boxes on a batch of images. + + Outputs a copy of `images` but draws on top of the pixels zero or more bounding + boxes specified by the locations in `boxes`. The coordinates of the each + bounding box in `boxes` are encoded as `[y_min, x_min, y_max, x_max]`. The + bounding box coordinates are floats in `[0.0, 1.0]` relative to the width and + height of the underlying image. + + For example, if an image is 100 x 200 pixels (height x width) and the bounding + box is `[0.1, 0.2, 0.5, 0.9]`, the upper-left and bottom-right coordinates of + the bounding box will be `(40, 10)` to `(180, 50)` (in (x,y) coordinates). + + Parts of the bounding box may fall outside the image. + + Args: + images: A `Tensor`. Must be one of the following types: `float32`, `half`. + 4-D with shape `[batch, height, width, depth]`. A batch of images. + boxes: A `Tensor` of type `float32`. + 3-D with shape `[batch, num_bounding_boxes, 4]` containing bounding + boxes. + colors: A `Tensor` of type `float32`. + 2-D. A list of RGBA colors to cycle through for the boxes. + name: A name for the operation (optional). + + Returns: + A `Tensor`. Has the same type as `images`. + """ + return gen_image_ops.draw_bounding_boxes_v2(images, boxes, colors, name) diff --git a/tensorflow/tools/api/golden/v2/tensorflow.image.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.image.pbtxt index 741b5b772cf..117d2ac557a 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.image.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.image.pbtxt @@ -74,7 +74,7 @@ tf_module { } member_method { name: "draw_bounding_boxes" - argspec: "args=[\'images\', \'boxes\', \'name\'], varargs=None, keywords=None, defaults=[\'None\'], " + argspec: "args=[\'images\', \'boxes\', \'colors\', \'name\'], varargs=None, keywords=None, defaults=[\'None\'], " } member_method { name: "encode_jpeg"