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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions