Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
hull_points = end_points[ConvexHull(end_points).vertices]
idx_xmin, idx_ymin = np.argmin(hull_points, axis=0)
idx_xmax, idx_ymax = np.argmax(hull_points, axis=0)
x_range = 0.15 * (hull_points[idx_xmax][0] - hull_points[idx_xmin][0])
y_range = 0.15 * (hull_points[idx_ymax][1] - hull_points[idx_ymin][1])
idx_min_max = np.unique([idx_xmin, idx_ymin, idx_xmax, idx_ymax])
for _ in range(num):
# global deformation
p = hull_points
q = hull_points.copy()
for idx in idx_min_max:
x, y = p[idx]
q[idx] = (x + random.gauss(0, x_range), y + y_range * random.gauss(0, y_range))
path_deformed = Path()
for segment in path:
points = []
for v in segment.bpoints():
real, imag = moving_least_square_with_rigid_transformation(p, q, np.array([v.real, v.imag]),
max(x_range, y_range))
point_xformed = complex(real, imag)
points.append(point_xformed)
if len(segment.bpoints()) == 2:
line = Line(points[0], points[1])
path_deformed.append(line)
else:
cubic_bezier = CubicBezier(points[0], points[1], points[2], points[3])
path_deformed.append(cubic_bezier)
path_list.append(path_deformed)
def augment(path_nested, num):
path_list = []
path = Path()
for p in path_nested:
for segment in p:
path.append(segment)
end_points_list = []
for segment in path:
s = segment.bpoints()[0]
e = segment.bpoints()[-1]
end_points_list.append((s.real, s.imag))
end_points_list.append((e.real, e.imag))
end_points = np.array(end_points_list)
hull_points = end_points[ConvexHull(end_points).vertices]
idx_xmin, idx_ymin = np.argmin(hull_points, axis=0)
idx_xmax, idx_ymax = np.argmax(hull_points, axis=0)
x_range = 0.15 * (hull_points[idx_xmax][0] - hull_points[idx_xmin][0])
y_range = 0.15 * (hull_points[idx_ymax][1] - hull_points[idx_ymin][1])
contours = []
yOffs = -font.info.unitsPerEm
# decompose components
if len(g.components):
font.newGlyph('__svgsync')
ng = font['__svgsync']
ng.width = g.width
ng.appendGlyph(g)
ng.decompose()
g = ng
for c in g:
curve = False
points = c.points
path = Path()
currentPos = 0j
controlPoints = []
for x in range(len(points)):
p = points[x]
# print 'p#' + str(x) + '.type = ' + repr(p.type)
if p.type == 'move':
currentPos = vec2(p.x, (p.y + yOffs) * yMul)
elif p.type == 'offcurve':
controlPoints.append(p)
elif p.type == 'curve':
pos = vec2(p.x, (p.y + yOffs) * yMul)
if len(controlPoints) == 2:
cp1, cp2 = controlPoints
path.append(CubicBezier(
p1 = line['baseline'][i]
p2 = line['baseline'][i_1]
p1_c = complex(*p1)
p2_c = complex(*p2)
paths.append(Line(p1_c, p2_c))
# Add a bit on the end
tan = paths[-1].unit_tangent(1.0)
p3_c = p2_c + target_step_size * tan
paths.append(Line(p2_c, p3_c))
path = Path(*paths)
ts = find_t_spacing(path, target_step_size)
#Changing this causes issues in pretraining - not sure why
target_height = 32
rectified_to_warped_x, rectified_to_warped_y, warped_to_rectified_x, warped_to_rectified_y, max_min = generate_offset_mapping(masked_img, ts, path, 0, -2*target_step_size, cube_size = target_height)
warped_above = cv2.remap(line_mask, rectified_to_warped_x, rectified_to_warped_y, cv2.INTER_CUBIC, borderValue=(0,0,0))
rectified_to_warped_x, rectified_to_warped_y, warped_to_rectified_x, warped_to_rectified_y, max_min = generate_offset_mapping(masked_img, ts, path, 2*target_step_size, 0, cube_size = target_height)
warped_below = cv2.remap(line_mask, rectified_to_warped_x, rectified_to_warped_y, cv2.INTER_CUBIC, borderValue=(0,0,0))
above_scale = np.max((warped_above.astype(float) / 255).sum(axis=0))
below_scale = np.max((warped_below.astype(float) / 255).sum(axis=0))
ab_sum = above_scale + below_scale
points_array = np.zeros(shape=(args.point_num, 3), dtype=np.float32)
normals_array = np.zeros(shape=(args.point_num, 3), dtype=np.float32)
path = Path()
for p in paths:
p_non_empty = Path()
for segment in p:
if segment.length() > 0:
p_non_empty.append(segment)
if len(p_non_empty) != 0:
path.append(p_non_empty)
path_list = []
if args.augment:
for removal_idx in range(6):
path_with_removal = Path()
for p in path[:math.ceil((0.4 + removal_idx * 0.1) * len(paths))]:
path_with_removal.append(p)
path_list.append(path_with_removal)
path_list = path_list + augment(path, 6)
else:
path_list.append(path)
for path_idx, path in enumerate(path_list):
for sample_idx in range(args.point_num):
sample_idx_float = (sample_idx + random.random()) / (args.point_num - 1)
while True:
try:
point = path.point(sample_idx_float)
normal = path.normal(sample_idx_float)
break
except: