python-pillow / Pillow

Python Imaging Library (Fork)
https://python-pillow.org
Other
12.17k stars 2.22k forks source link

Did you use https://github.com/clovaai/synthtiger before? #7339

Closed nissansz closed 1 year ago

nissansz commented 1 year ago

I tested performance for single line and single image generation, 20 lines, result as before, pure pillow, about 2s synthtiger: 40s

I wonder how to improve speed for synthtiger, not considering worker number.

nissansz commented 1 year ago
    6090675 function calls (6043707 primitive calls) in 72.690 seconds

Ordered by: internal time

ncalls tottime percall cumtime percall filename:lineno(function) 2892831 34.393 0.000 34.393 0.000 {floodFill} 104 10.388 0.100 46.299 0.445 template_cnjpkr_str.py:295(_check_visibility) 2284 2.987 0.001 2.987 0.001 {method 'getsize' of 'FontFamily' objects} 17726 2.218 0.000 2.218 0.000 {method 'astype' of 'numpy.ndarray' objects} 115572/77434 1.928 0.000 5.748 0.000 {built-in method numpy.core._multiarray_umath.implement_array_function} 150664 1.924 0.000 2.687 0.000 {built-in method numpy.array} 181 1.322 0.007 1.322 0.007 {method 'round' of 'numpy.ndarray' objects} 4434 0.745 0.000 0.745 0.000 {built-in method PIL._imaging.alpha_composite} 6 0.618 0.103 0.789 0.132 blending_functions.py:518(hard_light) 4118 0.557 0.000 4.356 0.001 image_util.py:32(paste_image) 286 0.534 0.002 0.534 0.002 {method 'decode' of 'ImagingDecoder' objects} 1910 0.500 0.000 0.500 0.000 {built-in method PIL._imagingft.getfont} 13686 0.490 0.000 0.491 0.000 {built-in method builtins.max} 4475 0.484 0.000 0.484 0.000 {built-in method builtins.min} 9 0.456 0.051 0.634 0.070 blending_functions.py:139(soft_light) 9 0.451 0.050 0.587 0.065 blending_functions.py:839(overlay) 1329 0.449 0.000 0.449 0.000 {method 'render' of 'FontFamily' objects} 955 0.419 0.000 0.419 0.000 {built-in method PIL._imagingft.getfamily} 141 0.413 0.003 0.413 0.003 {method 'repeat' of 'numpy.ndarray' objects} 54 0.385 0.007 1.911 0.035 arithmetic.py:264(_add_elementwise_to_uint8) 1974 0.378 0.000 0.378 0.000 {warpPerspective} 95 0.358 0.004 0.360 0.004 blending_functions.py:61(_compose_alpha) 16109 0.333 0.000 0.333 0.000 {method 'encode' of 'ImagingEncoder' objects} 54 0.324 0.006 0.324 0.006 {method 'normal' of 'numpy.random._generator.Generator' objects} 41720 0.321 0.000 0.321 0.000 {method 'reduce' of 'numpy.ufunc' objects} 4529 0.320 0.000 8.439 0.002 image_util.py:126(blend_image) 108 0.306 0.003 0.601 0.006 image_util.py:262(to_rgb) 10 0.259 0.026 0.405 0.040 blending_functions.py:786(divide) 95 0.218 0.002 0.218 0.002 ufunclike.py:127(isposinf) 43 0.214 0.005 1.001 0.023 gray.py:38(apply) 151 0.210 0.001 0.211 0.001 {method 'permutation' of 'numpy.random.mtrand.RandomState' objects} 16614 0.210 0.000 0.210 0.000 _methods.py:106(_clip_dep_invoke_with_casting) 9 0.208 0.023 0.359 0.040 blending_functions.py:306(dodge) 16 0.207 0.013 0.207 0.013 {method 'convert' of 'ImagingCore' objects} 11 0.206 0.019 0.418 0.038 blending_functions.py:412(darken_only) 5417 0.206 0.000 0.206 0.000 {method 'join' of 'bytes' objects} 955 0.184 0.000 0.184 0.000 {remap} 6 0.182 0.030 0.300 0.050 blending_functions.py:253(screen) 95 0.173 0.002 0.173 0.002 ufunclike.py:199(isneginf) 1952 0.166 0.000 0.166 0.000 {GaussianBlur} 11 0.161 0.015 0.362 0.033 blending_functions.py:359(addition) 8 0.156 0.020 0.339 0.042 blending_functions.py:465(multiply) 7 0.149 0.021 0.300 0.043 blending_functions.py:575(difference) 9 0.148 0.016 0.302 0.034 blending_functions.py:200(lighten_only) 207 0.136 0.001 8.625 0.042 switch.py:38(apply) 23 0.125 0.005 4.905 0.213 template_cnjpkr_str.py:228() 1979 0.124 0.000 0.124 0.000 {method 'nonzero' of 'numpy.ndarray' objects} 20 0.106 0.005 72.551 3.628 template_cnjpkr_str.py:108(generate) 1956 0.097 0.000 1.285 0.001 image_util.py:149(fit_image) 39820 0.096 0.000 0.450 0.000 fromnumeric.py:69(_wrapreduction) 8922 0.088 0.000 0.317 0.000 Image.py:3030(fromarray) 272030 0.088 0.000 0.088 0.000 {built-in method builtins.round} 16 0.081 0.005 1.793 0.112 base_texture.py:75(data) 2448 0.078 0.000 0.098 0.000 image_util.py:13(create_image) 33228 0.077 0.000 0.220 0.000 _methods.py:91(_clip_dep_is_scalar_nan) 16 0.075 0.005 1.712 0.107 base_texture.py:97(_read_texture) 16 0.074 0.005 0.074 0.005 {method 'copy' of 'ImagingCore' objects} 955 0.073 0.000 0.416 0.000 geometric.py:4556(_map_coordinates) 23 0.067 0.003 3.271 0.142 fit.py:16(apply) 27298 0.067 0.000 0.206 0.000 _dtype.py:328(_name_get) 9362 0.065 0.000 0.275 0.000 image_util.py:223(to_bbox) 6081 0.063 0.000 0.063 0.000 {method 'random' of 'numpy.random._generator.Generator' objects} 1955 0.062 0.000 0.442 0.000 blur.py:30(blurgaussian) 5405 0.062 0.000 0.756 0.000 Image.py:687(array_interface) 2105 0.062 0.000 3.458 0.002 layer.py:50(output) 16614 0.055 0.000 0.515 0.000 _methods.py:125(_clip) 955 0.053 0.000 0.529 0.001 geometric.py:4524(_generate_shift_maps) 23 0.052 0.002 51.403 2.235 template_cnjpkr_str.py:282(_blend_images) 955 0.051 0.000 4.780 0.005 text_layer.py:15(init) 185802/185200 0.051 0.000 0.083 0.000 {built-in method builtins.isinstance} 47 0.050 0.001 0.050 0.001 {resize} 23247 0.050 0.000 0.074 0.000 Image.py:543(_new) 11206 0.049 0.000 0.049 0.000 {built-in method PIL._imaging.fill} 127 0.049 0.000 0.051 0.000 arraypad.py:86(_pad_simple) 5405 0.049 0.000 0.657 0.000 Image.py:729(tobytes) 95 0.047 0.000 0.629 0.007 type_check.py:404(nan_to_num) 33251 0.047 0.000 0.087 0.000 fromnumeric.py:3164(ndim) 34469 0.042 0.000 0.042 0.000 {built-in method numpy.asarray} 6357 0.042 0.000 0.059 0.000 image_util.py:208(to_quad) 18 0.041 0.002 2.829 0.157 additive_gaussian_noise.py:33(apply) 1329 0.041 0.000 0.041 0.000 {method 'draw_bitmap' of 'ImagingDraw' objects} 8922 0.039 0.000 0.225 0.000 Image.py:2973(frombuffer) 2907 0.039 0.000 0.044 0.000 blur.py:370(_compute_gaussian_blur_ksize) 18 0.037 0.002 0.312 0.017 median_blur.py:30(apply) 9877 0.037 0.000 0.146 0.000 Image.py:2896(new) 1135/1117 0.037 0.000 4.062 0.004 meta.py:553(augmentbatch) 1 0.036 0.036 72.690 72.690 text2png_synthtiger_1line_horizontal_20230814_cprofile.py:229(test) 15 0.036 0.002 0.298 0.020 gussian_blur.py:30(apply) 27573 0.035 0.000 0.085 0.000 numerictypes.py:356(issubdtype) 2979 0.034 0.000 0.089 0.000 dtypes.py:285(gate_dtypes) 19276 0.033 0.000 0.222 0.000 fromnumeric.py:2800(amin) 54 0.032 0.001 0.032 0.001 {medianBlur} 33172 0.032 0.000 0.032 0.000 Image.py:512(init_) 55146 0.031 0.000 0.046 0.000 numerictypes.py:282(issubclass) 19277 0.028 0.000 0.184 0.000 fromnumeric.py:2675(amax) 27298 0.028 0.000 0.111 0.000 _dtype.py:314(_name_includes_bit_suffix) 275 0.028 0.000 0.041 0.000 {method 'choice' of 'numpy.random.mtrand.RandomState' objects} 1933 0.027 0.000 0.035 0.000 stride_tricks.py:339(_broadcast_to) 33251 0.027 0.000 0.143 0.000 <array_function internals>:177(ndim) 320 0.027 0.000 1.054 0.003 layer.py:289(output) 337 0.027 0.000 0.027 0.000 {built-in method nt.stat} 39820 0.026 0.000 0.026 0.000 fromnumeric.py:70() 1117 0.026 0.000 4.099 0.004 meta.py:1689(augment) 16614 0.025 0.000 0.581 0.000 fromnumeric.py:2083(clip) 114571 0.025 0.000 0.027 0.000 {built-in method builtins.issubclass} 20 0.025 0.001 1.335 0.067 template_cnjpkr_str.py:259(_generate_background) 190 0.025 0.000 0.416 0.002 ufunclike.py:48(func) 2013 0.024 0.000 0.024 0.000 {getPerspectiveTransform} 51310 0.024 0.000 0.024 0.000 {built-in method builtins.getattr} 19276 0.024 0.000 0.276 0.000 <array_function internals>:177(amin) 56121 0.024 0.000 0.078 0.000 layer.py:72(quad) 3424 0.024 0.000 0.024 0.000 {built-in method numpy.zeros} 5126 0.023 0.000 0.023 0.000 random.py:1379(_set_generator_statenp117) 33228 0.022 0.000 0.030 0.000 _methods.py:101(_clip_dep_is_byte_swapped) 2823 0.022 0.000 0.121 0.000 layer.py:152(topleft) 5405 0.022 0.000 0.038 0.000 Image.py:248(_conv_type_shape) 13478/6739 0.021 0.000 0.077 0.000 configparser.py:765(get) 8904 0.021 0.000 0.021 0.000 {built-in method PIL._imaging.map_buffer} 5405 0.021 0.000 0.035 0.000 Image.py:417(_getencoder) 212 0.021 0.000 0.111 0.001 rgb.py:43(apply) 18817 0.021 0.000 0.029 0.000 Image.py:2875(_check_size) 19161 0.020 0.000 2.422 0.000 fromnumeric.py:51(_wrapfunc) 1329 0.020 0.000 0.919 0.001 ImageDraw.py:453(draw_text) 19277 0.019 0.000 0.229 0.000 <__array_function internals>:177(amax) 116521/116483 0.019 0.000 0.019 0.000 {built-in method builtins.len} 9362 0.019 0.000 0.307 0.000 layer.py:76(quad) 16614 0.019 0.000 0.534 0.000 {method 'clip' of 'numpy.ndarray' objects} 15276 0.019 0.000 0.026 0.000 Image.py:835(load) 23 0.019 0.001 0.263 0.011 pad.py:57(apply) 1877 0.019 0.000 0.039 0.000 _methods.py:162(_mean) 16614 0.018 0.000 0.622 0.000 <__array_function__ internals>:177(clip) 1910 0.018 0.000 0.524 0.000 ImageFont.py:217(init) 955 0.018 0.000 0.473 0.000 geometric.py:4361(_augment_image_by_samples) 23 0.018 0.001 15.046 0.654 template_cnjpkr_str.py:217(_generate_text) 5126 0.017 0.000 0.017 0.000 random.py:1351(_get_generator_state_np117) 5126/5018 0.017 0.000 0.570 0.000 parameters.py:389(draw_samples) 1329 0.016 0.000 0.856 0.001 ImageFont.py:1059(getmask2) 1117 0.016 0.000 0.125 0.000 batches.py:170(to_normalized_batch) 16 0.016 0.001 2.045 0.128 base_texture.py:64(apply) 2 0.016 0.008 0.608 0.304 text_extrusion.py:60(apply) 22 0.016 0.001 0.365 0.017 flow_layout.py:70(apply) 955 0.015 0.000 1.279 0.001 geometric.py:4308(_augmentbatch) 2118 0.015 0.000 0.015 0.000 {method 'copy' of 'numpy.ndarray' objects} 54 0.015 0.000 0.376 0.007 parameters.py:1074(_draw_samples) 54 0.015 0.000 1.930 0.036 arithmetic.py:207(add_elementwise) 27418 0.015 0.000 0.015 0.000 {method 'format' of 'str' objects} 6357 0.014 0.000 0.087 0.000 layer.py:85(bbox) 5054 0.014 0.000 0.082 0.000 parameters.py:666(_draw_samples) 3097 0.014 0.000 0.285 0.000 layer.py:16(init) 955 0.014 0.000 0.014 0.000 {convertMaps} 955 0.014 0.000 3.694 0.004 text_layer.py:160(_get_image) 13404 0.014 0.000 0.036 0.000 normalization.py:1186(estimate_normalization_type) 107 0.013 0.000 0.013 0.000 {dilate} 986 0.013 0.000 0.064 0.000 layer.py:305() 45 0.013 0.000 0.057 0.001 blur.py:459(_augmentbatch) 18992 0.013 0.000 0.021 0.000 {built-in method _abc._abc_instancecheck} 13404 0.013 0.000 0.018 0.000 normalization.py:1257(_nonempty_info_to_type_str) 7208 0.013 0.000 0.014 0.000 {built-in method builtins.any} 46 0.013 0.000 0.057 0.001 configparser.py:725(read_dict) 686 0.013 0.000 0.040 0.000 image_util.py:248(merge_bbox) 1500 0.012 0.000 0.012 0.000 {method 'randint' of 'numpy.random.mtrand.RandomState' objects} 4434 0.012 0.000 0.785 0.000 Image.py:3296(alpha_composite) 955 0.012 0.000 0.431 0.000 ImageFont.py:893(init) 23388 0.012 0.000 0.033 0.000 layer.py:81(bbox) 913 0.012 0.000 0.068 0.000 layer.py:238(centery) 6702 0.012 0.000 0.020 0.000 normalization.py:12(_preprocess_shapes) 320 0.011 0.000 1.127 0.004 layer.py:298(merge) 6739 0.011 0.000 0.039 0.000 configparser.py:406(_interpolate_some) 20 0.011 0.001 72.654 3.633 text2png_synthtiger_1line_horizontal_20230814_cprofile.py:59(text2png) 4468 0.011 0.000 0.022 0.000 normalization.py:1152(_estimate_polygons_and_line_segments_norm_type) 2099 0.011 0.000 0.017 0.000 batches.py:29(_get_columns) 13478 0.011 0.000 0.016 0.000 configparser.py:1139(_unify_values) 8490 0.010 0.000 0.010 0.000 {built-in method numpy.empty} 955 0.010 0.000 0.192 0.000 geometric.py:4297(_draw_samples) 13478 0.010 0.000 0.010 0.000 init.py:892(getitem) 1944 0.010 0.000 0.010 0.000 {method 'read' of '_io.BufferedReader' objects} 5054 0.010 0.000 0.040 0.000 numeric.py:289(full) 49784 0.010 0.000 0.010 0.000 {method 'append' of 'list' objects} 1117 0.010 0.000 0.071 0.000 batches.py:218(fill_from_augmented_normalizedbatch) 27048 0.010 0.000 0.016 0.000 configparser.py:874(optionxform) 27298 0.009 0.000 0.009 0.000 _dtype.py:24(_kind_name) 986 0.009 0.000 0.070 0.000 image_util.py:231(merge_quad) 5802 0.009 0.000 0.023 0.000 layer.py:148(topleft) 8214 0.009 0.000 0.080 0.000 <__array_function__ internals>:177(copyto) 25 0.009 0.000 0.061 0.002 layer.py:307(quad) 2234 0.009 0.000 0.028 0.000 normalization.py:415(_normalize_polygons_and_line_strings) 6716 0.009 0.000 0.102 0.000 configparser.py:805(_get_conv) 16077 0.009 0.000 0.012 0.000 imgaug.py:201(is_np_array) 6716 0.009 0.000 0.094 0.000 configparser.py:802(_get) 41041 0.009 0.000 0.009 0.000 {method 'items' of 'dict' objects} 955 0.009 0.000 0.041 0.000 batches.py:753(get_rowwise_shapes) 6785 0.008 0.000 0.021 0.000 configparser.py:891(set) 955 0.008 0.000 0.973 0.001 text_layer.py:33(_read_font) 6785 0.008 0.000 0.037 0.000 configparser.py:1197(set) 6716 0.008 0.000 0.111 0.000 configparser.py:826(getboolean) 2961 0.008 0.000 0.026 0.000 imgaug.py:2147(_normalize_cv2_inputarr) 40493 0.008 0.000 0.008 0.000 {method 'lower' of 'str' objects} 6739 0.008 0.000 0.119 0.000 configparser.py:1291(get) 5209 0.008 0.000 0.010 0.000 random.py:150(init) 18992 0.008 0.000 0.028 0.000 abc.py:96(instancecheck) 48 0.007 0.000 0.007 0.000 {built-in method io.open} 6413 0.007 0.000 0.007 0.000 Image.py:525(getattr) 1877 0.007 0.000 0.009 0.000 _methods.py:66(_count_reduce_items) 5126 0.007 0.000 0.066 0.000 random.py:1471(_advance_generatornp117) 12860 0.007 0.000 0.031 0.000 imgaug.py:242(is_single_integer) 1117 0.007 0.000 0.016 0.000 normalization.py:159(normalize_heatmaps) 23 0.007 0.000 1.568 0.068 elastic_distortion.py:33(apply) 2234 0.007 0.000 0.021 0.000 normalization.py:882(_invert_normalize_polygons_and_line_strings) 23 0.007 0.000 0.124 0.005 arabic_reshaper.py:74(_ligatures_re) 3 0.007 0.002 0.085 0.028 resample.py:30(apply) 5126 0.007 0.000 0.048 0.000 random.py:1223(_reset_generator_cachenp117) 955 0.007 0.000 0.081 0.000 function_base.py:4805(meshgrid) 5405 0.007 0.000 0.007 0.000 {built-in method PIL._imaging.raw_encoder} 15260 0.007 0.000 0.007 0.000 {method 'pixel_access' of 'ImagingCore' objects} 2872 0.007 0.000 0.007 0.000 {method 'dot' of 'numpy.ndarray' objects} 986 0.007 0.000 0.141 0.000 layer.py:303(quad) 5405 0.007 0.000 0.007 0.000 {method 'setimage' of 'ImagingEncoder' objects} 33251 0.007 0.000 0.007 0.000 fromnumeric.py:3160(_ndim_dispatcher) 5892/5294 0.006 0.000 0.007 0.000 {built-in method _abc._abc_subclasscheck} 10810 0.006 0.000 0.009 0.000 Image.py:535(height) 913 0.006 0.000 0.009 0.000 layer.py:156(topright) 22609 0.006 0.000 0.006 0.000 {method 'get' of 'dict' objects} 7 0.006 0.001 0.042 0.006 skew.py:38(apply) 5126 0.006 0.000 0.073 0.000 random.py:1447(advancegenerator) 6716 0.006 0.000 0.008 0.000 configparser.py:1159(_convert_to_boolean) 955 0.006 0.000 0.053 0.000 stride_tricks.py:479(broadcast_arrays) 6739 0.006 0.000 0.046 0.000 configparser.py:393(before_get) 955 0.006 0.000 0.006 0.000 stride_tricks.py:415(_broadcast_shape) 3934 0.006 0.000 0.011 0.000 dtypes.py:23(normalize_dtype) 749 0.006 0.000 0.006 0.000 {method 'uniform' of 'numpy.random.mtrand.RandomState' objects} 955 0.006 0.000 0.930 0.001 ImageDraw.py:405(text) 3991 0.006 0.000 0.100 0.000 <__array_function__ internals>:177(copy) 1117 0.006 0.000 0.011 0.000 batches.py:186() 27265 0.006 0.000 0.006 0.000 Image.py:539(size) 3 0.006 0.002 0.256 0.085 text_shadow.py:59(apply) 1910 0.006 0.000 0.530 0.000 ImageFont.py:1308(freetype) 955 0.006 0.000 0.016 0.000 dtypes.py:192(get_value_range_of_dtype) 1117 0.006 0.000 0.012 0.000 normalization.py:525(invert_normalize_images) 1117 0.006 0.000 0.089 0.000 batches.py:433(to_batch_in_augmentation) 13478 0.006 0.000 0.006 0.000 init.py:882(init) 1910 0.005 0.000 0.005 0.000 {built-in method numpy.arange} 955 0.005 0.000 0.009 0.000 ImageDraw.py:51(init) 6831 0.005 0.000 0.008 0.000 configparser.py:1166(_validate_value_types) 10810 0.005 0.000 0.008 0.000 Image.py:531(width) 5405 0.005 0.000 0.005 0.000 ImageMode.py:36(getmode) 18 0.005 0.000 0.026 0.001 imgaug.py:1310(imresize_many_images) 955 0.005 0.000 2.622 0.003 text_layer.py:180(_get_bbox) 955 0.005 0.000 0.016 0.000 ImageDraw.py:849(Draw) 16765 0.005 0.000 0.005 0.000 {method 'endswith' of 'str' objects} 23247 0.005 0.000 0.005 0.000 {method 'copy' of 'dict' objects} 6785 0.005 0.000 0.009 0.000 configparser.py:398(before_set) 19276 0.005 0.000 0.005 0.000 fromnumeric.py:2795(_amin_dispatcher) 277 0.005 0.000 0.005 0.000 arraypad.py:129(_set_pad_area) 1877 0.004 0.000 0.043 0.000 fromnumeric.py:3356(mean) 13404 0.004 0.000 0.004 0.000 normalization.py:1214(find_first_nonempty) 3987 0.004 0.000 0.007 0.000 ImageFont.py:1151() 1117 0.004 0.000 0.079 0.000 utils.py:10(copy_augmentables) 2875 0.004 0.000 0.018 0.000 numeric.py:149(ones) 955 0.004 0.000 0.007 0.000 function_base.py:4936() 19277 0.004 0.000 0.004 0.000 fromnumeric.py:2670(_amax_dispatcher) 16614 0.004 0.000 0.004 0.000 fromnumeric.py:2079(_clip_dispatcher) 1739 0.004 0.000 0.144 0.000 layer.py:45(copy) 1117 0.004 0.000 0.012 0.000 normalization.py:306(normalize_bounding_boxes) 1117 0.004 0.000 0.019 0.000 normalization.py:389(normalize_polygons) 955 0.004 0.000 0.004 0.000 getlimits.py:647(init) 1117 0.004 0.000 0.012 0.000 normalization.py:190(normalize_segmentation_maps) 955 0.004 0.000 2.615 0.003 ImageFont.py:995(getbbox) 127 0.004 0.000 0.069 0.001 arraypad.py:529(pad) 1117 0.004 0.000 4.103 0.004 meta.py:2006(call) 1117 0.004 0.000 0.011 0.000 normalization.py:233(normalize_keypoints) 6260 0.004 0.000 0.005 0.000 {built-in method builtins.all} 6013 0.004 0.000 0.005 0.000 imgaug.py:316(isstring) 5126 0.004 0.000 0.077 0.000 random.py:354(advance) 1117 0.004 0.000 0.008 0.000 normalization.py:130(normalize_images) 2872 0.004 0.000 0.017 0.000 function_base.py:5337(append) 4 0.004 0.001 0.025 0.006 trapezoidate.py:51(apply) 320 0.004 0.000 0.035 0.000 :1431(find_spec) 3241 0.004 0.000 0.016 0.000 imgaug.py:259(is_single_float) 1910 0.004 0.000 0.533 0.000 ImageFont.py:1248(truetype) 3144 0.003 0.000 0.488 0.000 <__array_function__ internals>:177(concatenate) 2234 0.003 0.000 0.013 0.000 normalization.py:1058(estimate_heatmaps_norm_type) 1117 0.003 0.000 0.016 0.000 normalization.py:402(normalize_line_strings) 1979 0.003 0.000 0.136 0.000 <__array_function__ internals>:177(nonzero) 16 0.003 0.000 0.543 0.034 ImageFile.py:155(load) 955 0.003 0.000 3.697 0.004 text_layer.py:55(_render_hori_text) 2097 0.003 0.000 0.003 0.000 {method 'reshape' of 'numpy.ndarray' objects} 2979 0.003 0.000 0.011 0.000 dtypes.py:17(normalize_dtypes) 9 0.003 0.000 0.045 0.005 rotate.py:34(apply) 3991 0.003 0.000 0.086 0.000 function_base.py:846(copy) 2979 0.003 0.000 0.003 0.000 {method 'intersection' of 'set' objects} 12287 0.003 0.000 0.003 0.000 normalization.py:1051(_assert_is_of_norm_type) 3097 0.003 0.000 0.003 0.000 image_util.py:200(add_alpha_channel) 1027 0.003 0.000 0.004 0.000 random.py:400(duplicate) 2658 0.003 0.000 0.003 0.000 {built-in method math.ceil} 156 0.003 0.000 0.004 0.000 arraysetops.py:320(_unique1d) 686 0.003 0.000 0.012 0.000 layer.py:318() 2872 0.003 0.000 0.023 0.000 <__array_function__ internals>:177(append) 2234 0.003 0.000 0.009 0.000 normalization.py:1091(estimate_keypoints_norm_type) 254 0.003 0.000 0.008 0.000 arraypad.py:454(_as_pairs) 3 0.003 0.001 0.019 0.006 perspective.py:62(apply) 2234 0.003 0.000 0.009 0.000 normalization.py:1072(estimate_segmaps_norm_type) 5892/5294 0.003 0.000 0.009 0.000 abc.py:100(subclasscheck) 6808 0.003 0.000 0.003 0.000 {method 'sub' of 're.Pattern' objects} 955 0.003 0.000 0.017 0.000 fromnumeric.py:2404(all) 7819 0.003 0.000 0.082 0.000 batches.py:444(_copy) 914 0.003 0.000 0.003 0.000 {method 'rand' of 'numpy.random.mtrand.RandomState' objects} 686 0.003 0.000 0.055 0.000 layer.py:316(bbox) 3 0.003 0.001 0.011 0.004 template_cnjpkr_str.py:326(_create_poly_mask) 955 0.002 0.000 0.037 0.000 stride_tricks.py:545() 913 0.002 0.000 0.155 0.000 layer.py:474(centery) 23 0.002 0.000 0.130 0.006 arabic_reshaper.py:100(reshape) 1877 0.002 0.000 0.048 0.000 <__array_function__ internals>:177(mean) 2234 0.002 0.000 0.014 0.000 normalization.py:1142(estimate_polygons_norm_type) 32 0.002 0.000 0.080 0.002 base_texture.py:29(sample) 2658 0.002 0.000 0.002 0.000 {built-in method math.modf} 2108 0.002 0.000 0.003 0.000 batches.py:698(nb_rows) 342 0.002 0.000 0.097 0.000 switch.py:21(sample) 7784 0.002 0.000 0.002 0.000 {method 'replace' of 'str' objects} 1117 0.002 0.000 0.015 0.000 normalization.py:864(invert_normalize_polygons) 1117 0.002 0.000 0.002 0.000 batches.py:350(init) 6739 0.002 0.000 0.002 0.000 {method 'find' of 'str' objects} 1979 0.002 0.000 0.129 0.000 fromnumeric.py:1866(nonzero) 3 0.002 0.001 0.010 0.003 image_util.py:79(erase_image) 104 0.002 0.000 0.002 0.000 {getStructuringElement} 2006 0.002 0.000 0.003 0.000 _util.py:5(is_path) 1117 0.002 0.000 0.002 0.000 batches.py:133(init) 54 0.002 0.000 2.315 0.043 arithmetic.py:1709(_augmentbatch) 8214 0.002 0.000 0.002 0.000 multiarray.py:1071(copyto) 27 0.002 0.000 0.004 0.000 TiffImagePlugin.py:795(load) 955 0.002 0.000 0.084 0.000 <__array_function__ internals>:177(meshgrid) 3 0.002 0.001 0.074 0.025 template_cnjpkr_str.py:266(_erase_image) 9423 0.002 0.000 0.002 0.000 {method 'join' of 'str' objects} 3 0.002 0.001 0.002 0.001 {findContours} 1117 0.002 0.000 0.002 0.000 meta.py:1912() 1972 0.002 0.000 0.002 0.000 {method 'decode' of 'bytes' objects} 645 0.002 0.000 0.002 0.000 getlimits.py:457(new) 2234 0.002 0.000 0.012 0.000 normalization.py:1147(estimate_line_strings_norm_type) 2099 0.002 0.000 0.019 0.000 batches.py:719(columns) 1117 0.002 0.000 0.002 0.000 batches.py:460(fill_from_batch_inaugmentation) 955 0.002 0.000 0.021 0.000 <__array_function__ internals>:177(all) 23 0.002 0.000 0.002 0.000 {built-in method builtins.dir} 2099 0.002 0.000 0.003 0.000 :1(new) 212 0.002 0.000 0.009 0.000 rgb.py:20(sample) 2147 0.002 0.000 0.002 0.000 {built-in method new of type object at 0x00007FFA8589A810} 7161 0.002 0.000 0.002 0.000 {built-in method numpy.asanyarray} 18 0.002 0.000 0.028 0.002 imgaug.py:1583(imresize_single_image) 1117 0.002 0.000 0.002 0.000 base.py:41(_warn_on_suspicious_single_image_shape) 123 0.002 0.000 0.002 0.000 {convexHull} 1377 0.002 0.000 0.002 0.000 Image.py:3153(_decompression_bomb_check) 5799 0.002 0.000 0.002 0.000 stride_tricks.py:344() 955 0.002 0.000 0.003 0.000 ImageDraw.py:118(_getink) 1117 0.002 0.000 0.009 0.000 normalization.py:589(invert_normalize_heatmaps) 1597 0.002 0.000 0.004 0.000 :62(_path_join) 8 0.002 0.000 0.002 0.000 {built-in method marshal.loads} 6834 0.002 0.000 0.002 0.000 {method 'add' of 'set' objects} 955 0.001 0.000 0.010 0.000 function_base.py:4949() 2300 0.001 0.000 0.009 0.000 imgaug.py:297(is_iterable) 23 0.001 0.000 0.205 0.009 unicode_util.py:133(split_text) 1117 0.001 0.000 0.010 0.000 normalization.py:873(invert_normalize_line_strings) 955 0.001 0.000 0.056 0.000 <__array_function__ internals>:177(broadcast_arrays) 955 0.001 0.000 0.054 0.000 random.py:1525(polyfill_random) 126 0.001 0.000 0.046 0.000 JpegImagePlugin.py:61(APP) 913 0.001 0.000 0.004 0.000 layer.py:124(bottom) 76 0.001 0.000 0.001 0.000 {built-in method builtins.print} 45 0.001 0.000 0.003 0.000 {method 'normal' of 'numpy.random.mtrand.RandomState' objects} 1933 0.001 0.000 0.002 0.000 function_base.py:346(iterable) 955 0.001 0.000 0.055 0.000 random.py:480(random) 1910 0.001 0.000 0.001 0.000 {method 'draw_ink' of 'ImagingDraw' objects} 1910 0.001 0.000 0.001 0.000 getlimits.py:671(max) 48 0.001 0.000 0.051 0.001 JpegImagePlugin.py:351(_open) 1117 0.001 0.000 0.004 0.000 normalization.py:1116(estimate_bounding_boxes_norm_type) 955 0.001 0.000 0.001 0.000 text_layer.py:214(_get_stroke_width) 955 0.001 0.000 3.698 0.004 text_layer.py:47(_render_text) 1135 0.001 0.000 0.001 0.000 meta.py:201(init) 23 0.001 0.000 0.008 0.000 base_font.py:119(_sample_font) 2979 0.001 0.000 0.001 0.000 {method 'match' of 're.Pattern' objects} 231 0.001 0.000 0.091 0.000 fromnumeric.py:2160(sum) 1933 0.001 0.000 0.001 0.000 stride_tricks.py:25(_maybe_view_as_subclass) 1597 0.001 0.000 0.002 0.000 :64() 1 0.001 0.001 0.002 0.002 {built-in method _imp.create_dynamic} 955 0.001 0.000 0.002 0.000 stride_tricks.py:537() 156 0.001 0.000 0.001 0.000 {method 'cumsum' of 'numpy.ndarray' objects} 955 0.001 0.000 0.001 0.000 ImageFont.py:1169(getmetrics) 955 0.001 0.000 0.001 0.000 ImageDraw.py:381(_multiline_check) 95 0.001 0.000 0.002 0.000 type_check.py:394(_getmaxmin) 3991 0.001 0.000 0.001 0.000 function_base.py:842(_copy_dispatcher) 1120 0.001 0.000 0.001 0.000 imgaug.py:333(is_single_bool) 1117 0.001 0.000 0.006 0.000 normalization.py:672(invert_normalize_keypoints) 1910 0.001 0.000 0.001 0.000 stride_tricks.py:541() 1117 0.001 0.000 0.001 0.000 batches.py:670(init) 23 0.001 0.000 0.001 0.000 algorithm.py:310(resolve_weak_types) 8 0.001 0.000 0.001 0.000 {built-in method io.open_code} 955 0.001 0.000 0.001 0.000 geometric.py:4020(init) 1117 0.001 0.000 0.006 0.000 normalization.py:629(invert_normalize_segmentation_maps) 1910 0.001 0.000 0.001 0.000 {method 'encode' of 'str' objects} 63 0.001 0.000 0.322 0.005 gray.py:20(sample) 955 0.001 0.000 0.004 0.000 ImageDraw.py:447(getink) 54 0.001 0.000 0.037 0.001 blur.py:786(_augmentbatch) 1135 0.001 0.000 0.003 0.000 batches.py:683(empty) 1663 0.001 0.000 0.001 0.000 {built-in method builtins.hasattr} 1027 0.001 0.000 0.001 0.000 random.py:425() 3 0.001 0.000 0.037 0.012 layer.py:65(erase) 23 0.001 0.000 0.001 0.000 {method 'findall' of '_regex.Pattern' objects} 23 0.001 0.000 0.062 0.003 reshaper_config.py:367(auto_config) 48 0.001 0.000 0.053 0.001 Image.py:3242(_open_core) 156 0.001 0.000 0.036 0.000 selector.py:25(sample) 173 0.001 0.000 0.002 0.000 TiffImagePlugin.py:574(_setitem) 9 0.001 0.000 0.036 0.004 :1302(_get_spec) 123 0.001 0.000 0.001 0.000 {fillConvexPoly} 95 0.001 0.000 0.001 0.000 shape_base.py:139(atleast_3d) 23 0.001 0.000 0.003 0.000 configparser.py:1317(init) 1117 0.001 0.000 0.003 0.000 normalization.py:765(invert_normalize_bounding_boxes) 602 0.001 0.000 0.004 0.000 typing.py:768(instancecheck) 20 0.001 0.000 0.289 0.014 gray_map.py:19(sample) 95 0.001 0.000 0.002 0.000 _ufunc_config.py:32(seterr) 104 0.001 0.000 1.231 0.012 image_util.py:257(to_gray) 602 0.001 0.000 0.003 0.000 typing.py:771(subclasscheck) 16 0.001 0.000 0.001 0.000 {built-in method PIL._imaging.new} 955 0.001 0.000 0.001 0.000 imgaug.py:221(is_np_scalar) 955 0.001 0.000 0.001 0.000 {built-in method PIL._imaging.draw} 83 0.001 0.000 0.002 0.000 meta.py:284(init) 955 0.001 0.000 0.003 0.000 dtypes.py:20() 1135 0.001 0.000 0.001 0.000 meta.py:217(exit) 277 0.001 0.000 0.001 0.000 arraypad.py:58(_view_roi) 320 0.001 0.000 0.024 0.000 layer.py:388(topleft) 32 0.001 0.000 0.070 0.002 base_texture.py:106(_get_size) 23 0.001 0.000 0.001 0.000 algorithm.py:153(get_embedding_levels) 231 0.001 0.000 0.092 0.000 <__array_function__ internals>:177(sum) 23 0.001 0.000 0.070 0.003 template_cnjpkr_str.py:231() 390 0.001 0.000 0.003 0.000 layer.py:245(init) 190 0.001 0.000 0.001 0.000 type_checks.py:6(assert_image_format) 95 0.001 0.000 0.320 0.003 shape_base.py:663(dstack) 18 0.001 0.000 0.002 0.000 {method 'choice' of 'numpy.random._generator.Generator' objects} 208 0.001 0.000 0.003 0.000 parameters.py:655(init) 3144 0.001 0.000 0.001 0.000 multiarray.py:148(concatenate) 2872 0.001 0.000 0.001 0.000 function_base.py:5333(_append_dispatcher) 174 0.001 0.000 0.005 0.000 parameters.py:68(handle_continuous_param) 69 0.001 0.000 0.001 0.000 JpegImagePlugin.py:243(DQT) 212 0.001 0.000 0.004 0.000 layer.py:23(add) 104 0.001 0.000 0.001 0.000 {method 'astype' of 'numpy.generic' objects} 1117 0.001 0.000 0.001 0.000 batches.py:199() 1877 0.001 0.000 0.001 0.000 {built-in method numpy.core._multiarray_umath.normalize_axis_index} 1910 0.001 0.000 0.001 0.000 getlimits.py:658(min) 190 0.001 0.000 0.001 0.000 ufunclike.py:22(func) 46 0.001 0.000 0.001 0.000 shape_base.py:1171(tile) 1979 0.001 0.000 0.001 0.000 fromnumeric.py:1862(_nonzero_dispatcher) 23 0.001 0.000 0.001 0.000 algorithm.py:184(explicit_embed_and_overrides) 1117 0.001 0.000 0.001 0.000 meta.py:1918() 16 0.001 0.000 0.001 0.000 {method 'close' of '_io.BufferedReader' objects} 48 0.001 0.000 0.069 0.001 Image.py:3174(open) 2029 0.001 0.000 0.001 0.000 {built-in method builtins.iter} 156 0.001 0.000 0.005 0.000 arraysetops.py:138(unique) 46 0.001 0.000 0.001 0.000 configparser.py:1240(init) 1608 0.001 0.000 0.001 0.000 :222(_verbose_message) 404 0.001 0.000 0.001 0.000 arraypad.py:109() 48 0.001 0.000 0.001 0.000 JpegImagePlugin.py:193(SOF) 27 0.001 0.000 0.046 0.002 Image.py:3653(load) 362 0.001 0.000 0.001 0.000 layer.py:90(size) 127 0.001 0.000 0.071 0.001 <__array_function__ internals>:177(pad) 543 0.001 0.000 0.001 0.000 ImageFile.py:555(_safe_read) 932 0.001 0.000 0.001 0.000 unicode_util.py:104(indic_syllabic_category) 95 0.001 0.000 0.414 0.004 fromnumeric.py:436(repeat) 192 0.001 0.000 0.005 0.000 Image.py:3862(getitem) 1257 0.001 0.000 0.001 0.000 binary.py:80(i16be) 199 0.001 0.000 1.325 0.007 fromnumeric.py:3764(round) 95 0.001 0.000 0.001 0.000 _ufunc_config.py:131(geterr) 74 0.001 0.000 2.943 0.040 selector.py:39(apply) 199 0.001 0.000 1.324 0.007 fromnumeric.py:3257(around) 42 0.001 0.000 0.003 0.000 layer.py:220(center) 173 0.001 0.000 0.004 0.000 TiffImagePlugin.py:557(getitem) 173/168 0.000 0.000 0.047 0.000 :1017(_handle_fromlist) 3210 0.000 0.000 0.000 0.000 {method 'rstrip' of 'str' objects} 199 0.000 0.000 1.326 0.007 <__array_function__ internals>:177(round_) 1521 0.000 0.000 0.000 0.000 {built-in method _struct.unpack_from} 1910 0.000 0.000 0.000 0.000 text_layer.py:218(_get_direction) 23/6 0.000 0.000 0.001 0.000 sre_parse.py:493(_parse) 212 0.000 0.000 0.001 0.000 rgb.py:53(data) 23 0.000 0.000 0.001 0.000 algorithm.py:453(resolve_implicit_levels) 87 0.000 0.000 0.000 0.000 JpegImagePlugin.py:263() 1877 0.000 0.000 0.000 0.000 fromnumeric.py:3351(_mean_dispatcher) 156 0.000 0.000 0.029 0.000 selector.py:57(_sample_idx) 44 0.000 0.000 0.001 0.000 flow_layout.py:35(sample) 23 0.000 0.000 0.002 0.000 template_cnjpkr_str.py:252() 95 0.000 0.000 0.415 0.004 <__array_function__ internals>:177(repeat) 457 0.000 0.000 0.003 0.000 imgaug.py:280(is_single_number) 935 0.000 0.000 0.000 0.000 layer.py:256(getitem) 48 0.000 0.000 0.051 0.001 ImageFile.py:88(init) 23 0.000 0.000 0.004 0.000 geometric.py:4234(init) 23 0.000 0.000 0.002 0.000 template_cnjpkr_str.py:255() 23 0.000 0.000 0.004 0.000 configparser.py:601(init) 104 0.000 0.000 1.230 0.012 <__array_function__ internals>:177(dot) 23 0.000 0.000 0.000 0.000 algorithm.py:517(reorder_resolved_levels) 23 0.000 0.000 0.001 0.000 regex.py:453(_compile) 554 0.000 0.000 0.000 0.000 arraypad.py:33(_slice_at_axis) 156 0.000 0.000 0.001 0.000 <__array_function__ internals>:177(count_nonzero) 1117 0.000 0.000 0.000 0.000 {method 'keys' of 'dict' objects} 156 0.000 0.000 0.002 0.000 fromnumeric.py:2495(cumsum) 404 0.000 0.000 0.000 0.000 arraypad.py:120() 567 0.000 0.000 0.001 0.000 TiffImagePlugin.py:662(_unpack) 23 0.000 0.000 0.000 0.000 algorithm.py:398(resolve_neutral_types) 179 0.000 0.000 0.000 0.000 {method 'flatten' of 'numpy.ndarray' objects} 22 0.000 0.000 0.067 0.003 layer.py:392(topleft) 1 0.000 0.000 0.004 0.004 curve_layout.py:44(apply) 9 0.000 0.000 0.001 0.000 size.py:1492(_compute_height_width) 1135 0.000 0.000 0.000 0.000 meta.py:213(enter) 46 0.000 0.000 0.002 0.000 pad.py:27(sample) 268 0.000 0.000 0.008 0.000 JpegImagePlugin.py:404(load_read) 156 0.000 0.000 0.003 0.000 <__array_function__ internals>:177(cumsum) 23 0.000 0.000 0.006 0.000 algorithm.py:609(get_display) 156 0.000 0.000 0.005 0.000 <__array_function__ internals>:177(unique) 23 0.000 0.000 0.001 0.000 base_font.py:132() 955 0.000 0.000 0.000 0.000 fromnumeric.py:2399(_all_dispatcher) 161 0.000 0.000 0.000 0.000 parameters.py:27(_check_value_range) 48 0.000 0.000 0.052 0.001 JpegImagePlugin.py:823(jpeg_factory) 57 0.000 0.000 0.046 0.001 Image.py:1435(getexif) 199 0.000 0.000 1.324 0.007 <__array_function__ internals>:177(around) 16 0.000 0.000 0.208 0.013 Image.py:889(convert) 156 0.000 0.000 0.001 0.000 numeric.py:425(count_nonzero) 337 0.000 0.000 0.027 0.000 :80(_path_stat) 18 0.000 0.000 0.633 0.035 template_cnjpkr_str.py:278() 95 0.000 0.000 0.321 0.003 <__array_function__ internals>:177(dstack) 23 0.000 0.000 0.000 0.000 algorithm.py:261(calc_level_runs) 18 0.000 0.000 3.532 0.196 iterator.py:34(apply) 95 0.000 0.000 0.000 0.000 type_checks.py:60(assert_opacity) 104 0.000 0.000 0.000 0.000 {method 'ravel' of 'numpy.generic' objects} 95 0.000 0.000 0.000 0.000 {built-in method numpy.seterrobj} 47 0.000 0.000 0.002 0.000 re.py:289(_compile) 955 0.000 0.000 0.000 0.000 function_base.py:4800(_meshgrid_dispatcher) 567 0.000 0.000 0.000 0.000 {built-in method _struct.unpack} 20 0.000 0.000 0.098 0.005 rect_layer.py:12(init) 15 0.000 0.000 0.001 0.000 {built-in method builtins.build_class} 323 0.000 0.000 0.000 0.000 :1265(_path_importer_cache) 23 0.000 0.000 0.008 0.000 base_font.py:39(sample) 95 0.000 0.000 0.231 0.002 <array_function internals>:177(isposinf) 69 0.000 0.000 0.001 0.000 elastic_distortion.py:19(sample) 95 0.000 0.000 0.663 0.007 <__array_function__ internals>:177(nan_to_num) 410 0.000 0.000 0.000 0.000 TiffTags.py:36(lookup) 978 0.000 0.000 0.000 0.000 {built-in method unicodedata.bidirectional} 16 0.000 0.000 0.617 0.039 Image.py:1197(copy) 95 0.000 0.000 0.001 0.000 shape_base.py:659(_dstack_dispatcher) 9 0.000 0.000 0.034 0.004 size.py:4741(_augmentbatch) 955 0.000 0.000 0.000 0.000 stride_tricks.py:475(_broadcast_arrays_dispatcher) 18 0.000 0.000 0.002 0.000 iterator.py:19(sample) 18 0.000 0.000 0.086 0.005 template_cnjpkr_str.py:276() 291 0.000 0.000 0.000 0.000 TiffImagePlugin.py:785(_ensure_read) 20 0.000 0.000 0.334 0.017 template_cnjpkr_str.py:203(_generate_color) 156 0.000 0.000 0.000 0.000 {built-in method numpy.core._multiarray_umath.count_nonzero} 595 0.000 0.000 0.000 0.000 sre_parse.py:233(next) 162 0.000 0.000 0.001 0.000 JpegImagePlugin.py:56(Skip) 16 0.000 0.000 0.619 0.039 ImageOps.py:581(exif_transpose) 23 0.000 0.000 0.063 0.003 arabic_reshaper.py:61(init) 32 0.000 0.000 0.006 0.000 base_texture.py:114(_sample_texture) 530 0.000 0.000 0.000 0.000 sre_parse.py:254(get) 320 0.000 0.000 0.000 0.000 :36(_relax_case) 23 0.000 0.000 0.000 0.000 algorithm.py:580(apply_mirroring) 20 0.000 0.000 0.006 0.000 color_map.py:50(_sample_colormap) 34 0.000 0.000 0.000 0.000 Image.py:393(_getdecoder) 66 0.000 0.000 0.000 0.000 gray.py:48(data) 18 0.000 0.000 4.252 0.236 template_cnjpkr_str.py:275(_postprocess_images) 58 0.000 0.000 0.000 0.000 enum.py:933(and) 108 0.000 0.000 0.005 0.000 parameters.py:369(draw_sample) 173 0.000 0.000 0.002 0.000 TiffImagePlugin.py:571(setitem) 156 0.000 0.000 0.000 0.000 {method 'argsort' of 'numpy.ndarray' objects} 173 0.000 0.000 0.000 0.000 TiffImagePlugin.py:654(delitem) 95 0.000 0.000 0.001 0.000 <array_function internals>:177(reshape) 23 0.000 0.000 0.194 0.008 unicode_util.py:171(reshape_text) 9 0.000 0.000 0.000 0.000 {getRotationMatrix2D} 29 0.000 0.000 0.032 0.001 image_util.py:143(resize_image) 39 0.000 0.000 0.001 0.000 TiffImagePlugin.py:746(load_rational) 23 0.000 0.000 0.000 0.000 algorithm.py:252() 230 0.000 0.000 0.001 0.000 pad.py:33() 95 0.000 0.000 0.000 0.000 shape_base.py:207(_arrays_for_stack_dispatcher) 34 0.000 0.000 0.000 0.000 {method 'setimage' of 'ImagingDecoder' objects} 23 0.000 0.000 0.000 0.000 configparser.py:198(init) 112 0.000 0.000 0.000 0.000 {method 'seek' of '_io.BufferedReader' objects} 33/2 0.000 0.000 0.000 0.000 sre_compile.py:71(_compile) 18 0.000 0.000 0.004 0.000 arithmetic.py:1833(init) 18 0.000 0.000 0.001 0.000 blur.py:765(init) 9 0.000 0.000 0.002 0.000 size.py:4857(_draw_samples) 450 0.000 0.000 0.000 0.000 {method 'rpartition' of 'str' objects} 54 0.000 0.000 0.001 0.000 additive_gaussian_noise.py:19(sample) 23 0.000 0.000 0.041 0.002 image_util.py:176(pad_image) 8 0.000 0.000 0.002 0.000 :969(get_data) 95 0.000 0.000 0.001 0.000 fromnumeric.py:198(reshape) 46 0.000 0.000 0.001 0.000 configparser.py:1203(add_section) 8 0.000 0.000 0.005 0.001 :849(get_code) 18 0.000 0.000 0.013 0.001 Image.py:2935(frombytes) 45 0.000 0.000 0.000 0.000 {method 'any' of 'numpy.generic' objects} 190 0.000 0.000 0.000 0.000 {built-in method numpy.geterrobj} 95 0.000 0.000 0.187 0.002 <array_function internals>:177(isneginf) 27 0.000 0.000 0.000 0.000 TiffImagePlugin.py:491(init) 346 0.000 0.000 0.000 0.000 TiffImagePlugin.py:619() 955 0.000 0.000 0.000 0.000 algorithm.py:54(_embedding_direction) 173 0.000 0.000 0.000 0.000 Image.py:3615(_fixup) 28 0.000 0.000 0.002 0.000 skew.py:22(sample) 83 0.000 0.000 0.000 0.000 random.py:965(_normalize_generatornp117) 237 0.000 0.000 0.000 0.000 init.py:1420(debug) 14 0.000 0.000 0.001 0.000 text_shadow.py:30(sample) 156 0.000 0.000 0.000 0.000 arraysetops.py:125(_unpack_tuple) 41 0.000 0.000 0.001 0.000 parameters.py:105(handle_discrete_param) 952 0.000 0.000 0.000 0.000 {built-in method builtins.ord} 46 0.000 0.000 0.001 0.000 configparser.py:649(add_section) 36 0.000 0.000 0.000 0.000 rotate.py:20(sample) 39 0.000 0.000 0.000 0.000 TiffImagePlugin.py:317(init) 126 0.000 0.000 0.000 0.000 {boundingRect} 15 0.000 0.000 0.001 0.000 blur.py:443(init) 54 0.000 0.000 0.324 0.006 random.py:597(normal) 95 0.000 0.000 0.001 0.000 <__array_function internals>:177(atleast_3d) 122 0.000 0.000 0.000 0.000 enum.py:313(call) 23 0.000 0.000 0.006 0.000 unicode_util.py:179(reorder_text) 955 0.000 0.000 0.000 0.000 {built-in method unicodedata.mirrored} 99 0.000 0.000 0.000 0.000 :389(parent) 23 0.000 0.000 0.000 0.000 os.py:670(getitem) 398 0.000 0.000 0.000 0.000 fromnumeric.py:3253(_around_dispatcher) 18 0.000 0.000 0.005 0.000 Image.py:807(frombytes) 9/5 0.000 0.000 0.041 0.008 {built-in method builtins.exec} 23 0.000 0.000 0.001 0.000 numeric.py:571(argwhere) 177 0.000 0.000 0.000 0.000 {built-in method builtins.setattr} 18 0.000 0.000 0.002 0.000 parameters.py:801(_draw_samples) 237 0.000 0.000 0.000 0.000 init.py:1685(isEnabledFor) 1 0.000 0.000 0.039 0.039 TiffImagePlugin.py:41() 23 0.000 0.000 0.000 0.000 fromnumeric.py:38(_wrapit) 45 0.000 0.000 0.001 0.000 fromnumeric.py:2305(any) 54 0.000 0.000 0.001 0.000 median_blur.py:18(sample) 72 0.000 0.000 0.000 0.000 TiffImagePlugin.py:694() 261 0.000 0.000 0.000 0.000 {built-in method builtins.repr} 9 0.000 0.000 0.013 0.001 size.py:1413(_augment_images_by_samples) 48 0.000 0.000 0.000 0.000 Image.py:3608(init) 39 0.000 0.000 0.000 0.000 fractions.py:84(new) 126 0.000 0.000 0.000 0.000 template_cnjpkr_str.py:332() 16 0.000 0.000 0.001 0.000 trapezoidate.py:23(sample) 530 0.000 0.000 0.000 0.000 {method 'pop' of 'dict' objects} 196 0.000 0.000 0.000 0.000 {built-in method builtins.callable} 45 0.000 0.000 0.001 0.000 gussian_blur.py:18(sample) 18 0.000 0.000 0.000 0.000 {method 'round' of 'numpy.generic' objects} 39 0.000 0.000 0.001 0.000 _collections_abc.py:657(get) 18 0.000 0.000 0.001 0.000 arithmetic.py:1695(init) 12 0.000 0.000 0.000 0.000 perspective.py:31(sample) 519 0.000 0.000 0.000 0.000 TiffImagePlugin.py:525() 48 0.000 0.000 0.000 0.000 JpegImagePlugin.py:512(_getmp) 231 0.000 0.000 0.000 0.000 fromnumeric.py:2155(_sum_dispatcher) 456 0.000 0.000 0.000 0.000 {method 'read' of '_io.BytesIO' objects} 9/5 0.000 0.000 0.047 0.009 :986(_find_and_load) 9 0.000 0.000 0.016 0.002 size.py:4784(_keep_size_images) 9 0.000 0.000 0.036 0.004 :890(_find_spec) 122 0.000 0.000 0.000 0.000 enum.py:631(new) 48 0.000 0.000 0.000 0.000 BmpImagePlugin.py:55(_dib_accept) 45 0.000 0.000 0.001 0.000 <__array_function__ internals>:177(any) 127 0.000 0.000 0.000 0.000 {method 'ravel' of 'numpy.ndarray' objects} 23 0.000 0.000 0.002 0.000 regex.py:331(findall) 83 0.000 0.000 0.000 0.000 random.py:943(normalizegenerator) 9 0.000 0.000 0.000 0.000 text_extrusion.py:31(sample) 36 0.000 0.000 0.001 0.000 fromnumeric.py:2970(prod) 9 0.000 0.000 0.015 0.002 meta.py:3116(_augmentbatch) 16 0.000 0.000 0.000 0.000 :294(cache_from_source) 1 0.000 0.000 0.000 0.000 init.py:313(namedtuple) 296 0.000 0.000 0.000 0.000 {method 'upper' of 'str' objects} 46 0.000 0.000 0.001 0.000 <__array_function__ internals>:177(tile) 200 0.000 0.000 0.000 0.000 TiffImagePlugin.py:568(contains) 39 0.000 0.000 0.001 0.000 TiffImagePlugin.py:750(combine) 3 0.000 0.000 0.001 0.000 translate.py:51(apply) 62 0.000 0.000 0.000 0.000 TiffImagePlugin.py:731(load_string) 185 0.000 0.000 0.000 0.000 sre_parse.py:164(getitem) 190 0.000 0.000 0.000 0.000 _collections_abc.py:719(iter) 173 0.000 0.000 0.000 0.000 TiffTags.py:29(cvt_enum) 23 0.000 0.000 0.000 0.000 polys.py:2186(init) 9 0.000 0.000 0.000 0.000 size.py:4895() 32 0.000 0.000 0.000 0.000 Image.py:3882(iter) 17/2 0.000 0.000 0.001 0.001 sre_parse.py:435(_parse_sub) 23 0.000 0.000 0.000 0.000 algorithm.py:107(get_base_level) 20 0.000 0.000 0.003 0.000 color_map.py:57() 40/12 0.000 0.000 0.000 0.000 sre_parse.py:174(getwidth) 23 0.000 0.000 0.000 0.000 geometric.py:4271(_handle_order_arg) 23 0.000 0.000 0.000 0.000 <__array_function__ internals>:177(may_share_memory) 216 0.000 0.000 0.000 0.000 _binary.py:84(i32be) 1 0.000 0.000 0.001 0.001 JpegImagePlugin.py:34() 23 0.000 0.000 0.000 0.000 {method 'finditer' of 're.Pattern' objects} 190 0.000 0.000 0.000 0.000 ufunclike.py:68(_dispatcher) 23 0.000 0.000 0.000 0.000 regex.py:475(complain_unused_args) 16 0.000 0.000 0.000 0.000 :68(_path_split) 9 0.000 0.000 0.000 0.000 :157(_get_module_lock) 23 0.000 0.000 0.000 0.000 os.py:766(getenv) 54 0.000 0.000 0.000 0.000 TiffImagePlugin.py:532(reset) 24 0.000 0.000 0.006 0.000 layer.py:330(size) 156 0.000 0.000 0.000 0.000 numeric.py:421(_count_nonzero_dispatcher) 48 0.000 0.000 0.006 0.000 Image.py:321(preinit) 9/5 0.000 0.000 0.045 0.009 :650(_load_unlocked) 316 0.000 0.000 0.000 0.000 _collections_abc.py:392(subclasshook) 36 0.000 0.000 0.001 0.000 <__array_function__ internals>:177(prod) 9 0.000 0.000 0.000 0.000 :477(_init_module_attrs) 27 0.000 0.000 0.000 0.000 {method 'tell' of '_io.BufferedReader' objects} 23 0.000 0.000 0.000 0.000 algorithm.py:653() 22 0.000 0.000 0.000 0.000 flow_layout.py:105() 232 0.000 0.000 0.000 0.000 parameters.py:366(init) 24 0.000 0.000 0.000 0.000 types.py:171(get) 9 0.000 0.000 0.015 0.002 size.py:1381(_augmentbatch) 16 0.000 0.000 0.000 0.000 {built-in method PIL._imaging.jpeg_decoder} 48 0.000 0.000 0.000 0.000 PngImagePlugin.py:715(_accept) 156 0.000 0.000 0.000 0.000 fromnumeric.py:2491(_cumsum_dispatcher) 18 0.000 0.000 0.001 0.000 parameters.py:1067(init) 127 0.000 0.000 0.000 0.000 arraypad.py:521(_pad_dispatcher) 23 0.000 0.000 0.000 0.000 geometric.py:4279(_handle_mode_arg) 48 0.000 0.000 0.000 0.000 Image.py:3868(contains) 46 0.000 0.000 0.000 0.000 algorithm.py:277(calc_level_run) 48 0.000 0.000 0.000 0.000 _binary.py:60(i32le) 303 0.000 0.000 0.000 0.000 {method 'seek' of '_io.BytesIO' objects} 156 0.000 0.000 0.000 0.000 arraysetops.py:133(_unique_dispatcher) 18 0.000 0.000 0.000 0.000 {built-in method PIL._imaging.raw_decoder} 18 0.000 0.000 0.000 0.000 TiffImagePlugin.py:659(iter) 1 0.000 0.000 0.000 0.000 enum.py:157(new) 23 0.000 0.000 0.001 0.000 {method 'min' of 'numpy.ndarray' objects} 23 0.000 0.000 0.000 0.000 os.py:740(encodekey) 40 0.000 0.000 0.000 0.000 _collections_abc.py:72(_check_methods) 9/5 0.000 0.000 0.046 0.009 :956(_find_and_load_unlocked) 23 0.000 0.000 0.000 0.000 algorithm.py:599(get_empty_storage) 1 0.000 0.000 0.027 0.027 fractions.py:4() 3 0.000 0.000 0.000 0.000 {built-in method builtins.sorted} 8/5 0.000 0.000 0.044 0.009 :777(exec_module) 5 0.000 0.000 0.000 0.000 {built-in method _abc._abc_init} 32 0.000 0.000 0.000 0.000 _collections_abc.py:672(keys) 95 0.000 0.000 0.000 0.000 fromnumeric.py:432(_repeat_dispatcher) 83 0.000 0.000 0.000 0.000 random.py:834(get_global_rng) 16 0.000 0.000 0.001 0.000 ImageFile.py:292(load_prepare) 9 0.000 0.000 0.000 0.000 :629(spec_from_file_location) 23 0.000 0.000 0.001 0.000 <__array_function__ internals>:177(argwhere) 78 0.000 0.000 0.001 0.000 TiffImagePlugin.py:753() 96 0.000 0.000 0.000 0.000 JpegImagePlugin.py:337(_accept) 48 0.000 0.000 0.000 0.000 JpegImagePlugin.py:487(_getmp) 69 0.000 0.000 0.000 0.000 {method 'group' of 're.Match' objects} 10 0.000 0.000 0.000 0.000 sre_compile.py:276(_optimize_charset) 18 0.000 0.000 0.000 0.000 {method 'update' of 'set' objects} 18 0.000 0.000 0.000 0.000 parameters.py:252(handle_probability_param) 23 0.000 0.000 0.000 0.000 configparser.py:171(init) 8 0.000 0.000 0.002 0.000 :578(_compile_bytecode) 16 0.000 0.000 0.000 0.000 ImageFile.py:229() 9 0.000 0.000 0.001 0.000 size.py:1477(_draw_samples) 95 0.000 0.000 0.000 0.000 type_check.py:400(_nan_to_num_dispatcher) 23 0.000 0.000 0.000 0.000 re.py:243(finditer) 45 0.000 0.000 0.000 0.000 _methods.py:54(_any) 1 0.000 0.000 0.000 0.000 GifImagePlugin.py:27() 46 0.000 0.000 0.000 0.000 configparser.py:1359(iter) 23 0.000 0.000 0.001 0.000 <__array_function__ internals>:177(broadcast_to) 92 0.000 0.000 0.000 0.000 shape_base.py:1253() 1 0.000 0.000 0.000 0.000 PpmImagePlugin.py:18() 104 0.000 0.000 0.000 0.000 multiarray.py:736(dot) 92 0.000 0.000 0.000 0.000 shape_base.py:1243() 23 0.000 0.000 0.001 0.000 stride_tricks.py:366(broadcast_to) 18 0.000 0.000 0.000 0.000 {built-in method _thread.allocate_lock} 9 0.000 0.000 0.000 0.000 size.py:4841(_get_shapes) 23 0.000 0.000 0.000 0.000 configparser.py:983(contains) 9 0.000 0.000 0.000 0.000 :103(release) 23 0.000 0.000 0.000 0.000 <__array_function__ internals>:177(transpose) 1 0.000 0.000 0.000 0.000 BmpImagePlugin.py:27() 24 0.000 0.000 0.000 0.000 enum.py:748(value) 18 0.000 0.000 0.000 0.000 batches.py:890(propagation_hooks_ctx) 126 0.000 0.000 0.000 0.000 {built-in method builtins.sum} 165 0.000 0.000 0.000 0.000 {method 'tell' of '_io.BytesIO' objects} 62 0.000 0.000 0.000 0.000 {method 'endswith' of 'bytes' objects} 18 0.000 0.000 0.000 0.000 parameters.py:802() 9 0.000 0.000 0.000 0.000 :78(acquire) 9 0.000 0.000 0.003 0.000 layer.py:456(center) 114 0.000 0.000 0.000 0.000 TiffImagePlugin.py:260() 8 0.000 0.000 0.000 0.000 :493(_classify_pyc) 18 0.000 0.000 0.000 0.000 imgaug.py:1420() 95 0.000 0.000 0.000 0.000 fromnumeric.py:193(_reshape_dispatcher) 23 0.000 0.000 0.000 0.000 geometric.py:125(_handle_cval_arg) 28 0.000 0.000 0.000 0.000 {method 'sort' of 'list' objects} 24 0.000 0.000 0.000 0.000 :51(_unpack_uint32) 48 0.000 0.000 0.000 0.000 GifImagePlugin.py:54(_accept) 18 0.000 0.000 0.000 0.000 imgaug.py:1575(_assert_two_or_three_dims) 3 0.000 0.000 0.000 0.000 size.py:1264(init) 3 0.000 0.000 0.000 0.000 translate.py:25(sample) 1 0.000 0.000 0.000 0.000 TiffImagePlugin.py:430(ImageFileDirectory_v2) 39 0.000 0.000 0.000 0.000 TiffImagePlugin.py:615() 36 0.000 0.000 0.000 0.000 perspective.py:43() 9 0.000 0.000 0.000 0.000 TiffImagePlugin.py:686(_register_basic) 9 0.000 0.000 0.000 0.000 :1426(_get_spec) 9 0.000 0.000 0.002 0.000 :549(module_from_spec) 75 0.000 0.000 0.000 0.000 sre_parse.py:249(match) 18 0.000 0.000 0.002 0.000 random.py:493(choice) 27 0.000 0.000 0.000 0.000 TiffImagePlugin.py:272(_accept) 48 0.000 0.000 0.000 0.000 BmpImagePlugin.py:51(_accept) 27 0.000 0.000 0.000 0.000 {method 'startswith' of 'bytes' objects} 23 0.000 0.000 0.000 0.000 {method 'tolist' of 'numpy.ndarray' objects} 9 0.000 0.000 0.000 0.000 size.py:4706(_validate_param) 1 0.000 0.000 0.000 0.000 enum.py:200() 24 0.000 0.000 0.002 0.000 re.py:250(compile) 95 0.000 0.000 0.000 0.000 shape_base.py:135(_atleast_3d_dispatcher) 3 0.000 0.000 0.001 0.000 size.py:4695(init) 68 0.000 0.000 0.000 0.000 sre_parse.py:160(len) 6 0.000 0.000 0.047 0.008 {built-in method builtins.import} 23 0.000 0.000 0.000 0.000 _methods.py:42(_amin) 9 0.000 0.000 0.000 0.000 :58(init) 1 0.000 0.000 0.012 0.012 decimal.py:2() 23 0.000 0.000 0.000 0.000 algorithm.py:486(reverse_contiguous_sequence) 15/5 0.000 0.000 0.047 0.009 :211(_call_with_frames_removed) 9 0.000 0.000 0.000 0.000 :424(_get_cached) 17 0.000 0.000 0.000 0.000 :376(cached) 23 0.000 0.000 0.000 0.000 fromnumeric.py:601(transpose) 23 0.000 0.000 0.000 0.000 configparser.py:958(getitem) 1 0.000 0.000 0.000 0.000 curve_layout.py:53() 32 0.000 0.000 0.000 0.000 _collections_abc.py:698(init) 45 0.000 0.000 0.000 0.000 sre_parse.py:286(tell) 9 0.000 0.000 0.000 0.000 :176(cb) 23 0.000 0.000 0.000 0.000 os.py:734(check_str) 27 0.000 0.000 0.000 0.000 :867(exit) 39 0.000 0.000 0.000 0.000 {built-in method builtins.divmod} 7 0.000 0.000 0.000 0.000 enum.py:75(setitem) 46 0.000 0.000 0.000 0.000 sre_parse.py:172(append) 9 0.000 0.000 0.000 0.000 resample.py:18(sample) 2 0.000 0.000 0.002 0.001 sre_compile.py:759(compile) 3 0.000 0.000 0.000 0.000 size.py:1274(_handle_size_arg) 6 0.000 0.000 0.000 0.000 Image.py:3398(register_open) 10 0.000 0.000 0.000 0.000 sre_parse.py:84(opengroup) 37 0.000 0.000 0.000 0.000 sre_parse.py:111(init) 23 0.000 0.000 0.000 0.000 {method 'insert' of 'list' objects} 8 0.000 0.000 0.000 0.000 {built-in method _imp._fix_co_filename} 9 0.000 0.000 0.000 0.000 :147(enter) 36 0.000 0.000 0.000 0.000 perspective.py:51() 8 0.000 0.000 0.000 0.000 enum.py:417(setattr) 10 0.000 0.000 0.000 0.000 sre_compile.py:249(_compile_charset) 46 0.000 0.000 0.000 0.000 configparser.py:1187(converters) 6 0.000 0.000 0.000 0.000 parameters.py:785(init) 18 0.000 0.000 0.000 0.000 batches.py:615(init) 9 0.000 0.000 0.000 0.000 {built-in method math.isnan} 9 0.000 0.000 0.001 0.000 :90(_path_is_mode_type) 9 0.000 0.000 0.000 0.000 numbers.py:283(float) 9 0.000 0.000 0.036 0.004 :1334(find_spec) 8 0.000 0.000 0.001 0.000 :1010(path_stats) 1 0.000 0.000 0.000 0.000 _regex_core.py:4281(_check_group_features) 1 0.000 0.000 0.000 0.000 fractions.py:60(Fraction) 18 0.000 0.000 0.000 0.000 batches.py:628(exit) 8 0.000 0.000 0.000 0.000 :526(_validate_timestamp_pyc) 81 0.000 0.000 0.000 0.000 {method 'clear' of 'dict' objects} 9 0.000 0.000 0.000 0.000 :342(init) 5 0.000 0.000 0.000 0.000 TiffImagePlugin.py:669(decorator) 45 0.000 0.000 0.000 0.000 fromnumeric.py:2300(_any_dispatcher) 56 0.000 0.000 0.000 0.000 _collections_abc.py:302(subclasshook) 23 0.000 0.000 0.000 0.000 {method 'transpose' of 'numpy.ndarray' objects} 2 0.000 0.000 0.001 0.001 sre_parse.py:937(parse) 13 0.000 0.000 0.000 0.000 Image.py:3448(register_extension) 46 0.000 0.000 0.000 0.000 shape_base.py:1167(_tile_dispatcher) 23 0.000 0.000 0.000 0.000 regex.py:480() 1 0.000 0.000 0.000 0.000 JpegPresets.py:1() 34 0.000 0.000 0.000 0.000 ImageMode.py:25(init) 3 0.000 0.000 0.000 0.000 meta.py:3085(init) 9 0.000 0.000 0.001 0.000 :99(_path_isfile) 27 0.000 0.000 0.000 0.000 :863(enter) 18 0.000 0.000 0.000 0.000 imgaug.py:1469() 1 0.000 0.000 0.000 0.000 TiffImagePlugin.py:303(IFDRational) 8 0.000 0.000 0.000 0.000 :35(_new_module) 18 0.000 0.000 0.000 0.000 iterator.py:23() 16 0.000 0.000 0.000 0.000 {method 'rsplit' of 'str' objects} 5 0.000 0.000 0.000 0.000 sre_parse.py:267(getuntil) 3 0.000 0.000 0.000 0.000 size.py:1361(_handle_interpolation_arg) 9 0.000 0.000 0.000 0.000 translate.py:37() 12 0.000 0.000 0.000 0.000 sre_parse.py:355(_escape) 3 0.000 0.000 0.000 0.000 meta.py:75(handle_children_list) 3 0.000 0.000 0.002 0.001 image_util.py:182(dilate_image) 8 0.000 0.000 0.000 0.000 :456(_check_name_wrapper) 2 0.000 0.000 0.000 0.000 curve_layout.py:24(sample) 45 0.000 0.000 0.000 0.000 {built-in method _imp.acquire_lock} 45 0.000 0.000 0.000 0.000 {built-in method _imp.release_lock} 5 0.000 0.000 0.000 0.000 abc.py:84(new) 8 0.000 0.000 0.000 0.000 _collections_abc.py:252(subclasshook) 46 0.000 0.000 0.000 0.000 configparser.py:663(has_section) 23 0.000 0.000 0.000 0.000 {method 'clear' of 'collections.deque' objects} 3 0.000 0.000 0.000 0.000 enum.py:927(or) 9 0.000 0.000 0.000 0.000 :151(exit) 36 0.000 0.000 0.000 0.000 fromnumeric.py:2965(_prod_dispatcher) 24 0.000 0.000 0.000 0.000 {built-in method from_bytes} 1 0.000 0.000 0.000 0.000 enum.py:143(prepare) 1 0.000 0.000 0.000 0.000 init.py:1280(getLogger) 7 0.000 0.000 0.000 0.000 fractions.py:302(_operator_fallbacks) 3 0.000 0.000 0.000 0.000 {built-in method _imp.is_builtin} 23 0.000 0.000 0.000 0.000 multiarray.py:1368(may_share_memory) 8 0.000 0.000 0.000 0.000 _collections_abc.py:349(subclasshook) 24 0.000 0.000 0.000 0.000 sre_parse.py:81(groups) 23 0.000 0.000 0.000 0.000 unicode_util.py:138() 11 0.000 0.000 0.000 0.000 sre_compile.py:423(_simple) 2 0.000 0.000 0.000 0.000 sre_compile.py:536(_compile_info) 9 0.000 0.000 0.000 0.000 :800(find_spec) 1 0.000 0.000 0.000 0.000 _regex_core.py:427(parse_sequence) 23 0.000 0.000 0.000 0.000 numeric.py:567(_argwhere_dispatcher) 9 0.000 0.000 0.000 0.000 size.py:4845() 1 0.000 0.000 0.000 0.000 BmpImagePlugin.py:62(BmpImageFile) 23 0.000 0.000 0.000 0.000 fit.py:12(sample) 10 0.000 0.000 0.000 0.000 sre_parse.py:96(closegroup) 1 0.000 0.000 0.000 0.000 {built-in method _locale._getdefaultlocale} 9 0.000 0.000 0.000 0.000 :725(find_spec) 2 0.000 0.000 0.000 0.000 sre_parse.py:224(init) 23 0.000 0.000 0.000 0.000 stride_tricks.py:362(_broadcast_to_dispatcher) 23 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects} 8 0.000 0.000 0.000 0.000 :939(init) 1 0.000 0.000 0.000 0.000 init.py:1331(_fixupParents) 26 0.000 0.000 0.000 0.000 TiffImagePlugin.py:388(_delegate) 25 0.000 0.000 0.000 0.000 {built-in method nt.fspath} 9 0.000 0.000 0.000 0.000 :143(init) 1 0.000 0.000 0.000 0.000 enum.py:579(_findnew) 23 0.000 0.000 0.000 0.000 fromnumeric.py:597(_transpose_dispatcher) 13 0.000 0.000 0.000 0.000 {method 'setdefault' of 'dict' objects} 16 0.000 0.000 0.000 0.000 ImageFile.py:232() 9 0.000 0.000 0.000 0.000 {built-in method _imp.is_frozen} 1 0.000 0.000 0.000 0.000 {built-in method regex._regex.compile} 7 0.000 0.000 0.000 0.000 enum.py:22(_is_dunder) 2 0.000 0.000 0.000 0.000 enum.py:543(_find_data_type) 3 0.000 0.000 0.000 0.000 Image.py:3459(register_extensions) 1 0.000 0.000 0.000 0.000 init.py:1400(init) 5/1 0.000 0.000 0.000 0.000 _regex_core.py:1904(compile) 2 0.000 0.000 0.000 0.000 sre_compile.py:598(_code) 16 0.000 0.000 0.000 0.000 {method 'cleanup' of 'ImagingDecoder' objects} 18 0.000 0.000 0.000 0.000 {method 'find' of 'bytearray' objects} 12 0.000 0.000 0.000 0.000 sre_parse.py:168(setitem) 16 0.000 0.000 0.000 0.000 ImageFile.py:75(_tilesort) 18 0.000 0.000 0.000 0.000 batches.py:622(enter) 18 0.000 0.000 0.000 0.000 {built-in method _thread.get_ident} 9 0.000 0.000 0.000 0.000 {built-in method _struct.calcsize} 1 0.000 0.000 0.000 0.000 _regex_core.py:2820(_compile) 7 0.000 0.000 0.000 0.000 enum.py:33(_is_sunder) 1 0.000 0.000 0.000 0.000 init.py:2014(getLogger) 23 0.000 0.000 0.000 0.000 unicode_util.py:141() 1 0.000 0.000 0.000 0.000 enum.py:522(_check_for_existing_members) 10 0.000 0.000 0.000 0.000 sre_compile.py:65(_combine_flags) 1 0.000 0.000 0.000 0.000 _regex_core.py:4219(init) 8 0.000 0.000 0.000 0.000 _collections_abc.py:271(subclasshook) 2 0.000 0.000 0.000 0.000 sre_parse.py:432(_uniq) 6 0.000 0.000 0.000 0.000 _regex_core.py:1854(init) 1 0.000 0.000 0.000 0.000 enum.py:68(init) 1 0.000 0.000 0.000 0.000 TiffImagePlugin.py:1874(AppendingTiffWriter) 1 0.000 0.000 0.002 0.002 :1099(create_module) 6 0.000 0.000 0.000 0.000 Image.py:3425(register_save) 1 0.000 0.000 0.000 0.000 GifImagePlugin.py:39(LoadingStrategy) 2 0.000 0.000 0.000 0.000 {built-in method _sre.compile} 16 0.000 0.000 0.000 0.000 ImageFile.py:300(load_end) 1 0.000 0.000 0.000 0.000 _regex_core.py:3489(_compile) 2 0.000 0.000 0.000 0.000 enum.py:532(_getmixins) 1 0.000 0.000 0.000 0.000 PpmImagePlugin.py:53(PpmImageFile) 1 0.000 0.000 0.000 0.000 GifImagePlugin.py:63(GifImageFile) 9 0.000 0.000 0.000 0.000 {method 'startswith' of 'str' objects} 2 0.000 0.000 0.000 0.000 init.py:214(_acquireLock) 1 0.000 0.000 0.000 0.000 six.py:96(get) 6 0.000 0.000 0.000 0.000 Image.py:3414(register_mime) 1 0.000 0.000 0.000 0.000 locale.py:622(getpreferredencoding) 1 0.000 0.000 0.000 0.000 TiffImagePlugin.py:962(ImageFileDirectory_v1) 3 0.000 0.000 0.000 0.000 size.py:4721() 1 0.000 0.000 0.000 0.000 _regex_core.py:1202(parse_escape) 9 0.000 0.000 0.000 0.000 TiffImagePlugin.py:343(numerator) 1 0.000 0.000 0.000 0.000 TiffImagePlugin.py:1061(TiffImageFile) 2 0.000 0.000 0.000 0.000 sre_parse.py:76(init) 1 0.000 0.000 0.000 0.000 _regex_core.py:2880(_compile) 2 0.000 0.000 0.000 0.000 sre_parse.py:921(fix_flags) 1 0.000 0.000 0.000 0.000 abc.py:89(register) 1 0.000 0.000 0.000 0.000 _regex_core.py:3996(init) 9 0.000 0.000 0.000 0.000 {method 'isidentifier' of 'str' objects} 1 0.000 0.000 0.000 0.000 _regex_core.py:417(_parse_pattern) 1 0.000 0.000 0.000 0.000 _regex_core.py:3410(optimise) 3 0.000 0.000 0.000 0.000 _regex_core.py:4008(get) 1 0.000 0.000 0.000 0.000 JpegImagePlugin.py:346(JpegImageFile) 1 0.000 0.000 0.000 0.000 _bootlocale.py:11(getpreferredencoding) 8 0.000 0.000 0.000 0.000 {method 'get' of 'mappingproxy' objects} 2 0.000 0.000 0.000 0.000 {built-in method fromkeys} 4 0.000 0.000 0.000 0.000 sre_compile.py:595(isstring) 2 0.000 0.000 0.000 0.000 init.py:223(_releaseLock) 1 0.000 0.000 0.000 0.000 _regex_core.py:4151(match) 1 0.000 0.000 0.000 0.000 PpmImagePlugin.py:149(PpmPlainDecoder) 9 0.000 0.000 0.000 0.000 :397(has_location) 1 0.000 0.000 0.000 0.000 six.py:164(_resolve) 1 0.000 0.000 0.000 0.000 six.py:85(_import_module) 1 0.000 0.000 0.000 0.000 _regex_core.py:2012(_compile) 8 0.000 0.000 0.000 0.000 :774(create_module) 3 0.000 0.000 0.000 0.000 enum.py:12(_is_descriptor) 1 0.000 0.000 0.000 0.000 TiffImagePlugin.py:138() 8 0.000 0.000 0.000 0.000 {built-in method _sre.unicode_iscased} 1 0.000 0.000 0.000 0.000 sre_compile.py:492(_get_charset_prefix) 1 0.000 0.000 0.000 0.000 _regex_core.py:4320(_get_required_string) 11 0.000 0.000 0.000 0.000 {method 'extend' of 'list' objects} 4 0.000 0.000 0.000 0.000 {built-in method sys.intern} 1 0.000 0.000 0.000 0.000 :1107(exec_module) 8 0.000 0.000 0.000 0.000 :964(get_filename) 9 0.000 0.000 0.000 0.000 TiffImagePlugin.py:347(denominator) 1 0.000 0.000 0.000 0.000 init.py:1671(getEffectiveLevel) 1 0.000 0.000 0.000 0.000 _regex_core.py:376(_flatten_code) 2 0.000 0.000 0.000 0.000 _regex_core.py:3399(init) 5 0.000 0.000 0.000 0.000 {method 'items' of 'mappingproxy' objects} 4 0.000 0.000 0.000 0.000 init.py:385() 5 0.000 0.000 0.000 0.000 {built-in method _sre.unicode_tolower} 1 0.000 0.000 0.000 0.000 enum.py:370(getattr) 1 0.000 0.000 0.000 0.000 sre_compile.py:461(_get_literal_prefix) 4 0.000 0.000 0.000 0.000 {method 'contains' of 'frozenset' objects} 1 0.000 0.000 0.000 0.000 _regex_core.py:3406(fix_groups) 1 0.000 0.000 0.000 0.000 {built-in method _abc._abc_register} 6 0.000 0.000 0.000 0.000 {built-in method builtins.vars} 3 0.000 0.000 0.000 0.000 Image.py:3480(register_decoder) 1 0.000 0.000 0.000 0.000 _regex_core.py:2842(init) 2 0.000 0.000 0.000 0.000 {method 'rfind' of 'str' objects} 1 0.000 0.000 0.000 0.000 _regex_core.py:384(make_case_flags) 5 0.000 0.000 0.000 0.000 TiffImagePlugin.py:668(_register_loader) 3 0.000 0.000 0.000 0.000 enum.py:223() 1 0.000 0.000 0.000 0.000 init.py:189(_checkLevel) 2 0.000 0.000 0.000 0.000 Image.py:3436(register_save_all) 1 0.000 0.000 0.000 0.000 :1088(init) 1 0.000 0.000 0.000 0.000 enum.py:175() 5 0.000 0.000 0.000 0.000 TiffImagePlugin.py:680(decorator) 5 0.000 0.000 0.000 0.000 TiffImagePlugin.py:679(_register_writer) 1 0.000 0.000 0.000 0.000 init.py:772(init) 1 0.000 0.000 0.000 0.000 _regex_core.py:1919(get_required_string) 1 0.000 0.000 0.000 0.000 init.py:1226(append) 2 0.000 0.000 0.000 0.000 {method 'acquire' of '_thread.RLock' objects} 1 0.000 0.000 0.000 0.000 _regex_core.py:1957(_compile) 1 0.000 0.000 0.000 0.000 {method 'split' of 'str' objects} 1 0.000 0.000 0.000 0.000 _regex_core.py:1898(get_firstset) 1 0.000 0.000 0.000 0.000 _regex_core.py:1978(init) 1 0.000 0.000 0.000 0.000 PpmImagePlugin.py:279(PpmDecoder) 1 0.000 0.000 0.000 0.000 {method 'setter' of 'property' objects} 1 0.000 0.000 0.000 0.000 {built-in method builtins.delattr} 1 0.000 0.000 0.000 0.000 BmpImagePlugin.py:288(BmpRleDecoder) 1 0.000 0.000 0.000 0.000 _regex_core.py:1847(make_sequence) 1 0.000 0.000 0.000 0.000 _regex_core.py:2835(compile) 1 0.000 0.000 0.000 0.000 _regex_core.py:4194(at_end) 1 0.000 0.000 0.000 0.000 :1() 1 0.000 0.000 0.000 0.000 BmpImagePlugin.py:362(DibImageFile) 2 0.000 0.000 0.000 0.000 {method 'release' of '_thread.RLock' objects} 1 0.000 0.000 0.000 0.000 {built-in method sys._getframe} 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 2 0.000 0.000 0.000 0.000 sre_compile.py:453(_get_iscased) 1 0.000 0.000 0.000 0.000 init.py:1272(disable) 1 0.000 0.000 0.000 0.000 _regex_core.py:508() 1 0.000 0.000 0.000 0.000 _regex_core.py:2831(max_width) 1 0.000 0.000 0.000 0.000 {built-in method _imp.exec_dynamic} 1 0.000 0.000 0.000 0.000 {method 'mro' of 'type' objects} 1 0.000 0.000 0.000 0.000 regex.py:646() 1 0.000 0.000 0.000 0.000 _regex_core.py:1877(fix_groups) 1 0.000 0.000 0.000 0.000 _regex_core.py:1880(optimise) 1 0.000 0.000 0.000 0.000 _regex_core.py:1901(has_simple_start) 1 0.000 0.000 0.000 0.000 _regex_core.py:1883(pack_characters)

radarhere commented 1 year ago

synthtiger has only ever had commits from one GitHub user, who hasn't made any GitHub contributions in 8 months, and hasn't responded to any synthtiger issues since January.

So I'm not convinced that this library is maintained - meaning that even if we were to figure out how to improve speed for it, it seems entirely possible that such a suggestion would never be merged.

nissansz commented 1 year ago

Don't know whether this is pillow or cv2 function: 2892831 34.393 0.000 34.393 0.000 {floodFill}

When I turn off visibility check, time is shortened half, but it may lead to image without text visible, any fast function to check text visibility? 104 10.388 0.100 46.299 0.445 template_cnjpkr_str.py:295(_check_visibility)

radarhere commented 1 year ago

The fact that it has a capital F would lead me to conclude that floodFill is cv2 - https://docs.opencv.org/3.4/d7/d1b/group__imgproc__misc.html#gaf1f55a048f8a45bc3383586e80b1f0d0

Would you be able to post a copy of your code?

radarhere commented 1 year ago

To connect the two issues, https://github.com/clovaai/synthtiger/issues/62 has been created as a synthtiger issue to ask their community about a speed increase.

nissansz commented 1 year ago

Would you be able to post a copy of your code?

template_cnjpkr_str code as follows.

"""
SynthTIGER
Copyright (c) 2021-present NAVER Corp.
MIT license
"""

import os

import cv2
import numpy as np
from PIL import Image

from synthtiger import components, layers, templates, utils

BLEND_MODES = [
    "normal",
    "multiply",
    "screen",
    "overlay",
    "hard_light",
    "soft_light",
    "dodge",
    "divide",
    "addition",
    "difference",
    "darken_only",
    "lighten_only",
]

class SynthTiger(templates.Template):
    def __init__(self, config=None):
        if config is None:
            config = {}

        self.coord_output = config.get("coord_output", True)
        self.mask_output = config.get("mask_output", True)
        self.glyph_coord_output = config.get("glyph_coord_output", True)
        self.glyph_mask_output = config.get("glyph_mask_output", True)
        self.vertical = config.get("vertical", False)
        self.quality = config.get("quality", [95, 95])
        # self.visibility_check = config.get("visibility_check", False)
        self.visibility_check = False
        self.midground = config.get("midground", 0)
        self.midground_offset = components.Translate(
            **config.get("midground_offset", {})
        )
        self.foreground_mask_pad = config.get("foreground_mask_pad", 0)
        self.corpus = components.Selector(
            [
                components.LengthAugmentableCorpus(),
                components.CharAugmentableCorpus(),
            ],
            **config.get("corpus", {}),
        )
        self.font = components.BaseFont(**config.get("font", {}))
        self.texture = components.Switch(
            components.BaseTexture(), **config.get("texture", {})
        )
        self.colormap2 = components.GrayMap(**config.get("colormap2", {}))
        self.colormap3 = components.GrayMap(**config.get("colormap3", {}))
        self.color = components.Gray(**config.get("color", {}))
        self.shape = components.Switch(
            components.Selector(
                [components.ElasticDistortion(), components.ElasticDistortion()]
            ),
            **config.get("shape", {}),
        )
        self.layout = components.Selector(
            [components.FlowLayout(), components.CurveLayout()],
            **config.get("layout", {}),
        )
        self.style = components.Switch(
            components.Selector(
                [
                    components.TextBorder(),
                    components.TextShadow(),
                    components.TextExtrusion(),
                ]
            ),
            **config.get("style", {}),
        )
        self.transform = components.Switch(
            components.Selector(
                [
                    components.Perspective(),
                    components.Perspective(),
                    components.Trapezoidate(),
                    components.Trapezoidate(),
                    components.Skew(),
                    components.Skew(),
                    components.Rotate(),
                ]
            ),
            **config.get("transform", {}),
        )
        self.fit = components.Fit()
        self.pad = components.Switch(components.Pad(), **config.get("pad", {}))
        self.postprocess = components.Iterator(
            [
                components.Switch(components.AdditiveGaussianNoise()),
                components.Switch(components.GaussianBlur()),
                components.Switch(components.Resample()),
                components.Switch(components.MedianBlur()),
            ],
            **config.get("postprocess", {}),
        )

    def generate(self,  line):
        quality = np.random.randint(self.quality[0], self.quality[1] + 1)
        midground = np.random.rand() < self.midground
        fg_color, fg_style, mg_color, mg_style, bg_color = self._generate_color()

        fg_image, label, bboxes, glyph_fg_image, glyph_bboxes = self._generate_text(
            fg_color, fg_style, line
        )
        bg_image = self._generate_background(fg_image.shape[:2][::-1], bg_color)

        if midground:
            mg_image, _, _, _, _ = self._generate_text(mg_color, mg_style, line)
            mg_image = self._erase_image(mg_image, fg_image)
            bg_image = _blend_images(mg_image, bg_image, self.visibility_check)

        image = _blend_images(fg_image, bg_image, self.visibility_check)
        image, fg_image, glyph_fg_image = self._postprocess_images(
            [image, fg_image, glyph_fg_image]
        )

        data = {
            "image": image,
            "label": label,
            "quality": quality,
            "mask": fg_image[..., 3],
            "bboxes": bboxes,
            "glyph_mask": glyph_fg_image[..., 3],
            "glyph_bboxes": glyph_bboxes,
        }

        return data

    def init_save(self, root):
        os.makedirs(root, exist_ok=True)

        gt_path = os.path.join(root, "gt.txt")
        coords_path = os.path.join(root, "coords.txt")
        glyph_coords_path = os.path.join(root, "glyph_coords.txt")

        self.gt_file = open(gt_path, "w", encoding="utf-8")
        if self.coord_output:
            self.coords_file = open(coords_path, "w", encoding="utf-8")
        if self.glyph_coord_output:
            self.glyph_coords_file = open(glyph_coords_path, "w", encoding="utf-8")

    def save(self, root, data, idx):
        image = data["image"]
        label = data["label"]
        quality = data["quality"]
        mask = data["mask"]
        bboxes = data["bboxes"]
        glyph_mask = data["glyph_mask"]
        glyph_bboxes = data["glyph_bboxes"]

        image = Image.fromarray(image[..., :3].astype(np.uint8))
        mask = Image.fromarray(mask.astype(np.uint8))
        glyph_mask = Image.fromarray(glyph_mask.astype(np.uint8))

        coords = [[x, y, x + w, y + h] for x, y, w, h in bboxes]
        coords = "\t".join([",".join(map(str, map(int, coord))) for coord in coords])
        glyph_coords = [[x, y, x + w, y + h] for x, y, w, h in glyph_bboxes]
        glyph_coords = "\t".join(
            [",".join(map(str, map(int, coord))) for coord in glyph_coords]
        )

        shard = str(idx // 10000)
        image_key = os.path.join("images", shard, f"{idx}.jpg")
        mask_key = os.path.join("masks", shard, f"{idx}.png")
        glyph_mask_key = os.path.join("glyph_masks", shard, f"{idx}.png")
        image_path = os.path.join(root, image_key)
        mask_path = os.path.join(root, mask_key)
        glyph_mask_path = os.path.join(root, glyph_mask_key)

        os.makedirs(os.path.dirname(image_path), exist_ok=True)
        image.save(image_path, quality=quality)
        if self.mask_output:
            os.makedirs(os.path.dirname(mask_path), exist_ok=True)
            mask.save(mask_path)
        if self.glyph_mask_output:
            os.makedirs(os.path.dirname(glyph_mask_path), exist_ok=True)
            glyph_mask.save(glyph_mask_path)

        self.gt_file.write(f"{image_key}\t{label}\n")
        if self.coord_output:
            self.coords_file.write(f"{image_key}\t{coords}\n")
        if self.glyph_coord_output:
            self.glyph_coords_file.write(f"{image_key}\t{glyph_coords}\n")

    def end_save(self, root):
        self.gt_file.close()
        if self.coord_output:
            self.coords_file.close()
        if self.glyph_coord_output:
            self.glyph_coords_file.close()

    def _generate_color(self):
        mg_color = self.color.sample()
        fg_style = self.style.sample()
        mg_style = self.style.sample()

        if fg_style["state"]:
            fg_color, bg_color, style_color = self.colormap3.sample()
            fg_style["meta"]["meta"]["rgb"] = style_color["rgb"]
        else:
            fg_color, bg_color = self.colormap2.sample()

        return fg_color, fg_style, mg_color, mg_style, bg_color

    # def _generate_text(self, color, style):
    def _generate_text(self, color, style, line):
        # label = self.corpus.data(self.corpus.sample())
        # label = r'我们大家二ホンてする사이드바 we are. 、'
        label = line

        # for script using diacritic, ligature and RTL
        chars = utils.split_text(label, reorder=True)

        text = "".join(chars)
        font = self.font.sample({"text": text, "vertical": self.vertical})

        char_layers = [layers.TextLayer(char, **font) for char in chars]
        self.shape.apply(char_layers)
        self.layout.apply(char_layers, {"meta": {"vertical": self.vertical}})
        char_glyph_layers = [char_layer.copy() for char_layer in char_layers]

        text_layer = layers.Group(char_layers).merge()
        text_glyph_layer = text_layer.copy()

        transform = self.transform.sample()
        self.color.apply([text_layer, text_glyph_layer], color)
        self.texture.apply([text_layer, text_glyph_layer])
        self.style.apply([text_layer, *char_layers], style)
        self.transform.apply(
            [text_layer, text_glyph_layer, *char_layers, *char_glyph_layers], transform
        )
        self.fit.apply([text_layer, text_glyph_layer, *char_layers, *char_glyph_layers])
        self.pad.apply([text_layer])

        for char_layer in char_layers:
            char_layer.topleft -= text_layer.topleft
        for char_glyph_layer in char_glyph_layers:
            char_glyph_layer.topleft -= text_layer.topleft

        out = text_layer.output()
        bboxes = [char_layer.bbox for char_layer in char_layers]

        glyph_out = text_glyph_layer.output(bbox=text_layer.bbox)
        glyph_bboxes = [char_glyph_layer.bbox for char_glyph_layer in char_glyph_layers]

        return out, label, bboxes, glyph_out, glyph_bboxes

    def _generate_background(self, size, color):
        layer = layers.RectLayer(size)
        self.color.apply([layer], color)
        self.texture.apply([layer])
        out = layer.output()
        return out

    def _erase_image(self, image, mask):
        mask = _create_poly_mask(mask, self.foreground_mask_pad)
        mask_layer = layers.Layer(mask)
        image_layer = layers.Layer(image)
        image_layer.bbox = mask_layer.bbox
        self.midground_offset.apply([image_layer])
        out = image_layer.erase(mask_layer).output(bbox=mask_layer.bbox)
        return out

    def _postprocess_images(self, images):
        image_layers = [layers.Layer(image) for image in images]
        self.postprocess.apply(image_layers)
        outs = [image_layer.output() for image_layer in image_layers]
        return outs

def _blend_images(src, dst, visibility_check=False):
    blend_modes = np.random.permutation(BLEND_MODES)

    for blend_mode in blend_modes:
        out = utils.blend_image(src, dst, mode=blend_mode)
        if not visibility_check or _check_visibility(out, src[..., 3]):
            break
    else:
        raise RuntimeError("Text is not visible")

    return out

def _check_visibility(image, mask):
    gray = utils.to_gray(image[..., :3]).astype(np.uint8)
    mask = mask.astype(np.uint8)
    height, width = mask.shape

    peak = (mask > 127).astype(np.uint8)

    kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3))
    bound = (mask > 0).astype(np.uint8)
    bound = cv2.dilate(bound, kernel, iterations=1)

    visit = bound.copy()
    visit ^= 1
    visit = np.pad(visit, 1, constant_values=1)

    border = bound.copy()
    border[mask > 0] = 0

    flag = 4 | cv2.FLOODFILL_FIXED_RANGE | cv2.FLOODFILL_MASK_ONLY

    for y in range(height):
        for x in range(width):
            if peak[y][x]:
                cv2.floodFill(gray, visit, (x, y), 1, 16, 16, flag)

    visit = visit[1:-1, 1:-1]
    count = np.sum(visit & border)
    total = np.sum(border)
    return total > 0 and count <= total * 0.1

def _create_poly_mask(image, pad=0):
    height, width = image.shape[:2]
    alpha = image[..., 3].astype(np.uint8)
    mask = np.zeros((height, width), dtype=np.float32)

    cts, _ = cv2.findContours(alpha, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    cts = sorted(cts, key=lambda ct: sum(cv2.boundingRect(ct)[:2]))

    if len(cts) == 1:
        hull = cv2.convexHull(cts[0])
        cv2.fillConvexPoly(mask, hull, 255)

    for idx in range(len(cts) - 1):
        pts = np.concatenate((cts[idx], cts[idx + 1]), axis=0)
        hull = cv2.convexHull(pts)
        cv2.fillConvexPoly(mask, hull, 255)

    mask = utils.dilate_image(mask, pad)
    out = utils.create_image((width, height))
    out[..., 3] = mask
    return out
radarhere commented 1 year ago

The code you've pasted is a slightly modified version of https://github.com/clovaai/synthtiger/blob/master/examples/synthtiger/template.py

In that code, Pillow is only used in save(). The rest of the time, it is synthtiger, cv2 and a bit of NumPy.

I think this is primarily a question for synthtiger. If you think floodFill is the main problem, then you can ask the cv2 community instead.

nissansz commented 1 year ago

Thank you.

The profile shows 2892831 times of floodfill calls, too many times, not sure why synthtiger needs so many calls.