[fix] The worker should remove the borders
This commit is contained in:
parent
e59bd0bfc5
commit
81eb870aab
85
worker.py
Normal file → Executable file
85
worker.py
Normal file → Executable file
@ -1,4 +1,4 @@
|
|||||||
#! /usr/bin/python3
|
#! /usr/local/bin/python3
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from numpy import asarray
|
from numpy import asarray
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
@ -39,26 +39,97 @@ while data :
|
|||||||
|
|
||||||
# Trace the bitmap to a path
|
# Trace the bitmap to a path
|
||||||
path = bmp.trace(turdsize=16,alphamax=0.0, opticurve=0, opttolerance=1.0)
|
path = bmp.trace(turdsize=16,alphamax=0.0, opticurve=0, opttolerance=1.0)
|
||||||
|
|
||||||
|
|
||||||
|
# Record the min/max coordinates and a list of points
|
||||||
|
min_x = 0
|
||||||
|
min_y = 0
|
||||||
|
max_x = -9999
|
||||||
|
max_y = -9999
|
||||||
|
|
||||||
pl = []
|
pl = []
|
||||||
|
pl_index = 0
|
||||||
|
odd_indices = []
|
||||||
|
def plappend( point ):
|
||||||
|
global pl, pl_index, odd_indices, min_x, min_y, max_x, max_y
|
||||||
|
pl.append(point)
|
||||||
|
pl_index += 1
|
||||||
|
suspect = False
|
||||||
|
|
||||||
|
if point[0] <= min_x :
|
||||||
|
min_x = point[0]
|
||||||
|
suspect = True
|
||||||
|
if point[0] >= max_x :
|
||||||
|
max_x = point[0]
|
||||||
|
suspect = True
|
||||||
|
if point[1] <= min_y :
|
||||||
|
min_y = point[1]
|
||||||
|
suspect = True
|
||||||
|
if point[1] >= max_y :
|
||||||
|
max_y = point[1]
|
||||||
|
suspect = True
|
||||||
|
if suspect == True:
|
||||||
|
odd_indices.append(pl_index)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
for curve in path:
|
for curve in path:
|
||||||
start = curve.start_point
|
start = curve.start_point
|
||||||
pl.append([int(start[0]),int(start[1]),0])
|
plappend([int(start[0]),int(start[1]),0])
|
||||||
pl.append([int(start[0]),int(start[1]),color])
|
plappend([int(start[0]),int(start[1]),color])
|
||||||
for segment in curve:
|
for segment in curve:
|
||||||
end_point_x, end_point_y = segment.end_point
|
end_point_x, end_point_y = segment.end_point
|
||||||
if segment.is_corner:
|
if segment.is_corner:
|
||||||
c_x, c_y = segment.c
|
c_x, c_y = segment.c
|
||||||
pl.append([int(c_x),int(c_y),color])
|
plappend([int(c_x),int(c_y),color])
|
||||||
pass
|
pass
|
||||||
#
|
#
|
||||||
else:
|
else:
|
||||||
c1_x, c1_y = segment.c1
|
c1_x, c1_y = segment.c1
|
||||||
x, y = segment.c2
|
x, y = segment.c2
|
||||||
pl.append([int(x),int(y),color])
|
plappend([int(x),int(y),color])
|
||||||
pl.append([int(c1_x),int(c1_y),color])
|
plappend([int(c1_x),int(c1_y),color])
|
||||||
#
|
#
|
||||||
pl.append([start[0],start[1],0])
|
plappend([int(start[0]),int(start[1]),0])
|
||||||
|
|
||||||
|
# Run the border detection
|
||||||
|
def isBorder( pt ):
|
||||||
|
result = []
|
||||||
|
# calculate the distance to min/max
|
||||||
|
min_x_dst = abs(min_x - pt[0])
|
||||||
|
max_x_dst = abs(max_x - pt[0])
|
||||||
|
min_y_dst = abs(min_y - pt[1])
|
||||||
|
max_y_dst = abs(max_y - pt[1])
|
||||||
|
if min_x_dst <= 1 :
|
||||||
|
result.append("min_x")
|
||||||
|
if max_x_dst <= 1 :
|
||||||
|
result.append("max_x")
|
||||||
|
if min_y_dst <= 1 :
|
||||||
|
result.append("min_y")
|
||||||
|
if max_y_dst <= 1 :
|
||||||
|
result.append("max_y")
|
||||||
|
return result
|
||||||
|
|
||||||
|
deleteList = []
|
||||||
|
for i in range(len(odd_indices) - 1) :
|
||||||
|
ind = odd_indices[i]
|
||||||
|
pt = pl[ind]
|
||||||
|
nextpt = pl[ind+1]
|
||||||
|
# Early skip black points
|
||||||
|
if 0 == pt[2] or 0 == nextpt[2]:
|
||||||
|
continue
|
||||||
|
pt_is_bord = isBorder(pt)
|
||||||
|
nextpt_is_bord = isBorder(nextpt)
|
||||||
|
if 0 == len(pt_is_bord) or 0 == len(nextpt_is_bord):
|
||||||
|
continue
|
||||||
|
#print( "{} and {} are border.".format(pt,nextpt))
|
||||||
|
deleteList.append(ind)
|
||||||
|
deleteList.append(ind+1)
|
||||||
|
|
||||||
|
deleteList = sorted(set(deleteList), reverse=True)
|
||||||
|
for i in deleteList:
|
||||||
|
pl[i] = [pl[i][0],pl[i][1],0]
|
||||||
item["points_list"] = pl
|
item["points_list"] = pl
|
||||||
item["created_at"] = time.time()
|
item["created_at"] = time.time()
|
||||||
r.hset("images",hash_name, json.dumps(item))
|
r.hset("images",hash_name, json.dumps(item))
|
||||||
|
Loading…
Reference in New Issue
Block a user