Skip to content

TypeError in the InkGenerator #452

@pipipyau

Description

@pipipyau

Hi! Thank you for your project. I ran into a little problem with the data type in the function def generate_noise_clusters(self, image, n_clusters=(200, 200), n_samples=(300, 300), std_range=(5, 10)).
This happened when I was using Scribbles.

The problem is that it expects an int-type std std = random.randint(std_range[0], std_range[1]).

Version
augraphy==8.2.6

Traceback

File "/Users/a1/myenv/lib/python3.12/site-packages/augraphy/base/augmentationpipeline.py", line 859, in __call__
    return self.augment(image, return_dict=0)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/a1/myenv/lib/python3.12/site-packages/augraphy/base/augmentationpipeline.py", line 213, in augment
    data = self.augment_single_image(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/a1/myenv/lib/python3.12/site-packages/augraphy/base/augmentationpipeline.py", line 419, in augment_single_image
    self.apply_phase(data, layer="post", phase=self.post_phase)
  File "/Users/a1/myenv/lib/python3.12/site-packages/augraphy/base/augmentationpipeline.py", line 740, in apply_phase
    result = augmentation(
             ^^^^^^^^^^^^^
  File "/Users/a1/myenv/lib/python3.12/site-packages/augraphy/augmentations/scribbles.py", line 251, in __call__
    image_output = ink_generator.generate_ink()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/a1/myenv/lib/python3.12/site-packages/augraphy/utilities/inkgenerator.py", line 855, in generate_ink
    image_output = self.generate_lines(ink_background)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/a1/myenv/lib/python3.12/site-packages/augraphy/utilities/inkgenerator.py", line 525, in generate_lines
    line_background = self.apply_ink_effect(line_image, line_background)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/a1/myenv/lib/python3.12/site-packages/augraphy/utilities/inkgenerator.py", line 588, in apply_ink_effect
    image_merged = self.apply_highlighter_effect(foreground_image, background_image)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/a1/myenv/lib/python3.12/site-packages/augraphy/utilities/inkgenerator.py", line 350, in apply_highlighter_effect
    image_noise_center = self.generate_noise_clusters(gray_image, n_clusters, n_samples, std_range)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/a1/myenv/lib/python3.12/site-packages/augraphy/utilities/inkgenerator.py", line 279, in generate_noise_clusters
    std = random.randint(std_range[0], std_range[1])
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/python@3.12/3.12.7_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/random.py", line 336, in randint
    return self.randrange(a, b+1)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/python@3.12/3.12.7_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/random.py", line 301, in randrange
    istart = _index(start)
             ^^^^^^^^^^^^^
TypeError: 'numpy.float64' object cannot be interpreted as an integer

The solution is to simply add a type conversion to the integer in apply_highlighter_effect().
std_range = (3 + np.ceil(kernel_size / 5), 7 + np.ceil(kernel_size / 5))
to
std_range = (3 + int(np.ceil(kernel_size / 5)), 7 + int(np.ceil(kernel_size / 5)))

Maybe it will be a useful addition.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions