Skip to content

Commit 01329e0

Browse files
authored
Version 1.3.2
1 parent 565bce1 commit 01329e0

File tree

8 files changed

+74
-60
lines changed

8 files changed

+74
-60
lines changed

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ The path (`/output/path/`) must be absolute.
3333
## New
3434
- Add `--character_spacing` to control space between characters (in pixels)
3535
- Add python module
36-
- Move `run.py` to an executable python file ([`trdg/bin/trdg`](trdg/bin/trdg))
3736
- Add `--font` to use only one font for all the generated images (Thank you @JulienCoutault!)
3837
- Add `--fit` and `--margins` for finer layout control
3938
- Change the text orientation using the `-or` parameter
@@ -174,7 +173,7 @@ If you want to add a new non-latin language, the amount of work is minimal.
174173

175174
1. Create a new folder with your language [two-letters code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)
176175
2. Add a .ttf font in it
177-
3. Edit `bin/trdg` to add an if statement in `load_fonts()`
176+
3. Edit `run.py` to add an if statement in `load_fonts()`
178177
4. Add a text file in `dicts` with the same two-letters code
179178
5. Run the tool as you normally would but add `-l` with your two-letters code
180179

setup.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
setup(
1414
name="trdg",
15-
version="1.3.1",
15+
version="1.3.2",
1616
description="TextRecognitionDataGenerator: A synthetic data generator for text recognition",
1717
long_description=long_description,
1818
long_description_content_type="text/markdown",
@@ -48,5 +48,9 @@
4848
"tqdm>=4.23.0",
4949
"beautifulsoup4>=4.6.0"
5050
],
51-
scripts=["trdg/bin/trdg"],
51+
entry_points={
52+
"console_scripts": [
53+
"trdg=trdg.run:main"
54+
],
55+
},
5256
)

tests.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -683,49 +683,49 @@ def test_generate_data_with_quasicrystal_background(self):
683683

684684
class CommandLineInterface(unittest.TestCase):
685685
def test_output_dir(self):
686-
args = ["./bin/trdg", "-c", "1", "--output_dir", "../tests/out_2/"]
686+
args = ["python3", "run.py", "-c", "1", "--output_dir", "../tests/out_2/"]
687687
subprocess.Popen(args, cwd="trdg/").wait()
688688
self.assertTrue(len(os.listdir("tests/out_2/")) == 1)
689689
empty_directory("tests/out_2/")
690690

691691
def test_language_english(self):
692-
args = ["./bin/trdg", "-l", "en", "-c", "1", "--output_dir", "../tests/out/"]
692+
args = ["python3", "run.py", "-l", "en", "-c", "1", "--output_dir", "../tests/out/"]
693693
subprocess.Popen(args, cwd="trdg/").wait()
694694
self.assertTrue(len(os.listdir("tests/out/")) == 1)
695695
empty_directory("tests/out/")
696696

697697
def test_language_french(self):
698-
args = ["./bin/trdg", "-l", "fr", "-c", "1", "--output_dir", "../tests/out/"]
698+
args = ["python3", "run.py", "-l", "fr", "-c", "1", "--output_dir", "../tests/out/"]
699699
subprocess.Popen(args, cwd="trdg/").wait()
700700
self.assertTrue(len(os.listdir("tests/out/")) == 1)
701701
empty_directory("tests/out/")
702702

703703
def test_language_spanish(self):
704-
args = ["./bin/trdg", "-l", "es", "-c", "1", "--output_dir", "../tests/out/"]
704+
args = ["python3", "run.py", "-l", "es", "-c", "1", "--output_dir", "../tests/out/"]
705705
subprocess.Popen(args, cwd="trdg/").wait()
706706
self.assertTrue(len(os.listdir("tests/out/")) == 1)
707707
empty_directory("tests/out/")
708708

709709
def test_language_german(self):
710-
args = ["./bin/trdg", "-l", "de", "-c", "1", "--output_dir", "../tests/out/"]
710+
args = ["python3", "run.py", "-l", "de", "-c", "1", "--output_dir", "../tests/out/"]
711711
subprocess.Popen(args, cwd="trdg/").wait()
712712
self.assertTrue(len(os.listdir("tests/out/")) == 1)
713713
empty_directory("tests/out/")
714714

715715
def test_language_chinese(self):
716-
args = ["./bin/trdg", "-l", "cn", "-c", "1", "--output_dir", "../tests/out/"]
716+
args = ["python3", "run.py", "-l", "cn", "-c", "1", "--output_dir", "../tests/out/"]
717717
subprocess.Popen(args, cwd="trdg/").wait()
718718
self.assertTrue(len(os.listdir("tests/out/")) == 1)
719719
empty_directory("tests/out/")
720720

721721
def test_count_parameter(self):
722-
args = ["./bin/trdg", "-c", "10", "--output_dir", "../tests/out/"]
722+
args = ["python3", "run.py", "-c", "10", "--output_dir", "../tests/out/"]
723723
subprocess.Popen(args, cwd="trdg/").wait()
724724
self.assertTrue(len(os.listdir("tests/out/")) == 10)
725725
empty_directory("tests/out/")
726726

727727
def test_random_sequences_letter_only(self):
728-
args = ["./bin/trdg", "-rs", "-let", "-c", "1", "--output_dir", "../tests/out/"]
728+
args = ["python3", "run.py", "-rs", "-let", "-c", "1", "--output_dir", "../tests/out/"]
729729
subprocess.Popen(args, cwd="trdg/").wait()
730730
self.assertTrue(
731731
all(
@@ -739,7 +739,7 @@ def test_random_sequences_letter_only(self):
739739
empty_directory("tests/out/")
740740

741741
def test_random_sequences_number_only(self):
742-
args = ["./bin/trdg", "-rs", "-num", "-c", "1", "--output_dir", "../tests/out/"]
742+
args = ["python3", "run.py", "-rs", "-num", "-c", "1", "--output_dir", "../tests/out/"]
743743
subprocess.Popen(args, cwd="trdg/").wait()
744744
self.assertTrue(
745745
all(
@@ -753,7 +753,7 @@ def test_random_sequences_number_only(self):
753753
empty_directory("tests/out/")
754754

755755
def test_random_sequences_symbols_only(self):
756-
args = ["./bin/trdg", "-rs", "-sym", "-c", "1", "--output_dir", "../tests/out/"]
756+
args = ["python3", "run.py", "-rs", "-sym", "-c", "1", "--output_dir", "../tests/out/"]
757757
subprocess.Popen(args, cwd="trdg/").wait()
758758
with open("tests/out/labels.txt", "r") as f:
759759
self.assertTrue(
@@ -767,14 +767,14 @@ def test_random_sequences_symbols_only(self):
767767
empty_directory("tests/out/")
768768

769769
def test_handwritten(self):
770-
args = ["./bin/trdg", "-c", "1", "--output_dir", "../tests/out/"]
770+
args = ["python3", "run.py", "-c", "1", "--output_dir", "../tests/out/"]
771771
subprocess.Popen(args, cwd="trdg/").wait()
772772
self.assertTrue(len(os.listdir("tests/out/")) == 1)
773773
empty_directory("tests/out/")
774774

775775
def test_personalfont(self):
776776
args = [
777-
"./bin/trdg",
777+
"python3", "run.py",
778778
"--font",
779779
"fonts/latin/Aller_Bd.ttf",
780780
"-c",
@@ -788,7 +788,7 @@ def test_personalfont(self):
788788

789789
def test_personalfont_unlocated(self):
790790
args = [
791-
"./bin/trdg",
791+
"python3", "run.py",
792792
"--font",
793793
"fonts/latin/unlocatedFont.ttf",
794794
"-c",

trdg/computer_text_generator.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
from PIL import Image, ImageColor, ImageFont, ImageDraw, ImageFilter
44

55

6-
def generate(text, font, text_color, font_size, orientation, space_width, character_spacing, fit):
6+
def generate(
7+
text, font, text_color, font_size, orientation, space_width, character_spacing, fit
8+
):
79
if orientation == 0:
810
return _generate_horizontal_text(
911
text, font, text_color, font_size, space_width, character_spacing, fit
@@ -16,14 +18,14 @@ def generate(text, font, text_color, font_size, orientation, space_width, charac
1618
raise ValueError("Unknown orientation " + str(orientation))
1719

1820

19-
def _generate_horizontal_text(text, font, text_color, font_size, space_width, character_spacing, fit):
21+
def _generate_horizontal_text(
22+
text, font, text_color, font_size, space_width, character_spacing, fit
23+
):
2024
image_font = ImageFont.truetype(font=font, size=font_size)
2125

2226
space_width = int(image_font.getsize(" ")[0] * space_width)
2327

24-
char_widths = [
25-
image_font.getsize(c)[0] if c != " " else space_width for c in text
26-
]
28+
char_widths = [image_font.getsize(c)[0] if c != " " else space_width for c in text]
2729
text_width = sum(char_widths) + character_spacing * (len(text) - 1)
2830
text_height = max([image_font.getsize(c)[1] for c in text])
2931

@@ -54,7 +56,9 @@ def _generate_horizontal_text(text, font, text_color, font_size, space_width, ch
5456
return txt_img
5557

5658

57-
def _generate_vertical_text(text, font, text_color, font_size, space_width, character_spacing, fit):
59+
def _generate_vertical_text(
60+
text, font, text_color, font_size, space_width, character_spacing, fit
61+
):
5862
image_font = ImageFont.truetype(font=font, size=font_size)
5963

6064
space_height = int(image_font.getsize(" ")[1] * space_width)
@@ -79,7 +83,12 @@ def _generate_vertical_text(text, font, text_color, font_size, space_width, char
7983
)
8084

8185
for i, c in enumerate(text):
82-
txt_draw.text((0, sum(char_heights[0:i]) + i * character_spacing), c, fill=fill, font=image_font)
86+
txt_draw.text(
87+
(0, sum(char_heights[0:i]) + i * character_spacing),
88+
c,
89+
fill=fill,
90+
font=image_font,
91+
)
8392

8493
if fit:
8594
return txt_img.crop(txt_img.getbbox())

trdg/data_generator.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@
33

44
from PIL import Image, ImageFilter
55

6-
from trdg import (
7-
computer_text_generator,
8-
background_generator,
9-
distorsion_generator,
10-
)
6+
from trdg import computer_text_generator, background_generator, distorsion_generator
117

128
try:
139
from trdg import handwritten_text_generator
@@ -66,7 +62,14 @@ def generate(
6662
image = handwritten_text_generator.generate(text, text_color)
6763
else:
6864
image = computer_text_generator.generate(
69-
text, font, text_color, size, orientation, space_width, character_spacing, fit
65+
text,
66+
font,
67+
text_color,
68+
size,
69+
orientation,
70+
space_width,
71+
character_spacing,
72+
fit,
7073
)
7174

7275
random_angle = rnd.randint(0 - skewing_angle, skewing_angle)

trdg/generators/__init__.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
from trdg.generators.from_dict import GeneratorFromDict
22
from trdg.generators.from_random import GeneratorFromRandom
33
from trdg.generators.from_strings import GeneratorFromStrings
4-
from trdg.generators.from_wikipedia import (
5-
GeneratorFromWikipedia,
6-
)
4+
from trdg.generators.from_wikipedia import GeneratorFromWikipedia

trdg/generators/from_strings.py

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -63,29 +63,32 @@ def __next__(self):
6363
def next(self):
6464
if self.generated_count == self.count:
6565
raise StopIteration
66-
self.generated_count += 1
67-
return FakeTextDataGenerator.generate(
68-
self.generated_count,
66+
self.generated_count += 1
67+
return (
68+
FakeTextDataGenerator.generate(
69+
self.generated_count,
70+
self.strings[(self.generated_count - 1) % len(self.strings)],
71+
self.fonts[(self.generated_count - 1) % len(self.fonts)],
72+
None,
73+
self.size,
74+
None,
75+
self.skewing_angle,
76+
self.random_skew,
77+
self.blur,
78+
self.random_blur,
79+
self.background_type,
80+
self.distorsion_type,
81+
self.distorsion_orientation,
82+
self.is_handwritten,
83+
0,
84+
self.width,
85+
self.alignment,
86+
self.text_color,
87+
self.orientation,
88+
self.space_width,
89+
self.character_spacing,
90+
self.margins,
91+
self.fit,
92+
),
6993
self.strings[(self.generated_count - 1) % len(self.strings)],
70-
self.fonts[(self.generated_count - 1) % len(self.fonts)],
71-
None,
72-
self.size,
73-
None,
74-
self.skewing_angle,
75-
self.random_skew,
76-
self.blur,
77-
self.random_blur,
78-
self.background_type,
79-
self.distorsion_type,
80-
self.distorsion_orientation,
81-
self.is_handwritten,
82-
0,
83-
self.width,
84-
self.alignment,
85-
self.text_color,
86-
self.orientation,
87-
self.space_width,
88-
self.character_spacing,
89-
self.margins,
90-
self.fit,
91-
), self.strings[(self.generated_count - 1) % len(self.strings)]
94+
)

trdg/bin/trdg renamed to trdg/run.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#!/usr/bin/env python
2-
31
import argparse
42
import os, errno
53
import random as rnd

0 commit comments

Comments
 (0)