1load("//tensorflow/core/platform:rules_cc.bzl", "cc_library") 2load("@bazel_skylib//rules:build_test.bzl", "build_test") 3load( 4 "//tensorflow:tensorflow.bzl", 5 "if_android", 6 "if_cuda_or_rocm", 7 "tf_cc_test", 8 "tf_cc_tests", 9 "tf_copts", 10) 11load( 12 "//tensorflow/core/platform:build_config_root.bzl", 13 "tf_cuda_tests_tags", 14) 15 16# buildifier: disable=same-origin-load 17load("//tensorflow:tensorflow.bzl", "filegroup") 18 19# buildifier: disable=same-origin-load 20load("//tensorflow:tensorflow.bzl", "tf_cuda_cc_test") 21 22# buildifier: disable=same-origin-load 23load("//tensorflow:tensorflow.bzl", "tf_kernel_library") 24 25# TODO(rmlarsen): Remove ASAP. 26package_group( 27 name = "friends", 28 packages = [ 29 "//tensorflow/...", 30 "//tensorflow_text/...", 31 ], 32) 33 34package( 35 default_visibility = [ 36 ":friends", 37 "//tensorflow:__subpackages__", 38 "//tensorflow:internal", 39 ], 40 licenses = ["notice"], # Apache 2.0 41) 42 43# Export a few files for use on Android. 44exports_files([ 45 "adjust_contrast_op.cc", 46 "adjust_contrast_op.h", 47 "adjust_hue_op.cc", 48 "adjust_hue_op.h", 49 "adjust_saturation_op.cc", 50 "adjust_saturation_op.h", 51 "crop_and_resize_op.cc", 52 "crop_and_resize_op.h", 53 "extract_image_patches_op.cc", 54 "extract_image_patches_op.h", 55 "image_ops.h", 56 "image_ops.cc", 57 "mirror_pad_op.cc", 58 "mirror_pad_op.h", 59 "mirror_pad_op_cpu_impl.h", 60 "mirror_pad_op_cpu_impl_1.cc", 61 "mirror_pad_op_cpu_impl_2.cc", 62 "mirror_pad_op_cpu_impl_3.cc", 63 "mirror_pad_op_cpu_impl_4.cc", 64 "mirror_pad_op_cpu_impl_5.cc", 65 "non_max_suppression_op.cc", 66 "non_max_suppression_op.h", 67 "resize_bicubic_op.cc", 68 "resize_bilinear_op.cc", 69 "resize_bilinear_op.h", 70 "resize_nearest_neighbor_op.cc", 71 "resize_nearest_neighbor_op.h", 72 "sample_distorted_bounding_box_op.cc", 73 "decode_image_op.cc", 74 "encode_jpeg_op.cc", 75 "encode_png_op.cc", 76]) 77 78# Private support libraries --------------------------------------------------- 79cc_library( 80 name = "sampling_kernels", 81 srcs = ["sampling_kernels.cc"], 82 hdrs = ["sampling_kernels.h"], 83 visibility = ["//visibility:private"], 84 deps = ["//tensorflow/core:lib"], 85) 86 87tf_cc_test( 88 name = "sampling_kernels_test", 89 srcs = ["sampling_kernels_test.cc"], 90 deps = [ 91 ":sampling_kernels", 92 "//tensorflow/core:test", 93 "//tensorflow/core:test_main", 94 "//tensorflow/core:testlib", 95 "@com_google_absl//absl/strings", 96 ], 97) 98 99# Public support libraries ----------------------------------------------------< 100cc_library( 101 name = "image", 102 visibility = ["//visibility:public"], 103 deps = [ 104 ":adjust_contrast_op", 105 ":adjust_hue_op", 106 ":adjust_saturation_op", 107 ":attention_ops", 108 ":colorspace_op", 109 ":crop_and_resize_op", 110 ":decode_image_op", 111 ":draw_bounding_box_op", 112 ":encode_jpeg_op", 113 ":encode_png_op", 114 ":extract_image_patches_op", 115 ":extract_jpeg_shape_op", 116 ":extract_volume_patches_op", 117 ":generate_box_proposals_op", 118 ":image_ops", 119 ":mirror_pad_op", 120 ":non_max_suppression_op", 121 ":random_crop_op", 122 ":resize_area_op", 123 ":resize_bicubic_op", 124 ":resize_bilinear_op", 125 ":resize_nearest_neighbor_op", 126 ":sample_distorted_bounding_box_op", 127 ":scale_and_translate_op", 128 ], 129) 130 131IMAGE_DEPS = [ 132 "//third_party/eigen3", 133 "//tensorflow/core:framework", 134 "//tensorflow/core:gif_internal", 135 "//tensorflow/core:jpeg_internal", 136 "//tensorflow/core:lib", 137 "//tensorflow/core:lib_internal", 138 "//tensorflow/core/lib/png:png_io", 139 "//tensorflow/core:protos_all_cc", 140 "//tensorflow/core/framework:bounds_check", 141 "//tensorflow/core/kernels:eigen_helpers", 142 "//tensorflow/core/util/tensor_bundle", 143 "//tensorflow/core/util:image_resizer_state", 144] 145 146IMAGE_TEST_DEPS = [ 147 "//tensorflow/core/kernels:ops_testutil", 148 "//tensorflow/core/kernels:ops_util", 149 "//tensorflow/core:core_cpu", 150 "//tensorflow/core:framework", 151 "//tensorflow/core:lib", 152 "//tensorflow/core:lib_internal", 153 "//tensorflow/core:protos_all_cc", 154 "//tensorflow/core:test", 155 "//tensorflow/core:test_main", 156 "//tensorflow/core:testlib", 157] 158 159tf_kernel_library( 160 name = "adjust_contrast_op", 161 prefix = "adjust_contrast_op", 162 deps = IMAGE_DEPS, 163) 164 165cc_library( 166 name = "adjust_hsv_gpu_lib", 167 hdrs = ["adjust_hsv_gpu.cu.h"], 168 deps = ["//tensorflow/core:framework"], 169) 170 171tf_kernel_library( 172 name = "adjust_hue_op", 173 prefix = "adjust_hue_op", 174 deps = IMAGE_DEPS + [":adjust_hsv_gpu_lib"], 175) 176 177tf_kernel_library( 178 name = "adjust_saturation_op", 179 prefix = "adjust_saturation_op", 180 deps = IMAGE_DEPS + [":adjust_hsv_gpu_lib"], 181) 182 183tf_kernel_library( 184 name = "attention_ops", 185 prefix = "attention_ops", 186 deps = IMAGE_DEPS, 187) 188 189tf_kernel_library( 190 name = "colorspace_op", 191 prefix = "colorspace_op", 192 deps = IMAGE_DEPS, 193) 194 195tf_kernel_library( 196 name = "crop_and_resize_op", 197 prefix = "crop_and_resize_op", 198 deps = IMAGE_DEPS + ["//tensorflow/core:framework_internal"], 199) 200 201tf_kernel_library( 202 name = "decode_image_op", 203 prefix = "decode_image_op", 204 deps = IMAGE_DEPS + ["@com_google_absl//absl/strings"], 205) 206 207tf_kernel_library( 208 name = "draw_bounding_box_op", 209 prefix = "draw_bounding_box_op", 210 deps = IMAGE_DEPS, 211) 212 213tf_kernel_library( 214 name = "encode_jpeg_op", 215 prefix = "encode_jpeg_op", 216 deps = IMAGE_DEPS, 217) 218 219tf_kernel_library( 220 name = "encode_png_op", 221 prefix = "encode_png_op", 222 deps = IMAGE_DEPS, 223) 224 225tf_kernel_library( 226 name = "extract_jpeg_shape_op", 227 prefix = "extract_jpeg_shape_op", 228 deps = IMAGE_DEPS, 229) 230 231tf_kernel_library( 232 name = "extract_image_patches_op", 233 prefix = "extract_image_patches_op", 234 deps = [ 235 "//tensorflow/core/kernels:ops_util", 236 ] + IMAGE_DEPS, 237) 238 239tf_kernel_library( 240 name = "extract_volume_patches_op", 241 prefix = "extract_volume_patches_op", 242 deps = [ 243 "//tensorflow/core:framework", 244 "//tensorflow/core:lib", 245 "//tensorflow/core/kernels:eigen_helpers", 246 "//tensorflow/core/kernels:ops_util", 247 "//third_party/eigen3", 248 ], 249) 250 251tf_kernel_library( 252 name = "generate_box_proposals_op", 253 gpu_srcs = ["generate_box_proposals_op.cu.cc"], 254 deps = ["//tensorflow/core/kernels:gpu_prim_hdrs"] + if_cuda_or_rocm([ 255 ":non_max_suppression_op_gpu", 256 ]), 257) 258 259tf_kernel_library( 260 name = "non_max_suppression_op", 261 prefix = "non_max_suppression_op", 262 deps = IMAGE_DEPS + ["//tensorflow/core/kernels:gpu_prim_hdrs"], 263) 264 265tf_kernel_library( 266 name = "scale_and_translate_op", 267 prefix = "scale_and_translate_op", 268 deps = IMAGE_DEPS + [":sampling_kernels"], 269) 270 271tf_kernel_library( 272 name = "random_crop_op", 273 prefix = "random_crop_op", 274 deps = IMAGE_DEPS, 275) 276 277tf_kernel_library( 278 name = "resize_area_op", 279 prefix = "resize_area_op", 280 deps = IMAGE_DEPS, 281) 282 283tf_kernel_library( 284 name = "resize_bicubic_op", 285 prefix = "resize_bicubic_op", 286 deps = IMAGE_DEPS, 287) 288 289tf_kernel_library( 290 name = "resize_bilinear_op", 291 prefix = "resize_bilinear_op", 292 deps = IMAGE_DEPS + ["//tensorflow/core/kernels:cast_op"], 293) 294 295tf_kernel_library( 296 name = "resize_nearest_neighbor_op", 297 prefix = "resize_nearest_neighbor_op", 298 deps = IMAGE_DEPS, 299) 300 301tf_kernel_library( 302 name = "sample_distorted_bounding_box_op", 303 prefix = "sample_distorted_bounding_box_op", 304 deps = IMAGE_DEPS + ["//tensorflow/core/kernels:stateless_random_ops"], 305) 306 307tf_kernel_library( 308 name = "image_ops", 309 prefix = "image_ops", 310 deps = IMAGE_DEPS, 311) 312 313tf_kernel_library( 314 name = "mirror_pad_op", 315 prefix = "mirror_pad_op", 316 deps = IMAGE_DEPS, 317) 318 319# Tests ------------------------ 320 321tf_cc_tests( 322 name = "bonus_tests", 323 srcs = [ 324 "adjust_contrast_op_test.cc", 325 "colorspace_op_test.cc", 326 "crop_and_resize_op_test.cc", 327 "mirror_pad_op_test.cc", 328 "non_max_suppression_op_test.cc", 329 "resize_area_op_test.cc", 330 "resize_bicubic_op_test.cc", 331 "scale_and_translate_op_test.cc", 332 ], 333 linkopts = select({ 334 "//tensorflow:macos": ["-headerpad_max_install_names"], 335 "//conditions:default": [], 336 }), 337 deps = [ 338 ":image", 339 ":sampling_kernels", 340 ":mirror_pad_op", 341 ] + IMAGE_TEST_DEPS, 342) 343 344tf_cc_test( 345 name = "non_max_suppression_op_benchmark_test", 346 srcs = ["non_max_suppression_op_benchmark_test.cc"], 347 deps = [ 348 ":image", 349 ] + IMAGE_TEST_DEPS, 350) 351 352tf_cuda_cc_test( 353 name = "resize_ops_test", 354 srcs = [ 355 "resize_bilinear_op_test.cc", 356 "resize_nearest_neighbor_op_test.cc", 357 ], 358 tags = [ 359 "no_cuda_asan", # TODO(b/171334997): re-enable 360 "no_cuda_on_cpu_tap", 361 ], 362 deps = [ 363 ":image", 364 ":sampling_kernels", 365 ] + IMAGE_TEST_DEPS, 366) 367 368tf_cuda_cc_test( 369 name = "adjust_contrast_op_benchmark_test", 370 srcs = ["adjust_contrast_op_benchmark_test.cc"], 371 deps = [ 372 ":image", 373 ] + IMAGE_TEST_DEPS, 374) 375 376tf_cuda_cc_test( 377 name = "crop_and_resize_op_benchmark_test", 378 srcs = ["crop_and_resize_op_benchmark_test.cc"], 379 deps = [ 380 ":image", 381 ] + IMAGE_TEST_DEPS, 382) 383 384tf_cuda_cc_test( 385 name = "mirror_pad_op_benchmark_test", 386 srcs = ["mirror_pad_op_benchmark_test.cc"], 387 deps = [ 388 ":mirror_pad_op", 389 ] + IMAGE_TEST_DEPS, 390) 391 392tf_cuda_cc_test( 393 name = "non_max_suppression_op_gpu_test", 394 srcs = ["non_max_suppression_op_gpu_test.cc"], 395 tags = tf_cuda_tests_tags() + [ 396 "no_cuda_asan", # TODO(b/171263349): re-enable. 397 "no_cuda_on_cpu_tap", 398 ], 399 deps = [ 400 ":image", 401 "@com_google_absl//absl/strings", 402 ] + IMAGE_TEST_DEPS, 403) 404 405tf_cuda_cc_test( 406 name = "resize_benchmark_test", 407 srcs = ["resize_op_benchmark_test.cc"], 408 deps = [ 409 ":image", 410 ] + IMAGE_TEST_DEPS, 411) 412 413tf_cc_test( 414 name = "encode_jpeg_op_test", 415 size = "small", 416 srcs = ["encode_jpeg_op_test.cc"], 417 deps = [ 418 ":encode_jpeg_op", 419 ] + IMAGE_TEST_DEPS, 420) 421 422cc_library( 423 name = "android_tensorflow_image_op", 424 srcs = if_android(["decode_image_op.cc"]), 425 copts = tf_copts(), 426 linkopts = ["-ldl"], 427 visibility = ["//visibility:public"], 428 deps = [ 429 "//tensorflow/core:portable_gif_internal", 430 "//tensorflow/core:portable_jpeg_internal", 431 "//tensorflow/core:portable_tensorflow_lib_lite", 432 "//tensorflow/core/lib/png:png_io", 433 ], 434 alwayslink = 1, 435) 436 437build_test( 438 name = "android_tensorflow_image_op_build_test", 439 targets = [":android_tensorflow_image_op"], 440) 441 442# A file group which contains all operators which are known to work on mobile. 443filegroup( 444 name = "android_all_op_kernels", 445 srcs = glob( 446 [ 447 "*.cc", 448 "*.h", 449 ], 450 exclude = [ 451 "*test.cc", 452 "*test.h", 453 "*_test_*", 454 "decode_image_op.*", 455 "encode_png_op.*", 456 "encode_jpeg_op.*", 457 "extract_jpeg_shape_op.*", 458 "decode_jpeg_op.*", 459 "decode_and_crop_jpeg_op.*", 460 "decode_gif_op.*", 461 ], 462 ), 463 visibility = ["//tensorflow:__subpackages__"], 464) 465 466filegroup( 467 name = "android_all_ops_textual_hdrs", 468 srcs = ["mirror_pad_op.h"], 469 visibility = ["//visibility:public"], 470) 471