From d4537ecb0d3180ab6d773ff67257e4c99f1b0f86 Mon Sep 17 00:00:00 2001 From: Hooshkavan-8560p Date: Wed, 8 Sep 2021 12:42:57 +0430 Subject: [PATCH 1/5] Correct Bidi "fa" and "ar" in texts and file names. --- .gitignore | 4 ++++ basic_py_module.py | 16 ++++++++++++++++ run_example_windows.cmd | 1 + trdg/data_generator.py | 9 +++++++++ trdg/fonts/fa/BNAZANIN.TTF | Bin 0 -> 60820 bytes trdg/run.py | 11 +++++++++-- 6 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 basic_py_module.py create mode 100644 run_example_windows.cmd create mode 100644 trdg/fonts/fa/BNAZANIN.TTF diff --git a/.gitignore b/.gitignore index 7b5e760f9..d1a1e4972 100644 --- a/.gitignore +++ b/.gitignore @@ -101,3 +101,7 @@ ENV/ .mypy_cache/ .vscode/* +/.vs +/out +/tests +/trdg/dicts/ar - Copy.txt diff --git a/basic_py_module.py b/basic_py_module.py new file mode 100644 index 000000000..091b470f7 --- /dev/null +++ b/basic_py_module.py @@ -0,0 +1,16 @@ + +from trdg.generators import ( + #GeneratorFromDict, + #GeneratorFromRandom, + GeneratorFromStrings, + #GeneratorFromWikipedia, +) + +texts = ['تست', 'تست2', 'تست 3'] + +# The generators use the same arguments as the CLI, only as parameters +generator = GeneratorFromStrings(texts, count=3, blur=2, random_blur=True, language='ar') + +for img, lbl in generator: + # Do something with the pillow images here. + img.save('tests/out_3/' + lbl + '.png') \ No newline at end of file diff --git a/run_example_windows.cmd b/run_example_windows.cmd new file mode 100644 index 000000000..64c69aa13 --- /dev/null +++ b/run_example_windows.cmd @@ -0,0 +1 @@ +python trdg\run.py -c 10 -l "fa" -e "png" --background 3 --name_format 0 --stroke_width 1 -i testtexts.txt \ No newline at end of file diff --git a/trdg/data_generator.py b/trdg/data_generator.py index 46a60df78..2022ec493 100644 --- a/trdg/data_generator.py +++ b/trdg/data_generator.py @@ -25,6 +25,7 @@ def generate( cls, index, text, + language, font, out_dir, size, @@ -244,9 +245,17 @@ def generate( ##################################### # Generate name for resulting image # ##################################### + if language == "ar" or language == "fa": + from arabic_reshaper import ArabicReshaper + from bidi.algorithm import get_display + + arabic_reshaper = ArabicReshaper() + text = " ".join([get_display(arabic_reshaper.reshape(w)) for w in text.split(" ")[::-1]]) + # We remove spaces if space_width == 0 if space_width == 0: text = text.replace(" ", "") + if name_format == 0: image_name = "{}_{}.{}".format(text, str(index), extension) mask_name = "{}_{}_mask.png".format(text, str(index)) diff --git a/trdg/fonts/fa/BNAZANIN.TTF b/trdg/fonts/fa/BNAZANIN.TTF new file mode 100644 index 0000000000000000000000000000000000000000..72bbfc3803c25482729903112a8130ec83978476 GIT binary patch literal 60820 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 U^7Dp{{j<#Y`Lnu?J*t@h2E7dK@Bjb+ literal 0 HcmV?d00001 diff --git a/trdg/run.py b/trdg/run.py index b761e24a5..bf1ef75bb 100755 --- a/trdg/run.py +++ b/trdg/run.py @@ -405,7 +405,7 @@ def main(): args.length, args.random, args.count, lang_dict ) - if args.language == "ar": + if args.language == "ar" or args.language == "fa": from arabic_reshaper import ArabicReshaper from bidi.algorithm import get_display @@ -428,6 +428,7 @@ def main(): zip( [i for i in range(0, string_count)], strings, + [args.language] * string_count, [fonts[rnd.randrange(0, len(fonts))] for _ in range(0, string_count)], [args.output_dir] * string_count, [args.format] * string_count, @@ -471,7 +472,13 @@ def main(): file_name = str(i) + "." + args.extension if args.space_width == 0: file_name = file_name.replace(" ", "") - f.write("{} {}\n".format(file_name, strings[i])) + + if args.language == "ar" or args.language == "fa": + sentence = " ".join([get_display(arabic_reshaper.reshape(w)) for w in strings[i].split(" ")[::-1]]) + else: + sentence = strings[i] + + f.write("{} {}\n".format(file_name, sentence)) if __name__ == "__main__": From bb7b0c828224206e4ef9694dbc85f8777ebe737c Mon Sep 17 00:00:00 2001 From: Hashem Zavvari Date: Wed, 8 Sep 2021 15:16:45 +0430 Subject: [PATCH 2/5] Update run_example_windows.cmd --- run_example_windows.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run_example_windows.cmd b/run_example_windows.cmd index 64c69aa13..864c0648a 100644 --- a/run_example_windows.cmd +++ b/run_example_windows.cmd @@ -1 +1 @@ -python trdg\run.py -c 10 -l "fa" -e "png" --background 3 --name_format 0 --stroke_width 1 -i testtexts.txt \ No newline at end of file +python trdg\run.py -f 45 -c 20 -w 3 -r -bl 1 -rbl -l "fa" -e "png" --background 2 --name_format 0 --stroke_width 1 --skew_angle 2 -rk --distorsion 3 From 157bd6944b305d249e7ac27a4b40547f8539b372 Mon Sep 17 00:00:00 2001 From: Hashem Zavvari Date: Tue, 21 Sep 2021 09:50:28 +0430 Subject: [PATCH 3/5] Delete basic_py_module.py --- basic_py_module.py | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 basic_py_module.py diff --git a/basic_py_module.py b/basic_py_module.py deleted file mode 100644 index 091b470f7..000000000 --- a/basic_py_module.py +++ /dev/null @@ -1,16 +0,0 @@ - -from trdg.generators import ( - #GeneratorFromDict, - #GeneratorFromRandom, - GeneratorFromStrings, - #GeneratorFromWikipedia, -) - -texts = ['تست', 'تست2', 'تست 3'] - -# The generators use the same arguments as the CLI, only as parameters -generator = GeneratorFromStrings(texts, count=3, blur=2, random_blur=True, language='ar') - -for img, lbl in generator: - # Do something with the pillow images here. - img.save('tests/out_3/' + lbl + '.png') \ No newline at end of file From ffdb86af6299d1c6bda352abc618d2a6d0782a57 Mon Sep 17 00:00:00 2001 From: Hashem Zavvari Date: Tue, 21 Sep 2021 09:50:46 +0430 Subject: [PATCH 4/5] Delete run_example_windows.cmd --- run_example_windows.cmd | 1 - 1 file changed, 1 deletion(-) delete mode 100644 run_example_windows.cmd diff --git a/run_example_windows.cmd b/run_example_windows.cmd deleted file mode 100644 index 864c0648a..000000000 --- a/run_example_windows.cmd +++ /dev/null @@ -1 +0,0 @@ -python trdg\run.py -f 45 -c 20 -w 3 -r -bl 1 -rbl -l "fa" -e "png" --background 2 --name_format 0 --stroke_width 1 --skew_angle 2 -rk --distorsion 3 From 4a39f8837af2d52bb41763253b838f5430167510 Mon Sep 17 00:00:00 2001 From: Hashem Zavvari Date: Tue, 21 Sep 2021 10:01:19 +0430 Subject: [PATCH 5/5] Changed back. --- .gitignore | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.gitignore b/.gitignore index d1a1e4972..7b5e760f9 100644 --- a/.gitignore +++ b/.gitignore @@ -101,7 +101,3 @@ ENV/ .mypy_cache/ .vscode/* -/.vs -/out -/tests -/trdg/dicts/ar - Copy.txt