Compare commits

..

No commits in common. "master" and "v1.1" have entirely different histories.
master ... v1.1

2 changed files with 27 additions and 18 deletions

View File

@ -36,7 +36,8 @@ Cela permet de vérifier l'optimisation effectuée par l'outil.
## Installation
Installez Python 3 ainsi que les dépendances citées dans le fichier `requirements.txt` (avec pip par exemple).
Installez Python 3 ainsi que les dépendances citées dans le fichier `requirements.txt`.
## Exemples d'utilisation

View File

@ -21,16 +21,13 @@ from time import time
rand = lambda: randint(0,200)
progress = False
def info(*args, **kwargs):
"""Like print, but if progress flag is enabled"""
if progress:
print(*args, **kwargs)
def print_stats(img):
"""Print number and percentage of black pixels"""
pixels = img.getdata()
count = sum([1 for i in pixels if i == 0])
info("{} black pixels over {} ({:.1%})".format(count, len(pixels), count/len(pixels)))
if progress:
print("{} black pixels over {} ({:.1%})".format(count, len(pixels), count/len(pixels)))
def get_lines(img):
@ -41,7 +38,8 @@ def get_lines(img):
i, n = 0, len(pixels) * len(pixels)
info("Get lines:", end = "")
if progress:
print("Get lines:", end = "")
# for each pair of pixels, get the line
for a in pixels:
for b in pixels:
@ -53,10 +51,12 @@ def get_lines(img):
lines.add(line)
lines_uniq.add(line_uniq)
i += 1
info("\rGet lines: {:.1%}".format(i / n), end = "")
if progress:
print("\rGet lines: {:.1%}".format(i / n), end = "")
info("\rGet lines: complete")
info("{} lines found".format(len(lines)))
if progress:
print("\rGet lines: complete")
print("{} lines found".format(len(lines)))
return list(lines)
@ -65,7 +65,8 @@ def removing_useless(lines):
results = []
n = len(lines)
info("Remove useless lines:", end = "")
if progress:
print("Remove useless lines:", end = "")
# for each line, see if there is a line that contains every pixel of it
lines_set = [ set(l) for l in lines ]
@ -81,10 +82,13 @@ def removing_useless(lines):
# TODO: do some tests to see if it's worth or not
if inclusions == 0 or len(l) == 1:
results.append((len(l), lines[i], l))
info("\rRemove useless lines: {:.1%}".format(i / n), end = "")
info("\rRemove useless lines: complete")
if progress:
print("\rRemove useless lines: {:.1%}".format(i / n), end = "")
if progress:
print("\rRemove useless lines: complete")
info("{} lines kept".format(len(results)))
if progress:
print("{} lines kept".format(len(results)))
return results
@ -95,7 +99,8 @@ def get_best_solution(img, lines):
results = []
n = len(px_left)
info("Draw:", end = "")
if progress:
print("Draw:", end = "")
# while the entier image has not been drown
while px_left:
# define the length of lines
@ -108,10 +113,13 @@ def get_best_solution(img, lines):
# define the pixels that are not covered by any lines
px_left = px_left.difference(line_set)
results.append((line[0], line[-1]))
info("\rDraw: {:.0%}".format(1 - len(px_left)/n), end="")
info("\rDraw: complete")
if progress:
print("\rDraw: {:.0%}".format(1 - len(px_left)/n), end="")
if progress:
print("\rDraw: complete")
info("Solution found in {} lines".format(len(results)))
if progress:
print("Solution found in {} lines".format(len(results)))
return results