mirror of
https://github.com/qurator-spk/eynollah.git
synced 2025-06-09 20:29:55 +02:00
more outsourcing of utils
This commit is contained in:
parent
8d2227b04b
commit
87ef313502
6 changed files with 979 additions and 967 deletions
|
@ -53,7 +53,6 @@ from .utils.contour import (
|
|||
return_contours_of_interested_textline,
|
||||
return_parent_contours,
|
||||
return_contours_of_interested_region_by_size,
|
||||
textline_contours_postprocessing,
|
||||
)
|
||||
|
||||
from .utils.rotate import (
|
||||
|
@ -73,6 +72,9 @@ from .utils.separate_lines import (
|
|||
seperate_lines_new_inside_teils2,
|
||||
seperate_lines_vertical,
|
||||
seperate_lines_vertical_cont,
|
||||
textline_contours_postprocessing,
|
||||
seperate_lines_new2,
|
||||
return_deskew_slop,
|
||||
)
|
||||
|
||||
from .utils.drop_capitals import (
|
||||
|
@ -80,6 +82,10 @@ from .utils.drop_capitals import (
|
|||
filter_small_drop_capitals_from_no_patch_layout
|
||||
)
|
||||
|
||||
from .utils.marginals import get_marginals
|
||||
|
||||
from .utils.resize import resize_image
|
||||
|
||||
from .utils import (
|
||||
boosting_headers_by_longshot_region_segmentation,
|
||||
crop_image_inside_box,
|
||||
|
@ -91,11 +97,9 @@ from .utils import (
|
|||
isNaN,
|
||||
otsu_copy,
|
||||
otsu_copy_binary,
|
||||
resize_image,
|
||||
return_hor_spliter_by_index_for_without_verticals,
|
||||
delete_seperator_around,
|
||||
return_regions_without_seperators,
|
||||
return_deskew_slop,
|
||||
put_drop_out_from_only_drop_model,
|
||||
putt_bb_of_drop_capitals_of_model_in_patches_in_layout,
|
||||
check_any_text_region_in_model_one_is_main_or_header,
|
||||
|
@ -1177,7 +1181,7 @@ class eynollah:
|
|||
textline_biggest_region = mask_biggest * textline_mask_tot_ea
|
||||
|
||||
# print(slope_for_all,'slope_for_all')
|
||||
textline_rotated_seperated = self.seperate_lines_new2(textline_biggest_region[y : y + h, x : x + w], 0, num_col, slope_for_all)
|
||||
textline_rotated_seperated = seperate_lines_new2(textline_biggest_region[y : y + h, x : x + w], 0, num_col, slope_for_all, self.dir_of_all, self.f_name)
|
||||
|
||||
# new line added
|
||||
##print(np.shape(textline_rotated_seperated),np.shape(mask_biggest))
|
||||
|
@ -1398,374 +1402,6 @@ class eynollah:
|
|||
gc.collect()
|
||||
return prediction_textline[:, :, 0], prediction_textline_longshot_true_size[:, :, 0]
|
||||
|
||||
def seperate_lines_new(self, img_path, thetha, num_col):
|
||||
|
||||
if num_col == 1:
|
||||
num_patches = int(img_path.shape[1] / 200.0)
|
||||
else:
|
||||
num_patches = int(img_path.shape[1] / 100.0)
|
||||
# num_patches=int(img_path.shape[1]/200.)
|
||||
if num_patches == 0:
|
||||
num_patches = 1
|
||||
(h, w) = img_path.shape[:2]
|
||||
center = (w // 2, h // 2)
|
||||
M = cv2.getRotationMatrix2D(center, -thetha, 1.0)
|
||||
x_d = M[0, 2]
|
||||
y_d = M[1, 2]
|
||||
|
||||
thetha = thetha / 180.0 * np.pi
|
||||
rotation_matrix = np.array([[np.cos(thetha), -np.sin(thetha)], [np.sin(thetha), np.cos(thetha)]])
|
||||
|
||||
x_min_cont = 0
|
||||
x_max_cont = img_path.shape[1]
|
||||
y_min_cont = 0
|
||||
y_max_cont = img_path.shape[0]
|
||||
|
||||
xv = np.linspace(x_min_cont, x_max_cont, 1000)
|
||||
|
||||
mada_n = img_path.sum(axis=1)
|
||||
|
||||
##plt.plot(mada_n)
|
||||
##plt.show()
|
||||
first_nonzero = 0 # (next((i for i, x in enumerate(mada_n) if x), None))
|
||||
|
||||
y = mada_n[:] # [first_nonzero:last_nonzero]
|
||||
y_help = np.zeros(len(y) + 40)
|
||||
y_help[20 : len(y) + 20] = y
|
||||
x = np.array(range(len(y)))
|
||||
|
||||
peaks_real, _ = find_peaks(gaussian_filter1d(y, 3), height=0)
|
||||
if len(peaks_real) <= 2 and len(peaks_real) > 1:
|
||||
sigma_gaus = 10
|
||||
else:
|
||||
sigma_gaus = 6
|
||||
|
||||
z = gaussian_filter1d(y_help, sigma_gaus)
|
||||
zneg_rev = -y_help + np.max(y_help)
|
||||
zneg = np.zeros(len(zneg_rev) + 40)
|
||||
zneg[20 : len(zneg_rev) + 20] = zneg_rev
|
||||
zneg = gaussian_filter1d(zneg, sigma_gaus)
|
||||
|
||||
peaks, _ = find_peaks(z, height=0)
|
||||
peaks_neg, _ = find_peaks(zneg, height=0)
|
||||
|
||||
for nn in range(len(peaks_neg)):
|
||||
if peaks_neg[nn] > len(z) - 1:
|
||||
peaks_neg[nn] = len(z) - 1
|
||||
if peaks_neg[nn] < 0:
|
||||
peaks_neg[nn] = 0
|
||||
|
||||
diff_peaks = np.abs(np.diff(peaks_neg))
|
||||
cut_off = 20
|
||||
peaks_neg_true = []
|
||||
forest = []
|
||||
|
||||
for i in range(len(peaks_neg)):
|
||||
if i == 0:
|
||||
forest.append(peaks_neg[i])
|
||||
if i < (len(peaks_neg) - 1):
|
||||
if diff_peaks[i] <= cut_off:
|
||||
forest.append(peaks_neg[i + 1])
|
||||
if diff_peaks[i] > cut_off:
|
||||
# print(forest[np.argmin(z[forest]) ] )
|
||||
if not isNaN(forest[np.argmin(z[forest])]):
|
||||
# print(len(z),forest)
|
||||
peaks_neg_true.append(forest[np.argmin(z[forest])])
|
||||
forest = []
|
||||
forest.append(peaks_neg[i + 1])
|
||||
if i == (len(peaks_neg) - 1):
|
||||
# print(print(forest[np.argmin(z[forest]) ] ))
|
||||
if not isNaN(forest[np.argmin(z[forest])]):
|
||||
|
||||
peaks_neg_true.append(forest[np.argmin(z[forest])])
|
||||
|
||||
peaks_neg_true = np.array(peaks_neg_true)
|
||||
|
||||
"""
|
||||
#plt.figure(figsize=(40,40))
|
||||
#plt.subplot(1,2,1)
|
||||
#plt.title('Textline segmentation von Textregion')
|
||||
#plt.imshow(img_path)
|
||||
#plt.xlabel('X')
|
||||
#plt.ylabel('Y')
|
||||
#plt.subplot(1,2,2)
|
||||
#plt.title('Dichte entlang X')
|
||||
#base = pyplot.gca().transData
|
||||
#rot = transforms.Affine2D().rotate_deg(90)
|
||||
#plt.plot(zneg,np.array(range(len(zneg))))
|
||||
#plt.plot(zneg[peaks_neg_true],peaks_neg_true,'*')
|
||||
#plt.gca().invert_yaxis()
|
||||
|
||||
#plt.xlabel('Dichte')
|
||||
#plt.ylabel('Y')
|
||||
##plt.plot([0,len(y)], [grenze,grenze])
|
||||
#plt.show()
|
||||
"""
|
||||
|
||||
peaks_neg_true = peaks_neg_true - 20 - 20
|
||||
peaks = peaks - 20
|
||||
|
||||
# dis_up=peaks_neg_true[14]-peaks_neg_true[0]
|
||||
# dis_down=peaks_neg_true[18]-peaks_neg_true[14]
|
||||
|
||||
img_patch_ineterst = img_path[:, :] # [peaks_neg_true[14]-dis_up:peaks_neg_true[15]+dis_down ,:]
|
||||
|
||||
##plt.imshow(img_patch_ineterst)
|
||||
##plt.show()
|
||||
|
||||
length_x = int(img_path.shape[1] / float(num_patches))
|
||||
margin = int(0.04 * length_x)
|
||||
|
||||
width_mid = length_x - 2 * margin
|
||||
|
||||
nxf = img_path.shape[1] / float(width_mid)
|
||||
|
||||
if nxf > int(nxf):
|
||||
nxf = int(nxf) + 1
|
||||
else:
|
||||
nxf = int(nxf)
|
||||
|
||||
slopes_tile_wise = []
|
||||
for i in range(nxf):
|
||||
if i == 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
elif i > 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
|
||||
if index_x_u > img_path.shape[1]:
|
||||
index_x_u = img_path.shape[1]
|
||||
index_x_d = img_path.shape[1] - length_x
|
||||
|
||||
# img_patch = img[index_y_d:index_y_u, index_x_d:index_x_u, :]
|
||||
img_xline = img_patch_ineterst[:, index_x_d:index_x_u]
|
||||
|
||||
sigma = 2
|
||||
try:
|
||||
slope_xline = return_deskew_slop(img_xline, sigma, dir_of_all=self.dir_of_all, f_name=self.f_name)
|
||||
except:
|
||||
slope_xline = 0
|
||||
slopes_tile_wise.append(slope_xline)
|
||||
# print(slope_xline,'xlineeee')
|
||||
img_line_rotated = rotate_image(img_xline, slope_xline)
|
||||
img_line_rotated[:, :][img_line_rotated[:, :] != 0] = 1
|
||||
|
||||
"""
|
||||
|
||||
xline=np.linspace(0,img_path.shape[1],nx)
|
||||
slopes_tile_wise=[]
|
||||
|
||||
for ui in range( nx-1 ):
|
||||
img_xline=img_patch_ineterst[:,int(xline[ui]):int(xline[ui+1])]
|
||||
|
||||
|
||||
##plt.imshow(img_xline)
|
||||
##plt.show()
|
||||
|
||||
sigma=3
|
||||
try:
|
||||
slope_xline=return_deskew_slop(img_xline,sigma, dir_of_all=self.dir_of_all, f_name=self.f_name)
|
||||
except:
|
||||
slope_xline=0
|
||||
slopes_tile_wise.append(slope_xline)
|
||||
print(slope_xline,'xlineeee')
|
||||
img_line_rotated=rotate_image(img_xline,slope_xline)
|
||||
|
||||
##plt.imshow(img_line_rotated)
|
||||
##plt.show()
|
||||
"""
|
||||
|
||||
# dis_up=peaks_neg_true[14]-peaks_neg_true[0]
|
||||
# dis_down=peaks_neg_true[18]-peaks_neg_true[14]
|
||||
|
||||
img_patch_ineterst = img_path[:, :] # [peaks_neg_true[14]-dis_up:peaks_neg_true[14]+dis_down ,:]
|
||||
|
||||
img_patch_ineterst_revised = np.zeros(img_patch_ineterst.shape)
|
||||
|
||||
for i in range(nxf):
|
||||
if i == 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
elif i > 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
|
||||
if index_x_u > img_path.shape[1]:
|
||||
index_x_u = img_path.shape[1]
|
||||
index_x_d = img_path.shape[1] - length_x
|
||||
|
||||
img_xline = img_patch_ineterst[:, index_x_d:index_x_u]
|
||||
|
||||
img_int = np.zeros((img_xline.shape[0], img_xline.shape[1]))
|
||||
img_int[:, :] = img_xline[:, :] # img_patch_org[:,:,0]
|
||||
|
||||
img_resized = np.zeros((int(img_int.shape[0] * (1.2)), int(img_int.shape[1] * (3))))
|
||||
|
||||
img_resized[int(img_int.shape[0] * (0.1)) : int(img_int.shape[0] * (0.1)) + img_int.shape[0], int(img_int.shape[1] * (1)) : int(img_int.shape[1] * (1)) + img_int.shape[1]] = img_int[:, :]
|
||||
##plt.imshow(img_xline)
|
||||
##plt.show()
|
||||
img_line_rotated = rotate_image(img_resized, slopes_tile_wise[i])
|
||||
img_line_rotated[:, :][img_line_rotated[:, :] != 0] = 1
|
||||
|
||||
img_patch_seperated = seperate_lines_new_inside_teils(img_line_rotated, 0)
|
||||
|
||||
##plt.imshow(img_patch_seperated)
|
||||
##plt.show()
|
||||
img_patch_seperated_returned = rotate_image(img_patch_seperated, -slopes_tile_wise[i])
|
||||
img_patch_seperated_returned[:, :][img_patch_seperated_returned[:, :] != 0] = 1
|
||||
|
||||
img_patch_seperated_returned_true_size = img_patch_seperated_returned[int(img_int.shape[0] * (0.1)) : int(img_int.shape[0] * (0.1)) + img_int.shape[0], int(img_int.shape[1] * (1)) : int(img_int.shape[1] * (1)) + img_int.shape[1]]
|
||||
|
||||
img_patch_seperated_returned_true_size = img_patch_seperated_returned_true_size[:, margin : length_x - margin]
|
||||
img_patch_ineterst_revised[:, index_x_d + margin : index_x_u - margin] = img_patch_seperated_returned_true_size
|
||||
|
||||
"""
|
||||
for ui in range( nx-1 ):
|
||||
img_xline=img_patch_ineterst[:,int(xline[ui]):int(xline[ui+1])]
|
||||
|
||||
|
||||
img_int=np.zeros((img_xline.shape[0],img_xline.shape[1]))
|
||||
img_int[:,:]=img_xline[:,:]#img_patch_org[:,:,0]
|
||||
|
||||
img_resized=np.zeros((int( img_int.shape[0]*(1.2) ) , int( img_int.shape[1]*(3) ) ))
|
||||
|
||||
img_resized[ int( img_int.shape[0]*(.1)):int( img_int.shape[0]*(.1))+img_int.shape[0] , int( img_int.shape[1]*(1)):int( img_int.shape[1]*(1))+img_int.shape[1] ]=img_int[:,:]
|
||||
##plt.imshow(img_xline)
|
||||
##plt.show()
|
||||
img_line_rotated=rotate_image(img_resized,slopes_tile_wise[ui])
|
||||
|
||||
|
||||
#img_patch_seperated = seperate_lines_new_inside_teils(img_line_rotated,0)
|
||||
|
||||
img_patch_seperated = seperate_lines_new_inside_teils(img_line_rotated,0)
|
||||
|
||||
img_patch_seperated_returned=rotate_image(img_patch_seperated,-slopes_tile_wise[ui])
|
||||
##plt.imshow(img_patch_seperated)
|
||||
##plt.show()
|
||||
print(img_patch_seperated_returned.shape)
|
||||
#plt.imshow(img_patch_seperated_returned[ int( img_int.shape[0]*(.1)):int( img_int.shape[0]*(.1))+img_int.shape[0] , int( img_int.shape[1]*(1)):int( img_int.shape[1]*(1))+img_int.shape[1] ])
|
||||
#plt.show()
|
||||
|
||||
img_patch_ineterst_revised[:,int(xline[ui]):int(xline[ui+1])]=img_patch_seperated_returned[ int( img_int.shape[0]*(.1)):int( img_int.shape[0]*(.1))+img_int.shape[0] , int( img_int.shape[1]*(1)):int( img_int.shape[1]*(1))+img_int.shape[1] ]
|
||||
|
||||
|
||||
"""
|
||||
|
||||
# print(img_patch_ineterst_revised.shape,np.unique(img_patch_ineterst_revised))
|
||||
##plt.imshow(img_patch_ineterst_revised)
|
||||
##plt.show()
|
||||
return img_patch_ineterst_revised
|
||||
|
||||
def seperate_lines_new2(self, img_path, thetha, num_col, slope_region):
|
||||
|
||||
if num_col == 1:
|
||||
num_patches = int(img_path.shape[1] / 200.0)
|
||||
else:
|
||||
num_patches = int(img_path.shape[1] / 140.0)
|
||||
# num_patches=int(img_path.shape[1]/200.)
|
||||
if num_patches == 0:
|
||||
num_patches = 1
|
||||
|
||||
img_patch_ineterst = img_path[:, :] # [peaks_neg_true[14]-dis_up:peaks_neg_true[15]+dis_down ,:]
|
||||
|
||||
# plt.imshow(img_patch_ineterst)
|
||||
# plt.show()
|
||||
|
||||
length_x = int(img_path.shape[1] / float(num_patches))
|
||||
# margin = int(0.04 * length_x) just recently this was changed because it break lines into 2
|
||||
margin = int(0.04 * length_x)
|
||||
# print(margin,'margin')
|
||||
# if margin<=4:
|
||||
# margin = int(0.08 * length_x)
|
||||
|
||||
# margin=0
|
||||
|
||||
width_mid = length_x - 2 * margin
|
||||
|
||||
nxf = img_path.shape[1] / float(width_mid)
|
||||
|
||||
if nxf > int(nxf):
|
||||
nxf = int(nxf) + 1
|
||||
else:
|
||||
nxf = int(nxf)
|
||||
|
||||
slopes_tile_wise = []
|
||||
for i in range(nxf):
|
||||
if i == 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
elif i > 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
|
||||
if index_x_u > img_path.shape[1]:
|
||||
index_x_u = img_path.shape[1]
|
||||
index_x_d = img_path.shape[1] - length_x
|
||||
|
||||
# img_patch = img[index_y_d:index_y_u, index_x_d:index_x_u, :]
|
||||
img_xline = img_patch_ineterst[:, index_x_d:index_x_u]
|
||||
|
||||
sigma = 2
|
||||
try:
|
||||
slope_xline = return_deskew_slop(img_xline, sigma, dir_of_all=self.dir_of_all, f_name=self.f_name)
|
||||
except:
|
||||
slope_xline = 0
|
||||
|
||||
if abs(slope_region) < 25 and abs(slope_xline) > 25:
|
||||
slope_xline = [slope_region][0]
|
||||
# if abs(slope_region)>70 and abs(slope_xline)<25:
|
||||
# slope_xline=[slope_region][0]
|
||||
slopes_tile_wise.append(slope_xline)
|
||||
# print(slope_xline,'xlineeee')
|
||||
img_line_rotated = rotate_image(img_xline, slope_xline)
|
||||
img_line_rotated[:, :][img_line_rotated[:, :] != 0] = 1
|
||||
|
||||
# print(slopes_tile_wise,'slopes_tile_wise')
|
||||
img_patch_ineterst = img_path[:, :] # [peaks_neg_true[14]-dis_up:peaks_neg_true[14]+dis_down ,:]
|
||||
|
||||
img_patch_ineterst_revised = np.zeros(img_patch_ineterst.shape)
|
||||
|
||||
for i in range(nxf):
|
||||
if i == 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
elif i > 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
|
||||
if index_x_u > img_path.shape[1]:
|
||||
index_x_u = img_path.shape[1]
|
||||
index_x_d = img_path.shape[1] - length_x
|
||||
|
||||
img_xline = img_patch_ineterst[:, index_x_d:index_x_u]
|
||||
|
||||
img_int = np.zeros((img_xline.shape[0], img_xline.shape[1]))
|
||||
img_int[:, :] = img_xline[:, :] # img_patch_org[:,:,0]
|
||||
|
||||
img_resized = np.zeros((int(img_int.shape[0] * (1.2)), int(img_int.shape[1] * (3))))
|
||||
|
||||
img_resized[int(img_int.shape[0] * (0.1)) : int(img_int.shape[0] * (0.1)) + img_int.shape[0], int(img_int.shape[1] * (1)) : int(img_int.shape[1] * (1)) + img_int.shape[1]] = img_int[:, :]
|
||||
# plt.imshow(img_xline)
|
||||
# plt.show()
|
||||
img_line_rotated = rotate_image(img_resized, slopes_tile_wise[i])
|
||||
img_line_rotated[:, :][img_line_rotated[:, :] != 0] = 1
|
||||
|
||||
img_patch_seperated = seperate_lines_new_inside_teils2(img_line_rotated, 0)
|
||||
|
||||
img_patch_seperated_returned = rotate_image(img_patch_seperated, -slopes_tile_wise[i])
|
||||
img_patch_seperated_returned[:, :][img_patch_seperated_returned[:, :] != 0] = 1
|
||||
|
||||
img_patch_seperated_returned_true_size = img_patch_seperated_returned[int(img_int.shape[0] * (0.1)) : int(img_int.shape[0] * (0.1)) + img_int.shape[0], int(img_int.shape[1] * (1)) : int(img_int.shape[1] * (1)) + img_int.shape[1]]
|
||||
|
||||
img_patch_seperated_returned_true_size = img_patch_seperated_returned_true_size[:, margin : length_x - margin]
|
||||
img_patch_ineterst_revised[:, index_x_d + margin : index_x_u - margin] = img_patch_seperated_returned_true_size
|
||||
|
||||
# plt.imshow(img_patch_ineterst_revised)
|
||||
# plt.show()
|
||||
return img_patch_ineterst_revised
|
||||
|
||||
|
||||
def do_work_of_slopes(self, q, poly, box_sub, boxes_per_process, textline_mask_tot, contours_per_process):
|
||||
slope_biggest = 0
|
||||
slopes_sub = []
|
||||
|
@ -2941,7 +2577,7 @@ class eynollah:
|
|||
#ratio_y=1
|
||||
#median_blur=False
|
||||
|
||||
#img= self.resize_image(img_org, int(img_org.shape[0]*ratio_y), int(img_org.shape[1]*ratio_x))
|
||||
#img= resize_image(img_org, int(img_org.shape[0]*ratio_y), int(img_org.shape[1]*ratio_x))
|
||||
|
||||
#if binary:
|
||||
#img = self.otsu_copy_binary(img)#self.otsu_copy(img)
|
||||
|
@ -2954,7 +2590,7 @@ class eynollah:
|
|||
#img = img.astype(np.uint16)
|
||||
#prediction_regions_org2=self.do_prediction(patches,img,model_region)
|
||||
|
||||
#prediction_regions_org2=self.resize_image(prediction_regions_org2, img_height_h, img_width_h )
|
||||
#prediction_regions_org2=resize_image(prediction_regions_org2, img_height_h, img_width_h )
|
||||
|
||||
##plt.imshow(prediction_regions_org2[:,:,0])
|
||||
##plt.show()
|
||||
|
@ -3057,249 +2693,6 @@ class eynollah:
|
|||
cv2.imwrite(path, croped_page)
|
||||
index += 1
|
||||
|
||||
def get_marginals(self,text_with_lines,text_regions,num_col,slope_deskew):
|
||||
mask_marginals=np.zeros((text_with_lines.shape[0],text_with_lines.shape[1]))
|
||||
mask_marginals=mask_marginals.astype(np.uint8)
|
||||
|
||||
|
||||
text_with_lines=text_with_lines.astype(np.uint8)
|
||||
##text_with_lines=cv2.erode(text_with_lines,self.kernel,iterations=3)
|
||||
|
||||
text_with_lines_eroded=cv2.erode(text_with_lines,self.kernel,iterations=5)
|
||||
|
||||
if text_with_lines.shape[0]<=1500:
|
||||
pass
|
||||
elif text_with_lines.shape[0]>1500 and text_with_lines.shape[0]<=1800:
|
||||
text_with_lines=resize_image(text_with_lines,int(text_with_lines.shape[0]*1.5),text_with_lines.shape[1])
|
||||
text_with_lines=cv2.erode(text_with_lines,self.kernel,iterations=5)
|
||||
text_with_lines=resize_image(text_with_lines,text_with_lines_eroded.shape[0],text_with_lines_eroded.shape[1])
|
||||
else:
|
||||
text_with_lines=resize_image(text_with_lines,int(text_with_lines.shape[0]*1.8),text_with_lines.shape[1])
|
||||
text_with_lines=cv2.erode(text_with_lines,self.kernel,iterations=7)
|
||||
text_with_lines=resize_image(text_with_lines,text_with_lines_eroded.shape[0],text_with_lines_eroded.shape[1])
|
||||
|
||||
|
||||
text_with_lines_y=text_with_lines.sum(axis=0)
|
||||
text_with_lines_y_eroded=text_with_lines_eroded.sum(axis=0)
|
||||
|
||||
thickness_along_y_percent=text_with_lines_y_eroded.max()/(float(text_with_lines.shape[0]))*100
|
||||
|
||||
#print(thickness_along_y_percent,'thickness_along_y_percent')
|
||||
|
||||
if thickness_along_y_percent<30:
|
||||
min_textline_thickness=8
|
||||
elif thickness_along_y_percent>=30 and thickness_along_y_percent<50:
|
||||
min_textline_thickness=20
|
||||
else:
|
||||
min_textline_thickness=40
|
||||
|
||||
|
||||
|
||||
if thickness_along_y_percent>=14:
|
||||
|
||||
text_with_lines_y_rev=-1*text_with_lines_y[:]
|
||||
#print(text_with_lines_y)
|
||||
#print(text_with_lines_y_rev)
|
||||
|
||||
|
||||
|
||||
|
||||
#plt.plot(text_with_lines_y)
|
||||
#plt.show()
|
||||
|
||||
|
||||
text_with_lines_y_rev=text_with_lines_y_rev-np.min(text_with_lines_y_rev)
|
||||
|
||||
#plt.plot(text_with_lines_y_rev)
|
||||
#plt.show()
|
||||
sigma_gaus=1
|
||||
region_sum_0= gaussian_filter1d(text_with_lines_y, sigma_gaus)
|
||||
|
||||
region_sum_0_rev=gaussian_filter1d(text_with_lines_y_rev, sigma_gaus)
|
||||
|
||||
#plt.plot(region_sum_0_rev)
|
||||
#plt.show()
|
||||
region_sum_0_updown=region_sum_0[len(region_sum_0)::-1]
|
||||
|
||||
first_nonzero=(next((i for i, x in enumerate(region_sum_0) if x), None))
|
||||
last_nonzero=(next((i for i, x in enumerate(region_sum_0_updown) if x), None))
|
||||
|
||||
|
||||
last_nonzero=len(region_sum_0)-last_nonzero
|
||||
|
||||
##img_sum_0_smooth_rev=-region_sum_0
|
||||
|
||||
|
||||
mid_point=(last_nonzero+first_nonzero)/2.
|
||||
|
||||
|
||||
one_third_right=(last_nonzero-mid_point)/3.0
|
||||
one_third_left=(mid_point-first_nonzero)/3.0
|
||||
|
||||
#img_sum_0_smooth_rev=img_sum_0_smooth_rev-np.min(img_sum_0_smooth_rev)
|
||||
|
||||
|
||||
|
||||
|
||||
peaks, _ = find_peaks(text_with_lines_y_rev, height=0)
|
||||
|
||||
|
||||
peaks=np.array(peaks)
|
||||
|
||||
|
||||
#print(region_sum_0[peaks])
|
||||
##plt.plot(region_sum_0)
|
||||
##plt.plot(peaks,region_sum_0[peaks],'*')
|
||||
##plt.show()
|
||||
#print(first_nonzero,last_nonzero,peaks)
|
||||
peaks=peaks[(peaks>first_nonzero) & ((peaks<last_nonzero))]
|
||||
|
||||
#print(first_nonzero,last_nonzero,peaks)
|
||||
|
||||
|
||||
#print(region_sum_0[peaks]<10)
|
||||
####peaks=peaks[region_sum_0[peaks]<25 ]
|
||||
|
||||
#print(region_sum_0[peaks])
|
||||
peaks=peaks[region_sum_0[peaks]<min_textline_thickness ]
|
||||
#print(peaks)
|
||||
#print(first_nonzero,last_nonzero,one_third_right,one_third_left)
|
||||
|
||||
if num_col==1:
|
||||
peaks_right=peaks[peaks>mid_point]
|
||||
peaks_left=peaks[peaks<mid_point]
|
||||
if num_col==2:
|
||||
peaks_right=peaks[peaks>(mid_point+one_third_right)]
|
||||
peaks_left=peaks[peaks<(mid_point-one_third_left)]
|
||||
|
||||
|
||||
try:
|
||||
point_right=np.min(peaks_right)
|
||||
except:
|
||||
point_right=last_nonzero
|
||||
|
||||
|
||||
try:
|
||||
point_left=np.max(peaks_left)
|
||||
except:
|
||||
point_left=first_nonzero
|
||||
|
||||
|
||||
|
||||
|
||||
#print(point_left,point_right)
|
||||
#print(text_regions.shape)
|
||||
if point_right>=mask_marginals.shape[1]:
|
||||
point_right=mask_marginals.shape[1]-1
|
||||
|
||||
try:
|
||||
mask_marginals[:,point_left:point_right]=1
|
||||
except:
|
||||
mask_marginals[:,:]=1
|
||||
|
||||
#print(mask_marginals.shape,point_left,point_right,'nadosh')
|
||||
mask_marginals_rotated=rotate_image(mask_marginals,-slope_deskew)
|
||||
|
||||
#print(mask_marginals_rotated.shape,'nadosh')
|
||||
mask_marginals_rotated_sum=mask_marginals_rotated.sum(axis=0)
|
||||
|
||||
mask_marginals_rotated_sum[mask_marginals_rotated_sum!=0]=1
|
||||
index_x=np.array(range(len(mask_marginals_rotated_sum)))+1
|
||||
|
||||
index_x_interest=index_x[mask_marginals_rotated_sum==1]
|
||||
|
||||
min_point_of_left_marginal=np.min(index_x_interest)-16
|
||||
max_point_of_right_marginal=np.max(index_x_interest)+16
|
||||
|
||||
if min_point_of_left_marginal<0:
|
||||
min_point_of_left_marginal=0
|
||||
if max_point_of_right_marginal>=text_regions.shape[1]:
|
||||
max_point_of_right_marginal=text_regions.shape[1]-1
|
||||
|
||||
|
||||
#print(np.min(index_x_interest) ,np.max(index_x_interest),'minmaxnew')
|
||||
#print(mask_marginals_rotated.shape,text_regions.shape,'mask_marginals_rotated')
|
||||
#plt.imshow(mask_marginals)
|
||||
#plt.show()
|
||||
|
||||
#plt.imshow(mask_marginals_rotated)
|
||||
#plt.show()
|
||||
|
||||
text_regions[(mask_marginals_rotated[:,:]!=1) & (text_regions[:,:]==1)]=4
|
||||
|
||||
#plt.imshow(text_regions)
|
||||
#plt.show()
|
||||
|
||||
pixel_img=4
|
||||
min_area_text=0.00001
|
||||
polygons_of_marginals=return_contours_of_interested_region(text_regions,pixel_img,min_area_text)
|
||||
|
||||
cx_text_only,cy_text_only ,x_min_text_only,x_max_text_only, y_min_text_only ,y_max_text_only,y_cor_x_min_main=find_new_features_of_contoures(polygons_of_marginals)
|
||||
|
||||
text_regions[(text_regions[:,:]==4)]=1
|
||||
|
||||
marginlas_should_be_main_text=[]
|
||||
|
||||
x_min_marginals_left=[]
|
||||
x_min_marginals_right=[]
|
||||
|
||||
for i in range(len(cx_text_only)):
|
||||
|
||||
x_width_mar=abs(x_min_text_only[i]-x_max_text_only[i])
|
||||
y_height_mar=abs(y_min_text_only[i]-y_max_text_only[i])
|
||||
#print(x_width_mar,y_height_mar,y_height_mar/x_width_mar,'y_height_mar')
|
||||
if x_width_mar>16 and y_height_mar/x_width_mar<18:
|
||||
marginlas_should_be_main_text.append(polygons_of_marginals[i])
|
||||
if x_min_text_only[i]<(mid_point-one_third_left):
|
||||
x_min_marginals_left_new=x_min_text_only[i]
|
||||
if len(x_min_marginals_left)==0:
|
||||
x_min_marginals_left.append(x_min_marginals_left_new)
|
||||
else:
|
||||
x_min_marginals_left[0]=min(x_min_marginals_left[0],x_min_marginals_left_new)
|
||||
else:
|
||||
x_min_marginals_right_new=x_min_text_only[i]
|
||||
if len(x_min_marginals_right)==0:
|
||||
x_min_marginals_right.append(x_min_marginals_right_new)
|
||||
else:
|
||||
x_min_marginals_right[0]=min(x_min_marginals_right[0],x_min_marginals_right_new)
|
||||
|
||||
if len(x_min_marginals_left)==0:
|
||||
x_min_marginals_left=[0]
|
||||
if len(x_min_marginals_right)==0:
|
||||
x_min_marginals_right=[text_regions.shape[1]-1]
|
||||
|
||||
|
||||
|
||||
|
||||
#print(x_min_marginals_left[0],x_min_marginals_right[0],'margo')
|
||||
|
||||
#print(marginlas_should_be_main_text,'marginlas_should_be_main_text')
|
||||
text_regions=cv2.fillPoly(text_regions, pts =marginlas_should_be_main_text, color=(4,4))
|
||||
|
||||
#print(np.unique(text_regions))
|
||||
|
||||
#text_regions[:,:int(x_min_marginals_left[0])][text_regions[:,:int(x_min_marginals_left[0])]==1]=0
|
||||
#text_regions[:,int(x_min_marginals_right[0]):][text_regions[:,int(x_min_marginals_right[0]):]==1]=0
|
||||
|
||||
text_regions[:,:int(min_point_of_left_marginal)][text_regions[:,:int(min_point_of_left_marginal)]==1]=0
|
||||
text_regions[:,int(max_point_of_right_marginal):][text_regions[:,int(max_point_of_right_marginal):]==1]=0
|
||||
|
||||
###text_regions[:,0:point_left][text_regions[:,0:point_left]==1]=4
|
||||
|
||||
###text_regions[:,point_right:][ text_regions[:,point_right:]==1]=4
|
||||
#plt.plot(region_sum_0)
|
||||
#plt.plot(peaks,region_sum_0[peaks],'*')
|
||||
#plt.show()
|
||||
|
||||
|
||||
#plt.imshow(text_regions)
|
||||
#plt.show()
|
||||
|
||||
#sys.exit()
|
||||
else:
|
||||
pass
|
||||
return text_regions
|
||||
|
||||
def do_order_of_regions(self, contours_only_text_parent, contours_only_text_parent_h, boxes, textline_mask_tot):
|
||||
|
||||
if self.full_layout:
|
||||
|
@ -3838,7 +3231,7 @@ class eynollah:
|
|||
regions_without_seperators = (text_regions_p[:, :] == 1) * 1
|
||||
regions_without_seperators = regions_without_seperators.astype(np.uint8)
|
||||
|
||||
text_regions_p = self.get_marginals(rotate_image(regions_without_seperators, slope_deskew), text_regions_p, num_col_classifier, slope_deskew)
|
||||
text_regions_p = get_marginals(rotate_image(regions_without_seperators, slope_deskew), text_regions_p, num_col_classifier, slope_deskew, kernel=self.kernel)
|
||||
|
||||
except:
|
||||
pass
|
||||
|
|
|
@ -2769,3 +2769,261 @@ def do_work_of_textline_seperation(self, queue_of_all_params, polygons_per_proce
|
|||
queue_of_all_params.put([index_polygons_per_process_per_process, polygons_per_par_process_per_process, textregions_cnt_tot_per_process, textlines_cnt_tot_per_process])
|
||||
|
||||
|
||||
def seperate_lines_new(img_path, thetha, num_col, dir_of_all, f_name):
|
||||
|
||||
if num_col == 1:
|
||||
num_patches = int(img_path.shape[1] / 200.0)
|
||||
else:
|
||||
num_patches = int(img_path.shape[1] / 100.0)
|
||||
# num_patches=int(img_path.shape[1]/200.)
|
||||
if num_patches == 0:
|
||||
num_patches = 1
|
||||
(h, w) = img_path.shape[:2]
|
||||
center = (w // 2, h // 2)
|
||||
M = cv2.getRotationMatrix2D(center, -thetha, 1.0)
|
||||
x_d = M[0, 2]
|
||||
y_d = M[1, 2]
|
||||
|
||||
thetha = thetha / 180.0 * np.pi
|
||||
rotation_matrix = np.array([[np.cos(thetha), -np.sin(thetha)], [np.sin(thetha), np.cos(thetha)]])
|
||||
|
||||
x_min_cont = 0
|
||||
x_max_cont = img_path.shape[1]
|
||||
y_min_cont = 0
|
||||
y_max_cont = img_path.shape[0]
|
||||
|
||||
xv = np.linspace(x_min_cont, x_max_cont, 1000)
|
||||
|
||||
mada_n = img_path.sum(axis=1)
|
||||
|
||||
##plt.plot(mada_n)
|
||||
##plt.show()
|
||||
first_nonzero = 0 # (next((i for i, x in enumerate(mada_n) if x), None))
|
||||
|
||||
y = mada_n[:] # [first_nonzero:last_nonzero]
|
||||
y_help = np.zeros(len(y) + 40)
|
||||
y_help[20 : len(y) + 20] = y
|
||||
x = np.array(range(len(y)))
|
||||
|
||||
peaks_real, _ = find_peaks(gaussian_filter1d(y, 3), height=0)
|
||||
if len(peaks_real) <= 2 and len(peaks_real) > 1:
|
||||
sigma_gaus = 10
|
||||
else:
|
||||
sigma_gaus = 6
|
||||
|
||||
z = gaussian_filter1d(y_help, sigma_gaus)
|
||||
zneg_rev = -y_help + np.max(y_help)
|
||||
zneg = np.zeros(len(zneg_rev) + 40)
|
||||
zneg[20 : len(zneg_rev) + 20] = zneg_rev
|
||||
zneg = gaussian_filter1d(zneg, sigma_gaus)
|
||||
|
||||
peaks, _ = find_peaks(z, height=0)
|
||||
peaks_neg, _ = find_peaks(zneg, height=0)
|
||||
|
||||
for nn in range(len(peaks_neg)):
|
||||
if peaks_neg[nn] > len(z) - 1:
|
||||
peaks_neg[nn] = len(z) - 1
|
||||
if peaks_neg[nn] < 0:
|
||||
peaks_neg[nn] = 0
|
||||
|
||||
diff_peaks = np.abs(np.diff(peaks_neg))
|
||||
cut_off = 20
|
||||
peaks_neg_true = []
|
||||
forest = []
|
||||
|
||||
for i in range(len(peaks_neg)):
|
||||
if i == 0:
|
||||
forest.append(peaks_neg[i])
|
||||
if i < (len(peaks_neg) - 1):
|
||||
if diff_peaks[i] <= cut_off:
|
||||
forest.append(peaks_neg[i + 1])
|
||||
if diff_peaks[i] > cut_off:
|
||||
# print(forest[np.argmin(z[forest]) ] )
|
||||
if not isNaN(forest[np.argmin(z[forest])]):
|
||||
# print(len(z),forest)
|
||||
peaks_neg_true.append(forest[np.argmin(z[forest])])
|
||||
forest = []
|
||||
forest.append(peaks_neg[i + 1])
|
||||
if i == (len(peaks_neg) - 1):
|
||||
# print(print(forest[np.argmin(z[forest]) ] ))
|
||||
if not isNaN(forest[np.argmin(z[forest])]):
|
||||
|
||||
peaks_neg_true.append(forest[np.argmin(z[forest])])
|
||||
|
||||
peaks_neg_true = np.array(peaks_neg_true)
|
||||
|
||||
"""
|
||||
#plt.figure(figsize=(40,40))
|
||||
#plt.subplot(1,2,1)
|
||||
#plt.title('Textline segmentation von Textregion')
|
||||
#plt.imshow(img_path)
|
||||
#plt.xlabel('X')
|
||||
#plt.ylabel('Y')
|
||||
#plt.subplot(1,2,2)
|
||||
#plt.title('Dichte entlang X')
|
||||
#base = pyplot.gca().transData
|
||||
#rot = transforms.Affine2D().rotate_deg(90)
|
||||
#plt.plot(zneg,np.array(range(len(zneg))))
|
||||
#plt.plot(zneg[peaks_neg_true],peaks_neg_true,'*')
|
||||
#plt.gca().invert_yaxis()
|
||||
|
||||
#plt.xlabel('Dichte')
|
||||
#plt.ylabel('Y')
|
||||
##plt.plot([0,len(y)], [grenze,grenze])
|
||||
#plt.show()
|
||||
"""
|
||||
|
||||
peaks_neg_true = peaks_neg_true - 20 - 20
|
||||
peaks = peaks - 20
|
||||
|
||||
# dis_up=peaks_neg_true[14]-peaks_neg_true[0]
|
||||
# dis_down=peaks_neg_true[18]-peaks_neg_true[14]
|
||||
|
||||
img_patch_ineterst = img_path[:, :] # [peaks_neg_true[14]-dis_up:peaks_neg_true[15]+dis_down ,:]
|
||||
|
||||
##plt.imshow(img_patch_ineterst)
|
||||
##plt.show()
|
||||
|
||||
length_x = int(img_path.shape[1] / float(num_patches))
|
||||
margin = int(0.04 * length_x)
|
||||
|
||||
width_mid = length_x - 2 * margin
|
||||
|
||||
nxf = img_path.shape[1] / float(width_mid)
|
||||
|
||||
if nxf > int(nxf):
|
||||
nxf = int(nxf) + 1
|
||||
else:
|
||||
nxf = int(nxf)
|
||||
|
||||
slopes_tile_wise = []
|
||||
for i in range(nxf):
|
||||
if i == 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
elif i > 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
|
||||
if index_x_u > img_path.shape[1]:
|
||||
index_x_u = img_path.shape[1]
|
||||
index_x_d = img_path.shape[1] - length_x
|
||||
|
||||
# img_patch = img[index_y_d:index_y_u, index_x_d:index_x_u, :]
|
||||
img_xline = img_patch_ineterst[:, index_x_d:index_x_u]
|
||||
|
||||
sigma = 2
|
||||
try:
|
||||
slope_xline = return_deskew_slop(img_xline, sigma, dir_of_all=dir_of_all, f_name=f_name)
|
||||
except:
|
||||
slope_xline = 0
|
||||
slopes_tile_wise.append(slope_xline)
|
||||
# print(slope_xline,'xlineeee')
|
||||
img_line_rotated = rotate_image(img_xline, slope_xline)
|
||||
img_line_rotated[:, :][img_line_rotated[:, :] != 0] = 1
|
||||
|
||||
"""
|
||||
|
||||
xline=np.linspace(0,img_path.shape[1],nx)
|
||||
slopes_tile_wise=[]
|
||||
|
||||
for ui in range( nx-1 ):
|
||||
img_xline=img_patch_ineterst[:,int(xline[ui]):int(xline[ui+1])]
|
||||
|
||||
|
||||
##plt.imshow(img_xline)
|
||||
##plt.show()
|
||||
|
||||
sigma=3
|
||||
try:
|
||||
slope_xline=return_deskew_slop(img_xline,sigma, dir_of_all=self.dir_of_all, f_name=self.f_name)
|
||||
except:
|
||||
slope_xline=0
|
||||
slopes_tile_wise.append(slope_xline)
|
||||
print(slope_xline,'xlineeee')
|
||||
img_line_rotated=rotate_image(img_xline,slope_xline)
|
||||
|
||||
##plt.imshow(img_line_rotated)
|
||||
##plt.show()
|
||||
"""
|
||||
|
||||
# dis_up=peaks_neg_true[14]-peaks_neg_true[0]
|
||||
# dis_down=peaks_neg_true[18]-peaks_neg_true[14]
|
||||
|
||||
img_patch_ineterst = img_path[:, :] # [peaks_neg_true[14]-dis_up:peaks_neg_true[14]+dis_down ,:]
|
||||
|
||||
img_patch_ineterst_revised = np.zeros(img_patch_ineterst.shape)
|
||||
|
||||
for i in range(nxf):
|
||||
if i == 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
elif i > 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
|
||||
if index_x_u > img_path.shape[1]:
|
||||
index_x_u = img_path.shape[1]
|
||||
index_x_d = img_path.shape[1] - length_x
|
||||
|
||||
img_xline = img_patch_ineterst[:, index_x_d:index_x_u]
|
||||
|
||||
img_int = np.zeros((img_xline.shape[0], img_xline.shape[1]))
|
||||
img_int[:, :] = img_xline[:, :] # img_patch_org[:,:,0]
|
||||
|
||||
img_resized = np.zeros((int(img_int.shape[0] * (1.2)), int(img_int.shape[1] * (3))))
|
||||
|
||||
img_resized[int(img_int.shape[0] * (0.1)) : int(img_int.shape[0] * (0.1)) + img_int.shape[0], int(img_int.shape[1] * (1)) : int(img_int.shape[1] * (1)) + img_int.shape[1]] = img_int[:, :]
|
||||
##plt.imshow(img_xline)
|
||||
##plt.show()
|
||||
img_line_rotated = rotate_image(img_resized, slopes_tile_wise[i])
|
||||
img_line_rotated[:, :][img_line_rotated[:, :] != 0] = 1
|
||||
|
||||
img_patch_seperated = seperate_lines_new_inside_teils(img_line_rotated, 0)
|
||||
|
||||
##plt.imshow(img_patch_seperated)
|
||||
##plt.show()
|
||||
img_patch_seperated_returned = rotate_image(img_patch_seperated, -slopes_tile_wise[i])
|
||||
img_patch_seperated_returned[:, :][img_patch_seperated_returned[:, :] != 0] = 1
|
||||
|
||||
img_patch_seperated_returned_true_size = img_patch_seperated_returned[int(img_int.shape[0] * (0.1)) : int(img_int.shape[0] * (0.1)) + img_int.shape[0], int(img_int.shape[1] * (1)) : int(img_int.shape[1] * (1)) + img_int.shape[1]]
|
||||
|
||||
img_patch_seperated_returned_true_size = img_patch_seperated_returned_true_size[:, margin : length_x - margin]
|
||||
img_patch_ineterst_revised[:, index_x_d + margin : index_x_u - margin] = img_patch_seperated_returned_true_size
|
||||
|
||||
"""
|
||||
for ui in range( nx-1 ):
|
||||
img_xline=img_patch_ineterst[:,int(xline[ui]):int(xline[ui+1])]
|
||||
|
||||
|
||||
img_int=np.zeros((img_xline.shape[0],img_xline.shape[1]))
|
||||
img_int[:,:]=img_xline[:,:]#img_patch_org[:,:,0]
|
||||
|
||||
img_resized=np.zeros((int( img_int.shape[0]*(1.2) ) , int( img_int.shape[1]*(3) ) ))
|
||||
|
||||
img_resized[ int( img_int.shape[0]*(.1)):int( img_int.shape[0]*(.1))+img_int.shape[0] , int( img_int.shape[1]*(1)):int( img_int.shape[1]*(1))+img_int.shape[1] ]=img_int[:,:]
|
||||
##plt.imshow(img_xline)
|
||||
##plt.show()
|
||||
img_line_rotated=rotate_image(img_resized,slopes_tile_wise[ui])
|
||||
|
||||
|
||||
#img_patch_seperated = seperate_lines_new_inside_teils(img_line_rotated,0)
|
||||
|
||||
img_patch_seperated = seperate_lines_new_inside_teils(img_line_rotated,0)
|
||||
|
||||
img_patch_seperated_returned=rotate_image(img_patch_seperated,-slopes_tile_wise[ui])
|
||||
##plt.imshow(img_patch_seperated)
|
||||
##plt.show()
|
||||
print(img_patch_seperated_returned.shape)
|
||||
#plt.imshow(img_patch_seperated_returned[ int( img_int.shape[0]*(.1)):int( img_int.shape[0]*(.1))+img_int.shape[0] , int( img_int.shape[1]*(1)):int( img_int.shape[1]*(1))+img_int.shape[1] ])
|
||||
#plt.show()
|
||||
|
||||
img_patch_ineterst_revised[:,int(xline[ui]):int(xline[ui+1])]=img_patch_seperated_returned[ int( img_int.shape[0]*(.1)):int( img_int.shape[0]*(.1))+img_int.shape[0] , int( img_int.shape[1]*(1)):int( img_int.shape[1]*(1))+img_int.shape[1] ]
|
||||
|
||||
|
||||
"""
|
||||
|
||||
# print(img_patch_ineterst_revised.shape,np.unique(img_patch_ineterst_revised))
|
||||
##plt.imshow(img_patch_ineterst_revised)
|
||||
##plt.show()
|
||||
return img_patch_ineterst_revised
|
||||
|
|
|
@ -10,9 +10,6 @@ from scipy.ndimage import gaussian_filter1d
|
|||
|
||||
from .is_nan import isNaN
|
||||
|
||||
def resize_image(img_in, input_height, input_width):
|
||||
return cv2.resize(img_in, (input_width, input_height), interpolation=cv2.INTER_NEAREST)
|
||||
|
||||
|
||||
def crop_image_inside_box(box, img_org_copy):
|
||||
image_box = img_org_copy[box[1] : box[1] + box[3], box[0] : box[0] + box[2]]
|
||||
|
@ -701,352 +698,6 @@ def return_regions_without_seperators(regions_pre):
|
|||
return regions_without_seperators
|
||||
|
||||
|
||||
def return_deskew_slop(img_patch_org, sigma_des, main_page=False, dir_of_all=None, f_name=None):
|
||||
|
||||
|
||||
if main_page and dir_of_all is not None:
|
||||
|
||||
|
||||
plt.figure(figsize=(70,40))
|
||||
plt.rcParams['font.size']='50'
|
||||
plt.subplot(1,2,1)
|
||||
plt.imshow(img_patch_org)
|
||||
plt.subplot(1,2,2)
|
||||
plt.plot(gaussian_filter1d(img_patch_org.sum(axis=1), 3),np.array(range(len(gaussian_filter1d(img_patch_org.sum(axis=1), 3)))),linewidth=8)
|
||||
plt.xlabel('Density of textline prediction in direction of X axis',fontsize=60)
|
||||
plt.ylabel('Height',fontsize=60)
|
||||
plt.yticks([0,len(gaussian_filter1d(img_patch_org.sum(axis=1), 3))])
|
||||
plt.gca().invert_yaxis()
|
||||
|
||||
plt.savefig(os.path.join(dir_of_all, f_name+'_density_of_textline.png'))
|
||||
#print(np.max(img_patch_org.sum(axis=0)) ,np.max(img_patch_org.sum(axis=1)),'axislar')
|
||||
|
||||
#img_patch_org=resize_image(img_patch_org,int(img_patch_org.shape[0]*2.5),int(img_patch_org.shape[1]/2.5))
|
||||
|
||||
#print(np.max(img_patch_org.sum(axis=0)) ,np.max(img_patch_org.sum(axis=1)),'axislar2')
|
||||
|
||||
img_int=np.zeros((img_patch_org.shape[0],img_patch_org.shape[1]))
|
||||
img_int[:,:]=img_patch_org[:,:]#img_patch_org[:,:,0]
|
||||
|
||||
|
||||
|
||||
max_shape=np.max(img_int.shape)
|
||||
img_resized=np.zeros((int( max_shape*(1.1) ) , int( max_shape*(1.1) ) ))
|
||||
|
||||
|
||||
onset_x=int((img_resized.shape[1]-img_int.shape[1])/2.)
|
||||
onset_y=int((img_resized.shape[0]-img_int.shape[0])/2.)
|
||||
|
||||
|
||||
#img_resized=np.zeros((int( img_int.shape[0]*(1.8) ) , int( img_int.shape[1]*(2.6) ) ))
|
||||
|
||||
|
||||
|
||||
#img_resized[ int( img_int.shape[0]*(.4)):int( img_int.shape[0]*(.4))+img_int.shape[0] , int( img_int.shape[1]*(.8)):int( img_int.shape[1]*(.8))+img_int.shape[1] ]=img_int[:,:]
|
||||
img_resized[ onset_y:onset_y+img_int.shape[0] , onset_x:onset_x+img_int.shape[1] ]=img_int[:,:]
|
||||
|
||||
#print(img_resized.shape,'img_resizedshape')
|
||||
#plt.imshow(img_resized)
|
||||
#plt.show()
|
||||
|
||||
if main_page and img_patch_org.shape[1]>img_patch_org.shape[0]:
|
||||
|
||||
#plt.imshow(img_resized)
|
||||
#plt.show()
|
||||
angels=np.array([-45, 0 , 45 , 90 , ])#np.linspace(-12,12,100)#np.array([0 , 45 , 90 , -45])
|
||||
|
||||
#res=[]
|
||||
#num_of_peaks=[]
|
||||
#index_cor=[]
|
||||
var_res=[]
|
||||
|
||||
#indexer=0
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
#plt.imshow(img_rot)
|
||||
#plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
|
||||
|
||||
#neg_peaks,var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
#print(var_spectrum,'var_spectrum')
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
##print(rot,var_spectrum,'var_spectrum')
|
||||
#res_me=np.mean(neg_peaks)
|
||||
#if res_me==0:
|
||||
#res_me=1000000000000000000000
|
||||
#else:
|
||||
#pass
|
||||
|
||||
#res_num=len(neg_peaks)
|
||||
except:
|
||||
#res_me=1000000000000000000000
|
||||
#res_num=0
|
||||
var_spectrum=0
|
||||
#if self.isNaN(res_me):
|
||||
#pass
|
||||
#else:
|
||||
#res.append( res_me )
|
||||
#var_res.append(var_spectrum)
|
||||
#num_of_peaks.append( res_num )
|
||||
#index_cor.append(indexer)
|
||||
#indexer=indexer+1
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
#index_cor.append(indexer)
|
||||
#indexer=indexer+1
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
|
||||
|
||||
angels=np.linspace(ang_int-22.5,ang_int+22.5,100)
|
||||
|
||||
#res=[]
|
||||
#num_of_peaks=[]
|
||||
#index_cor=[]
|
||||
var_res=[]
|
||||
|
||||
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
##plt.imshow(img_rot)
|
||||
##plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
|
||||
except:
|
||||
var_spectrum=0
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
|
||||
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
|
||||
elif main_page and img_patch_org.shape[1]<=img_patch_org.shape[0]:
|
||||
|
||||
#plt.imshow(img_resized)
|
||||
#plt.show()
|
||||
angels=np.linspace(-12,12,100)#np.array([0 , 45 , 90 , -45])
|
||||
|
||||
|
||||
var_res=[]
|
||||
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
#plt.imshow(img_rot)
|
||||
#plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
|
||||
|
||||
#neg_peaks,var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
#print(var_spectrum,'var_spectrum')
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
|
||||
except:
|
||||
var_spectrum=0
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
|
||||
|
||||
if self.dir_of_all is not None:
|
||||
#print('galdi?')
|
||||
plt.figure(figsize=(60,30))
|
||||
plt.rcParams['font.size']='50'
|
||||
plt.plot(angels,np.array(var_res),'-o',markersize=25,linewidth=4)
|
||||
plt.xlabel('angle',fontsize=50)
|
||||
plt.ylabel('variance of sum of rotated textline in direction of x axis',fontsize=50)
|
||||
|
||||
plt.plot(angels[np.argmax(var_res)],var_res[np.argmax(np.array(var_res))] ,'*',markersize=50,label='Angle of deskewing=' +str("{:.2f}".format(angels[np.argmax(var_res)]))+r'$\degree$')
|
||||
plt.legend(loc='best')
|
||||
plt.savefig(os.path.join(self.dir_of_all,self.f_name+'_rotation_angle.png'))
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
|
||||
|
||||
early_slope_edge=11
|
||||
if abs(ang_int)>early_slope_edge and ang_int<0:
|
||||
|
||||
angels=np.linspace(-90,-12,100)
|
||||
|
||||
var_res=[]
|
||||
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
##plt.imshow(img_rot)
|
||||
##plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
except:
|
||||
var_spectrum=0
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
|
||||
elif abs(ang_int)>early_slope_edge and ang_int>0:
|
||||
|
||||
angels=np.linspace(90,12,100)
|
||||
|
||||
|
||||
var_res=[]
|
||||
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
##plt.imshow(img_rot)
|
||||
##plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
#print(indexer,'indexer')
|
||||
except:
|
||||
var_spectrum=0
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
else:
|
||||
|
||||
|
||||
angels=np.linspace(-25,25,60)
|
||||
|
||||
var_res=[]
|
||||
|
||||
indexer=0
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
#plt.imshow(img_rot)
|
||||
#plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
|
||||
|
||||
#neg_peaks,var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
#print(var_spectrum,'var_spectrum')
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
except:
|
||||
var_spectrum=0
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
|
||||
#plt.plot(var_res)
|
||||
#plt.show()
|
||||
|
||||
##plt.plot(mom3_res)
|
||||
##plt.show()
|
||||
#print(ang_int,'ang_int111')
|
||||
|
||||
early_slope_edge=22
|
||||
if abs(ang_int)>early_slope_edge and ang_int<0:
|
||||
|
||||
angels=np.linspace(-90,-25,60)
|
||||
|
||||
var_res=[]
|
||||
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
##plt.imshow(img_rot)
|
||||
##plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
|
||||
except:
|
||||
var_spectrum=0
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
|
||||
elif abs(ang_int)>early_slope_edge and ang_int>0:
|
||||
|
||||
angels=np.linspace(90,25,60)
|
||||
|
||||
var_res=[]
|
||||
|
||||
indexer=0
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
##plt.imshow(img_rot)
|
||||
##plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
#print(indexer,'indexer')
|
||||
except:
|
||||
var_spectrum=0
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
|
||||
return ang_int
|
||||
|
||||
|
||||
def put_drop_out_from_only_drop_model(layout_no_patch, layout1):
|
||||
|
||||
drop_only = (layout_no_patch[:, :, 0] == 4) * 1
|
||||
|
|
252
sbb_newspapers_org_image/utils/marginals.py
Normal file
252
sbb_newspapers_org_image/utils/marginals.py
Normal file
|
@ -0,0 +1,252 @@
|
|||
import numpy as np
|
||||
import cv2
|
||||
from scipy.signal import find_peaks
|
||||
from scipy.ndimage import gaussian_filter1d
|
||||
|
||||
|
||||
from .contour import find_new_features_of_contoures, return_contours_of_interested_region
|
||||
from .resize import resize_image
|
||||
from .rotate import rotate_image
|
||||
|
||||
def get_marginals(text_with_lines, text_regions, num_col, slope_deskew, kernel=None):
|
||||
mask_marginals=np.zeros((text_with_lines.shape[0],text_with_lines.shape[1]))
|
||||
mask_marginals=mask_marginals.astype(np.uint8)
|
||||
|
||||
|
||||
text_with_lines=text_with_lines.astype(np.uint8)
|
||||
##text_with_lines=cv2.erode(text_with_lines,self.kernel,iterations=3)
|
||||
|
||||
text_with_lines_eroded=cv2.erode(text_with_lines,kernel,iterations=5)
|
||||
|
||||
if text_with_lines.shape[0]<=1500:
|
||||
pass
|
||||
elif text_with_lines.shape[0]>1500 and text_with_lines.shape[0]<=1800:
|
||||
text_with_lines=resize_image(text_with_lines,int(text_with_lines.shape[0]*1.5),text_with_lines.shape[1])
|
||||
text_with_lines=cv2.erode(text_with_lines,kernel,iterations=5)
|
||||
text_with_lines=resize_image(text_with_lines,text_with_lines_eroded.shape[0],text_with_lines_eroded.shape[1])
|
||||
else:
|
||||
text_with_lines=resize_image(text_with_lines,int(text_with_lines.shape[0]*1.8),text_with_lines.shape[1])
|
||||
text_with_lines=cv2.erode(text_with_lines,kernel,iterations=7)
|
||||
text_with_lines=resize_image(text_with_lines,text_with_lines_eroded.shape[0],text_with_lines_eroded.shape[1])
|
||||
|
||||
|
||||
text_with_lines_y=text_with_lines.sum(axis=0)
|
||||
text_with_lines_y_eroded=text_with_lines_eroded.sum(axis=0)
|
||||
|
||||
thickness_along_y_percent=text_with_lines_y_eroded.max()/(float(text_with_lines.shape[0]))*100
|
||||
|
||||
#print(thickness_along_y_percent,'thickness_along_y_percent')
|
||||
|
||||
if thickness_along_y_percent<30:
|
||||
min_textline_thickness=8
|
||||
elif thickness_along_y_percent>=30 and thickness_along_y_percent<50:
|
||||
min_textline_thickness=20
|
||||
else:
|
||||
min_textline_thickness=40
|
||||
|
||||
|
||||
|
||||
if thickness_along_y_percent>=14:
|
||||
|
||||
text_with_lines_y_rev=-1*text_with_lines_y[:]
|
||||
#print(text_with_lines_y)
|
||||
#print(text_with_lines_y_rev)
|
||||
|
||||
|
||||
|
||||
|
||||
#plt.plot(text_with_lines_y)
|
||||
#plt.show()
|
||||
|
||||
|
||||
text_with_lines_y_rev=text_with_lines_y_rev-np.min(text_with_lines_y_rev)
|
||||
|
||||
#plt.plot(text_with_lines_y_rev)
|
||||
#plt.show()
|
||||
sigma_gaus=1
|
||||
region_sum_0= gaussian_filter1d(text_with_lines_y, sigma_gaus)
|
||||
|
||||
region_sum_0_rev=gaussian_filter1d(text_with_lines_y_rev, sigma_gaus)
|
||||
|
||||
#plt.plot(region_sum_0_rev)
|
||||
#plt.show()
|
||||
region_sum_0_updown=region_sum_0[len(region_sum_0)::-1]
|
||||
|
||||
first_nonzero=(next((i for i, x in enumerate(region_sum_0) if x), None))
|
||||
last_nonzero=(next((i for i, x in enumerate(region_sum_0_updown) if x), None))
|
||||
|
||||
|
||||
last_nonzero=len(region_sum_0)-last_nonzero
|
||||
|
||||
##img_sum_0_smooth_rev=-region_sum_0
|
||||
|
||||
|
||||
mid_point=(last_nonzero+first_nonzero)/2.
|
||||
|
||||
|
||||
one_third_right=(last_nonzero-mid_point)/3.0
|
||||
one_third_left=(mid_point-first_nonzero)/3.0
|
||||
|
||||
#img_sum_0_smooth_rev=img_sum_0_smooth_rev-np.min(img_sum_0_smooth_rev)
|
||||
|
||||
|
||||
|
||||
|
||||
peaks, _ = find_peaks(text_with_lines_y_rev, height=0)
|
||||
|
||||
|
||||
peaks=np.array(peaks)
|
||||
|
||||
|
||||
#print(region_sum_0[peaks])
|
||||
##plt.plot(region_sum_0)
|
||||
##plt.plot(peaks,region_sum_0[peaks],'*')
|
||||
##plt.show()
|
||||
#print(first_nonzero,last_nonzero,peaks)
|
||||
peaks=peaks[(peaks>first_nonzero) & ((peaks<last_nonzero))]
|
||||
|
||||
#print(first_nonzero,last_nonzero,peaks)
|
||||
|
||||
|
||||
#print(region_sum_0[peaks]<10)
|
||||
####peaks=peaks[region_sum_0[peaks]<25 ]
|
||||
|
||||
#print(region_sum_0[peaks])
|
||||
peaks=peaks[region_sum_0[peaks]<min_textline_thickness ]
|
||||
#print(peaks)
|
||||
#print(first_nonzero,last_nonzero,one_third_right,one_third_left)
|
||||
|
||||
if num_col==1:
|
||||
peaks_right=peaks[peaks>mid_point]
|
||||
peaks_left=peaks[peaks<mid_point]
|
||||
if num_col==2:
|
||||
peaks_right=peaks[peaks>(mid_point+one_third_right)]
|
||||
peaks_left=peaks[peaks<(mid_point-one_third_left)]
|
||||
|
||||
|
||||
try:
|
||||
point_right=np.min(peaks_right)
|
||||
except:
|
||||
point_right=last_nonzero
|
||||
|
||||
|
||||
try:
|
||||
point_left=np.max(peaks_left)
|
||||
except:
|
||||
point_left=first_nonzero
|
||||
|
||||
|
||||
|
||||
|
||||
#print(point_left,point_right)
|
||||
#print(text_regions.shape)
|
||||
if point_right>=mask_marginals.shape[1]:
|
||||
point_right=mask_marginals.shape[1]-1
|
||||
|
||||
try:
|
||||
mask_marginals[:,point_left:point_right]=1
|
||||
except:
|
||||
mask_marginals[:,:]=1
|
||||
|
||||
#print(mask_marginals.shape,point_left,point_right,'nadosh')
|
||||
mask_marginals_rotated=rotate_image(mask_marginals,-slope_deskew)
|
||||
|
||||
#print(mask_marginals_rotated.shape,'nadosh')
|
||||
mask_marginals_rotated_sum=mask_marginals_rotated.sum(axis=0)
|
||||
|
||||
mask_marginals_rotated_sum[mask_marginals_rotated_sum!=0]=1
|
||||
index_x=np.array(range(len(mask_marginals_rotated_sum)))+1
|
||||
|
||||
index_x_interest=index_x[mask_marginals_rotated_sum==1]
|
||||
|
||||
min_point_of_left_marginal=np.min(index_x_interest)-16
|
||||
max_point_of_right_marginal=np.max(index_x_interest)+16
|
||||
|
||||
if min_point_of_left_marginal<0:
|
||||
min_point_of_left_marginal=0
|
||||
if max_point_of_right_marginal>=text_regions.shape[1]:
|
||||
max_point_of_right_marginal=text_regions.shape[1]-1
|
||||
|
||||
|
||||
#print(np.min(index_x_interest) ,np.max(index_x_interest),'minmaxnew')
|
||||
#print(mask_marginals_rotated.shape,text_regions.shape,'mask_marginals_rotated')
|
||||
#plt.imshow(mask_marginals)
|
||||
#plt.show()
|
||||
|
||||
#plt.imshow(mask_marginals_rotated)
|
||||
#plt.show()
|
||||
|
||||
text_regions[(mask_marginals_rotated[:,:]!=1) & (text_regions[:,:]==1)]=4
|
||||
|
||||
#plt.imshow(text_regions)
|
||||
#plt.show()
|
||||
|
||||
pixel_img=4
|
||||
min_area_text=0.00001
|
||||
polygons_of_marginals=return_contours_of_interested_region(text_regions,pixel_img,min_area_text)
|
||||
|
||||
cx_text_only,cy_text_only ,x_min_text_only,x_max_text_only, y_min_text_only ,y_max_text_only,y_cor_x_min_main=find_new_features_of_contoures(polygons_of_marginals)
|
||||
|
||||
text_regions[(text_regions[:,:]==4)]=1
|
||||
|
||||
marginlas_should_be_main_text=[]
|
||||
|
||||
x_min_marginals_left=[]
|
||||
x_min_marginals_right=[]
|
||||
|
||||
for i in range(len(cx_text_only)):
|
||||
|
||||
x_width_mar=abs(x_min_text_only[i]-x_max_text_only[i])
|
||||
y_height_mar=abs(y_min_text_only[i]-y_max_text_only[i])
|
||||
#print(x_width_mar,y_height_mar,y_height_mar/x_width_mar,'y_height_mar')
|
||||
if x_width_mar>16 and y_height_mar/x_width_mar<18:
|
||||
marginlas_should_be_main_text.append(polygons_of_marginals[i])
|
||||
if x_min_text_only[i]<(mid_point-one_third_left):
|
||||
x_min_marginals_left_new=x_min_text_only[i]
|
||||
if len(x_min_marginals_left)==0:
|
||||
x_min_marginals_left.append(x_min_marginals_left_new)
|
||||
else:
|
||||
x_min_marginals_left[0]=min(x_min_marginals_left[0],x_min_marginals_left_new)
|
||||
else:
|
||||
x_min_marginals_right_new=x_min_text_only[i]
|
||||
if len(x_min_marginals_right)==0:
|
||||
x_min_marginals_right.append(x_min_marginals_right_new)
|
||||
else:
|
||||
x_min_marginals_right[0]=min(x_min_marginals_right[0],x_min_marginals_right_new)
|
||||
|
||||
if len(x_min_marginals_left)==0:
|
||||
x_min_marginals_left=[0]
|
||||
if len(x_min_marginals_right)==0:
|
||||
x_min_marginals_right=[text_regions.shape[1]-1]
|
||||
|
||||
|
||||
|
||||
|
||||
#print(x_min_marginals_left[0],x_min_marginals_right[0],'margo')
|
||||
|
||||
#print(marginlas_should_be_main_text,'marginlas_should_be_main_text')
|
||||
text_regions=cv2.fillPoly(text_regions, pts =marginlas_should_be_main_text, color=(4,4))
|
||||
|
||||
#print(np.unique(text_regions))
|
||||
|
||||
#text_regions[:,:int(x_min_marginals_left[0])][text_regions[:,:int(x_min_marginals_left[0])]==1]=0
|
||||
#text_regions[:,int(x_min_marginals_right[0]):][text_regions[:,int(x_min_marginals_right[0]):]==1]=0
|
||||
|
||||
text_regions[:,:int(min_point_of_left_marginal)][text_regions[:,:int(min_point_of_left_marginal)]==1]=0
|
||||
text_regions[:,int(max_point_of_right_marginal):][text_regions[:,int(max_point_of_right_marginal):]==1]=0
|
||||
|
||||
###text_regions[:,0:point_left][text_regions[:,0:point_left]==1]=4
|
||||
|
||||
###text_regions[:,point_right:][ text_regions[:,point_right:]==1]=4
|
||||
#plt.plot(region_sum_0)
|
||||
#plt.plot(peaks,region_sum_0[peaks],'*')
|
||||
#plt.show()
|
||||
|
||||
|
||||
#plt.imshow(text_regions)
|
||||
#plt.show()
|
||||
|
||||
#sys.exit()
|
||||
else:
|
||||
pass
|
||||
return text_regions
|
4
sbb_newspapers_org_image/utils/resize.py
Normal file
4
sbb_newspapers_org_image/utils/resize.py
Normal file
|
@ -0,0 +1,4 @@
|
|||
import cv2
|
||||
|
||||
def resize_image(img_in, input_height, input_width):
|
||||
return cv2.resize(img_in, (input_width, input_height), interpolation=cv2.INTER_NEAREST)
|
|
@ -1,3 +1,4 @@
|
|||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
import cv2
|
||||
from scipy.signal import find_peaks
|
||||
|
@ -1366,3 +1367,456 @@ def textline_contours_postprocessing(textline_mask, slope, contour_text_interest
|
|||
|
||||
return contours_rotated_clean
|
||||
|
||||
def seperate_lines_new2(img_path, thetha, num_col, slope_region, dir_of_all, f_name):
|
||||
|
||||
if num_col == 1:
|
||||
num_patches = int(img_path.shape[1] / 200.0)
|
||||
else:
|
||||
num_patches = int(img_path.shape[1] / 140.0)
|
||||
# num_patches=int(img_path.shape[1]/200.)
|
||||
if num_patches == 0:
|
||||
num_patches = 1
|
||||
|
||||
img_patch_ineterst = img_path[:, :] # [peaks_neg_true[14]-dis_up:peaks_neg_true[15]+dis_down ,:]
|
||||
|
||||
# plt.imshow(img_patch_ineterst)
|
||||
# plt.show()
|
||||
|
||||
length_x = int(img_path.shape[1] / float(num_patches))
|
||||
# margin = int(0.04 * length_x) just recently this was changed because it break lines into 2
|
||||
margin = int(0.04 * length_x)
|
||||
# print(margin,'margin')
|
||||
# if margin<=4:
|
||||
# margin = int(0.08 * length_x)
|
||||
|
||||
# margin=0
|
||||
|
||||
width_mid = length_x - 2 * margin
|
||||
|
||||
nxf = img_path.shape[1] / float(width_mid)
|
||||
|
||||
if nxf > int(nxf):
|
||||
nxf = int(nxf) + 1
|
||||
else:
|
||||
nxf = int(nxf)
|
||||
|
||||
slopes_tile_wise = []
|
||||
for i in range(nxf):
|
||||
if i == 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
elif i > 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
|
||||
if index_x_u > img_path.shape[1]:
|
||||
index_x_u = img_path.shape[1]
|
||||
index_x_d = img_path.shape[1] - length_x
|
||||
|
||||
# img_patch = img[index_y_d:index_y_u, index_x_d:index_x_u, :]
|
||||
img_xline = img_patch_ineterst[:, index_x_d:index_x_u]
|
||||
|
||||
sigma = 2
|
||||
try:
|
||||
slope_xline = return_deskew_slop(img_xline, sigma, dir_of_all=dir_of_all, f_name=f_name)
|
||||
except:
|
||||
slope_xline = 0
|
||||
|
||||
if abs(slope_region) < 25 and abs(slope_xline) > 25:
|
||||
slope_xline = [slope_region][0]
|
||||
# if abs(slope_region)>70 and abs(slope_xline)<25:
|
||||
# slope_xline=[slope_region][0]
|
||||
slopes_tile_wise.append(slope_xline)
|
||||
# print(slope_xline,'xlineeee')
|
||||
img_line_rotated = rotate_image(img_xline, slope_xline)
|
||||
img_line_rotated[:, :][img_line_rotated[:, :] != 0] = 1
|
||||
|
||||
# print(slopes_tile_wise,'slopes_tile_wise')
|
||||
img_patch_ineterst = img_path[:, :] # [peaks_neg_true[14]-dis_up:peaks_neg_true[14]+dis_down ,:]
|
||||
|
||||
img_patch_ineterst_revised = np.zeros(img_patch_ineterst.shape)
|
||||
|
||||
for i in range(nxf):
|
||||
if i == 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
elif i > 0:
|
||||
index_x_d = i * width_mid
|
||||
index_x_u = index_x_d + length_x
|
||||
|
||||
if index_x_u > img_path.shape[1]:
|
||||
index_x_u = img_path.shape[1]
|
||||
index_x_d = img_path.shape[1] - length_x
|
||||
|
||||
img_xline = img_patch_ineterst[:, index_x_d:index_x_u]
|
||||
|
||||
img_int = np.zeros((img_xline.shape[0], img_xline.shape[1]))
|
||||
img_int[:, :] = img_xline[:, :] # img_patch_org[:,:,0]
|
||||
|
||||
img_resized = np.zeros((int(img_int.shape[0] * (1.2)), int(img_int.shape[1] * (3))))
|
||||
|
||||
img_resized[int(img_int.shape[0] * (0.1)) : int(img_int.shape[0] * (0.1)) + img_int.shape[0], int(img_int.shape[1] * (1)) : int(img_int.shape[1] * (1)) + img_int.shape[1]] = img_int[:, :]
|
||||
# plt.imshow(img_xline)
|
||||
# plt.show()
|
||||
img_line_rotated = rotate_image(img_resized, slopes_tile_wise[i])
|
||||
img_line_rotated[:, :][img_line_rotated[:, :] != 0] = 1
|
||||
|
||||
img_patch_seperated = seperate_lines_new_inside_teils2(img_line_rotated, 0)
|
||||
|
||||
img_patch_seperated_returned = rotate_image(img_patch_seperated, -slopes_tile_wise[i])
|
||||
img_patch_seperated_returned[:, :][img_patch_seperated_returned[:, :] != 0] = 1
|
||||
|
||||
img_patch_seperated_returned_true_size = img_patch_seperated_returned[int(img_int.shape[0] * (0.1)) : int(img_int.shape[0] * (0.1)) + img_int.shape[0], int(img_int.shape[1] * (1)) : int(img_int.shape[1] * (1)) + img_int.shape[1]]
|
||||
|
||||
img_patch_seperated_returned_true_size = img_patch_seperated_returned_true_size[:, margin : length_x - margin]
|
||||
img_patch_ineterst_revised[:, index_x_d + margin : index_x_u - margin] = img_patch_seperated_returned_true_size
|
||||
|
||||
# plt.imshow(img_patch_ineterst_revised)
|
||||
# plt.show()
|
||||
return img_patch_ineterst_revised
|
||||
|
||||
def return_deskew_slop(img_patch_org, sigma_des, main_page=False, dir_of_all=None, f_name=None):
|
||||
|
||||
|
||||
if main_page and dir_of_all is not None:
|
||||
|
||||
|
||||
plt.figure(figsize=(70,40))
|
||||
plt.rcParams['font.size']='50'
|
||||
plt.subplot(1,2,1)
|
||||
plt.imshow(img_patch_org)
|
||||
plt.subplot(1,2,2)
|
||||
plt.plot(gaussian_filter1d(img_patch_org.sum(axis=1), 3),np.array(range(len(gaussian_filter1d(img_patch_org.sum(axis=1), 3)))),linewidth=8)
|
||||
plt.xlabel('Density of textline prediction in direction of X axis',fontsize=60)
|
||||
plt.ylabel('Height',fontsize=60)
|
||||
plt.yticks([0,len(gaussian_filter1d(img_patch_org.sum(axis=1), 3))])
|
||||
plt.gca().invert_yaxis()
|
||||
|
||||
plt.savefig(os.path.join(dir_of_all, f_name+'_density_of_textline.png'))
|
||||
#print(np.max(img_patch_org.sum(axis=0)) ,np.max(img_patch_org.sum(axis=1)),'axislar')
|
||||
|
||||
#img_patch_org=resize_image(img_patch_org,int(img_patch_org.shape[0]*2.5),int(img_patch_org.shape[1]/2.5))
|
||||
|
||||
#print(np.max(img_patch_org.sum(axis=0)) ,np.max(img_patch_org.sum(axis=1)),'axislar2')
|
||||
|
||||
img_int=np.zeros((img_patch_org.shape[0],img_patch_org.shape[1]))
|
||||
img_int[:,:]=img_patch_org[:,:]#img_patch_org[:,:,0]
|
||||
|
||||
|
||||
|
||||
max_shape=np.max(img_int.shape)
|
||||
img_resized=np.zeros((int( max_shape*(1.1) ) , int( max_shape*(1.1) ) ))
|
||||
|
||||
|
||||
onset_x=int((img_resized.shape[1]-img_int.shape[1])/2.)
|
||||
onset_y=int((img_resized.shape[0]-img_int.shape[0])/2.)
|
||||
|
||||
|
||||
#img_resized=np.zeros((int( img_int.shape[0]*(1.8) ) , int( img_int.shape[1]*(2.6) ) ))
|
||||
|
||||
|
||||
|
||||
#img_resized[ int( img_int.shape[0]*(.4)):int( img_int.shape[0]*(.4))+img_int.shape[0] , int( img_int.shape[1]*(.8)):int( img_int.shape[1]*(.8))+img_int.shape[1] ]=img_int[:,:]
|
||||
img_resized[ onset_y:onset_y+img_int.shape[0] , onset_x:onset_x+img_int.shape[1] ]=img_int[:,:]
|
||||
|
||||
#print(img_resized.shape,'img_resizedshape')
|
||||
#plt.imshow(img_resized)
|
||||
#plt.show()
|
||||
|
||||
if main_page and img_patch_org.shape[1]>img_patch_org.shape[0]:
|
||||
|
||||
#plt.imshow(img_resized)
|
||||
#plt.show()
|
||||
angels=np.array([-45, 0 , 45 , 90 , ])#np.linspace(-12,12,100)#np.array([0 , 45 , 90 , -45])
|
||||
|
||||
#res=[]
|
||||
#num_of_peaks=[]
|
||||
#index_cor=[]
|
||||
var_res=[]
|
||||
|
||||
#indexer=0
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
#plt.imshow(img_rot)
|
||||
#plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
|
||||
|
||||
#neg_peaks,var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
#print(var_spectrum,'var_spectrum')
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
##print(rot,var_spectrum,'var_spectrum')
|
||||
#res_me=np.mean(neg_peaks)
|
||||
#if res_me==0:
|
||||
#res_me=1000000000000000000000
|
||||
#else:
|
||||
#pass
|
||||
|
||||
#res_num=len(neg_peaks)
|
||||
except:
|
||||
#res_me=1000000000000000000000
|
||||
#res_num=0
|
||||
var_spectrum=0
|
||||
#if self.isNaN(res_me):
|
||||
#pass
|
||||
#else:
|
||||
#res.append( res_me )
|
||||
#var_res.append(var_spectrum)
|
||||
#num_of_peaks.append( res_num )
|
||||
#index_cor.append(indexer)
|
||||
#indexer=indexer+1
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
#index_cor.append(indexer)
|
||||
#indexer=indexer+1
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
|
||||
|
||||
angels=np.linspace(ang_int-22.5,ang_int+22.5,100)
|
||||
|
||||
#res=[]
|
||||
#num_of_peaks=[]
|
||||
#index_cor=[]
|
||||
var_res=[]
|
||||
|
||||
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
##plt.imshow(img_rot)
|
||||
##plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
|
||||
except:
|
||||
var_spectrum=0
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
|
||||
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
|
||||
elif main_page and img_patch_org.shape[1]<=img_patch_org.shape[0]:
|
||||
|
||||
#plt.imshow(img_resized)
|
||||
#plt.show()
|
||||
angels=np.linspace(-12,12,100)#np.array([0 , 45 , 90 , -45])
|
||||
|
||||
|
||||
var_res=[]
|
||||
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
#plt.imshow(img_rot)
|
||||
#plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
|
||||
|
||||
#neg_peaks,var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
#print(var_spectrum,'var_spectrum')
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
|
||||
except:
|
||||
var_spectrum=0
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
|
||||
|
||||
if self.dir_of_all is not None:
|
||||
#print('galdi?')
|
||||
plt.figure(figsize=(60,30))
|
||||
plt.rcParams['font.size']='50'
|
||||
plt.plot(angels,np.array(var_res),'-o',markersize=25,linewidth=4)
|
||||
plt.xlabel('angle',fontsize=50)
|
||||
plt.ylabel('variance of sum of rotated textline in direction of x axis',fontsize=50)
|
||||
|
||||
plt.plot(angels[np.argmax(var_res)],var_res[np.argmax(np.array(var_res))] ,'*',markersize=50,label='Angle of deskewing=' +str("{:.2f}".format(angels[np.argmax(var_res)]))+r'$\degree$')
|
||||
plt.legend(loc='best')
|
||||
plt.savefig(os.path.join(self.dir_of_all,self.f_name+'_rotation_angle.png'))
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
|
||||
|
||||
early_slope_edge=11
|
||||
if abs(ang_int)>early_slope_edge and ang_int<0:
|
||||
|
||||
angels=np.linspace(-90,-12,100)
|
||||
|
||||
var_res=[]
|
||||
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
##plt.imshow(img_rot)
|
||||
##plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
except:
|
||||
var_spectrum=0
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
|
||||
elif abs(ang_int)>early_slope_edge and ang_int>0:
|
||||
|
||||
angels=np.linspace(90,12,100)
|
||||
|
||||
|
||||
var_res=[]
|
||||
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
##plt.imshow(img_rot)
|
||||
##plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
#print(indexer,'indexer')
|
||||
except:
|
||||
var_spectrum=0
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
else:
|
||||
|
||||
|
||||
angels=np.linspace(-25,25,60)
|
||||
|
||||
var_res=[]
|
||||
|
||||
indexer=0
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
#plt.imshow(img_rot)
|
||||
#plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
|
||||
|
||||
#neg_peaks,var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
#print(var_spectrum,'var_spectrum')
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
except:
|
||||
var_spectrum=0
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
|
||||
#plt.plot(var_res)
|
||||
#plt.show()
|
||||
|
||||
##plt.plot(mom3_res)
|
||||
##plt.show()
|
||||
#print(ang_int,'ang_int111')
|
||||
|
||||
early_slope_edge=22
|
||||
if abs(ang_int)>early_slope_edge and ang_int<0:
|
||||
|
||||
angels=np.linspace(-90,-25,60)
|
||||
|
||||
var_res=[]
|
||||
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
##plt.imshow(img_rot)
|
||||
##plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
|
||||
except:
|
||||
var_spectrum=0
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
|
||||
elif abs(ang_int)>early_slope_edge and ang_int>0:
|
||||
|
||||
angels=np.linspace(90,25,60)
|
||||
|
||||
var_res=[]
|
||||
|
||||
indexer=0
|
||||
for rot in angels:
|
||||
img_rot=self.rotate_image(img_resized,rot)
|
||||
##plt.imshow(img_rot)
|
||||
##plt.show()
|
||||
img_rot[img_rot!=0]=1
|
||||
#res_me=np.mean(self.find_num_col_deskew(img_rot,sigma_des,2.0 ))
|
||||
try:
|
||||
var_spectrum=self.find_num_col_deskew(img_rot,sigma_des,20.3 )
|
||||
#print(indexer,'indexer')
|
||||
except:
|
||||
var_spectrum=0
|
||||
|
||||
var_res.append(var_spectrum)
|
||||
|
||||
|
||||
|
||||
try:
|
||||
var_res=np.array(var_res)
|
||||
|
||||
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||
except:
|
||||
ang_int=0
|
||||
|
||||
return ang_int
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue