mirror of
https://github.com/qurator-spk/eynollah.git
synced 2025-06-08 19:59:56 +02:00
move all plotting code to EynollahPlotter
This commit is contained in:
parent
853fd12e40
commit
c2e9ebb366
5 changed files with 219 additions and 266 deletions
|
@ -4,13 +4,18 @@ from sbb_newspapers_org_image.eynollah import eynollah
|
||||||
|
|
||||||
@click.command()
|
@click.command()
|
||||||
@click.option(
|
@click.option(
|
||||||
"--image", "-i", help="image filename", type=click.Path(exists=True, dir_okay=False)
|
"--image",
|
||||||
|
"-i",
|
||||||
|
help="image filename",
|
||||||
|
type=click.Path(exists=True, dir_okay=False),
|
||||||
|
required=True,
|
||||||
)
|
)
|
||||||
@click.option(
|
@click.option(
|
||||||
"--out",
|
"--out",
|
||||||
"-o",
|
"-o",
|
||||||
help="directory to write output xml data",
|
help="directory to write output xml data",
|
||||||
type=click.Path(exists=True, file_okay=False),
|
type=click.Path(exists=True, file_okay=False),
|
||||||
|
required=True,
|
||||||
)
|
)
|
||||||
@click.option(
|
@click.option(
|
||||||
"--model",
|
"--model",
|
||||||
|
@ -42,6 +47,12 @@ from sbb_newspapers_org_image.eynollah import eynollah
|
||||||
help="if a directory is given, all plots needed for documentation will be saved there",
|
help="if a directory is given, all plots needed for documentation will be saved there",
|
||||||
type=click.Path(exists=True, file_okay=False),
|
type=click.Path(exists=True, file_okay=False),
|
||||||
)
|
)
|
||||||
|
@click.option(
|
||||||
|
"--enable_plotting",
|
||||||
|
"-ep",
|
||||||
|
is_flag=True,
|
||||||
|
help="If set, will plot intermediary files and images",
|
||||||
|
)
|
||||||
@click.option(
|
@click.option(
|
||||||
"--allow_enhancement",
|
"--allow_enhancement",
|
||||||
"-ae",
|
"-ae",
|
||||||
|
@ -80,6 +91,7 @@ def main(
|
||||||
save_layout,
|
save_layout,
|
||||||
save_deskewed,
|
save_deskewed,
|
||||||
save_all,
|
save_all,
|
||||||
|
enable_plotting,
|
||||||
allow_enhancement,
|
allow_enhancement,
|
||||||
curved_line,
|
curved_line,
|
||||||
full_layout,
|
full_layout,
|
||||||
|
@ -95,6 +107,7 @@ def main(
|
||||||
save_layout,
|
save_layout,
|
||||||
save_deskewed,
|
save_deskewed,
|
||||||
save_all,
|
save_all,
|
||||||
|
enable_plotting,
|
||||||
allow_enhancement,
|
allow_enhancement,
|
||||||
curved_line,
|
curved_line,
|
||||||
full_layout,
|
full_layout,
|
||||||
|
|
|
@ -12,11 +12,9 @@ import time
|
||||||
import warnings
|
import warnings
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from multiprocessing import Process, Queue, cpu_count
|
from multiprocessing import Process, Queue, cpu_count
|
||||||
from sys import getsizeof
|
|
||||||
|
|
||||||
import cv2
|
import cv2
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
|
|
||||||
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3"
|
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3"
|
||||||
stderr = sys.stderr
|
stderr = sys.stderr
|
||||||
|
@ -117,10 +115,10 @@ from .utils import (
|
||||||
|
|
||||||
from .utils.xml import create_page_xml
|
from .utils.xml import create_page_xml
|
||||||
|
|
||||||
|
from .plot import EynollahPlotter
|
||||||
|
|
||||||
SLOPE_THRESHOLD = 0.13
|
SLOPE_THRESHOLD = 0.13
|
||||||
|
|
||||||
|
|
||||||
class eynollah:
|
class eynollah:
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
@ -132,6 +130,7 @@ class eynollah:
|
||||||
dir_of_layout=None,
|
dir_of_layout=None,
|
||||||
dir_of_deskewed=None,
|
dir_of_deskewed=None,
|
||||||
dir_of_all=None,
|
dir_of_all=None,
|
||||||
|
enable_plotting=False,
|
||||||
allow_enhancement=False,
|
allow_enhancement=False,
|
||||||
curved_line=False,
|
curved_line=False,
|
||||||
full_layout=False,
|
full_layout=False,
|
||||||
|
@ -142,17 +141,21 @@ class eynollah:
|
||||||
self.cont_page = []
|
self.cont_page = []
|
||||||
self.dir_out = dir_out
|
self.dir_out = dir_out
|
||||||
self.image_filename_stem = image_filename_stem
|
self.image_filename_stem = image_filename_stem
|
||||||
self.dir_of_cropped_images = dir_of_cropped_images
|
|
||||||
self.allow_enhancement = allow_enhancement
|
self.allow_enhancement = allow_enhancement
|
||||||
self.curved_line = curved_line
|
self.curved_line = curved_line
|
||||||
self.full_layout = full_layout
|
self.full_layout = full_layout
|
||||||
self.allow_scaling = allow_scaling
|
self.allow_scaling = allow_scaling
|
||||||
self.dir_of_layout = dir_of_layout
|
|
||||||
self.headers_off = headers_off
|
self.headers_off = headers_off
|
||||||
self.dir_of_deskewed = dir_of_deskewed
|
|
||||||
self.dir_of_all = dir_of_all
|
|
||||||
if not self.image_filename_stem:
|
if not self.image_filename_stem:
|
||||||
self.image_filename_stem = Path(Path(image_filename).name).stem
|
self.image_filename_stem = Path(Path(image_filename).name).stem
|
||||||
|
self.plotter = None if not enable_plotting else EynollahPlotter(
|
||||||
|
dir_of_all=dir_of_all,
|
||||||
|
dir_of_deskewed=dir_of_deskewed,
|
||||||
|
dir_of_cropped_images=dir_of_cropped_images,
|
||||||
|
dir_of_layout=dir_of_layout,
|
||||||
|
image_filename=image_filename,
|
||||||
|
image_filename_stem=image_filename_stem,
|
||||||
|
)
|
||||||
self.dir_models = dir_models
|
self.dir_models = dir_models
|
||||||
self.kernel = np.ones((5, 5), np.uint8)
|
self.kernel = np.ones((5, 5), np.uint8)
|
||||||
|
|
||||||
|
@ -448,8 +451,12 @@ class eynollah:
|
||||||
self.scale_x = self.img_width_int / float(self.image.shape[1])
|
self.scale_x = self.img_width_int / float(self.image.shape[1])
|
||||||
|
|
||||||
self.image = resize_image(self.image, self.img_hight_int, self.img_width_int)
|
self.image = resize_image(self.image, self.img_hight_int, self.img_width_int)
|
||||||
del img_res
|
|
||||||
del img_org
|
# Also set for the plotter
|
||||||
|
# XXX TODO hacky
|
||||||
|
self.plotter.image_org = self.image_org
|
||||||
|
self.plotter.scale_y = self.scale_y
|
||||||
|
self.plotter.scale_x = self.scale_x
|
||||||
|
|
||||||
def get_image_and_scales_after_enhancing(self, img_org, img_res):
|
def get_image_and_scales_after_enhancing(self, img_org, img_res):
|
||||||
|
|
||||||
|
@ -922,7 +929,7 @@ class eynollah:
|
||||||
sigma_des = max(1, int(y_diff_mean * (4.0 / 40.0)))
|
sigma_des = max(1, int(y_diff_mean * (4.0 / 40.0)))
|
||||||
|
|
||||||
img_int_p[img_int_p > 0] = 1
|
img_int_p[img_int_p > 0] = 1
|
||||||
slope_for_all = return_deskew_slop(img_int_p, sigma_des, dir_of_all=self.dir_of_all, image_filename_stem=self.image_filename_stem)
|
slope_for_all = return_deskew_slop(img_int_p, sigma_des, plotter=self.plotter)
|
||||||
|
|
||||||
if abs(slope_for_all) < 0.5:
|
if abs(slope_for_all) < 0.5:
|
||||||
slope_for_all = [slope_deskew][0]
|
slope_for_all = [slope_deskew][0]
|
||||||
|
@ -950,7 +957,7 @@ class eynollah:
|
||||||
textline_biggest_region = mask_biggest * textline_mask_tot_ea
|
textline_biggest_region = mask_biggest * textline_mask_tot_ea
|
||||||
|
|
||||||
# print(slope_for_all,'slope_for_all')
|
# print(slope_for_all,'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.image_filename_stem)
|
textline_rotated_seperated = seperate_lines_new2(textline_biggest_region[y : y + h, x : x + w], 0, num_col, slope_for_all, plotter=self.plotter)
|
||||||
|
|
||||||
# new line added
|
# new line added
|
||||||
##print(np.shape(textline_rotated_seperated),np.shape(mask_biggest))
|
##print(np.shape(textline_rotated_seperated),np.shape(mask_biggest))
|
||||||
|
@ -1036,7 +1043,7 @@ class eynollah:
|
||||||
if sigma_des < 1:
|
if sigma_des < 1:
|
||||||
sigma_des = 1
|
sigma_des = 1
|
||||||
img_int_p[img_int_p > 0] = 1
|
img_int_p[img_int_p > 0] = 1
|
||||||
slope_for_all = return_deskew_slop(img_int_p, sigma_des, dir_of_all=self.dir_of_all, image_filename_stem=self.image_filename_stem)
|
slope_for_all = return_deskew_slop(img_int_p, sigma_des, plotter=self.plotter)
|
||||||
if abs(slope_for_all) <= 0.5:
|
if abs(slope_for_all) <= 0.5:
|
||||||
slope_for_all = [slope_deskew][0]
|
slope_for_all = [slope_deskew][0]
|
||||||
except:
|
except:
|
||||||
|
@ -1127,7 +1134,7 @@ class eynollah:
|
||||||
sigma_des = 1
|
sigma_des = 1
|
||||||
|
|
||||||
crop_img[crop_img > 0] = 1
|
crop_img[crop_img > 0] = 1
|
||||||
slope_corresponding_textregion = return_deskew_slop(crop_img, sigma_des, dir_of_all=self.dir_of_all, image_filename_stem=self.image_filename_stem)
|
slope_corresponding_textregion = return_deskew_slop(crop_img, sigma_des, plotter=self.plotter)
|
||||||
|
|
||||||
except:
|
except:
|
||||||
slope_corresponding_textregion = 999
|
slope_corresponding_textregion = 999
|
||||||
|
@ -1814,20 +1821,6 @@ class eynollah:
|
||||||
|
|
||||||
return text_regions_p_true
|
return text_regions_p_true
|
||||||
|
|
||||||
|
|
||||||
def write_images_into_directory(self, img_contoures, dir_of_cropped_imgs, image_page):
|
|
||||||
index = 0
|
|
||||||
for cont_ind in img_contoures:
|
|
||||||
x, y, w, h = cv2.boundingRect(cont_ind)
|
|
||||||
box = [x, y, w, h]
|
|
||||||
croped_page, page_coord = crop_image_inside_box(box, image_page)
|
|
||||||
|
|
||||||
croped_page = resize_image(croped_page, int(croped_page.shape[0] / self.scale_y), int(croped_page.shape[1] / self.scale_x))
|
|
||||||
|
|
||||||
path = os.path.join(dir_of_cropped_imgs, self.image_filename_stem + "_" + str(index) + ".jpg")
|
|
||||||
cv2.imwrite(path, croped_page)
|
|
||||||
index += 1
|
|
||||||
|
|
||||||
def do_order_of_regions(self, contours_only_text_parent, contours_only_text_parent_h, boxes, textline_mask_tot):
|
def do_order_of_regions(self, contours_only_text_parent, contours_only_text_parent_h, boxes, textline_mask_tot):
|
||||||
|
|
||||||
if self.full_layout:
|
if self.full_layout:
|
||||||
|
@ -2110,88 +2103,6 @@ class eynollah:
|
||||||
|
|
||||||
return order_text_new, id_of_texts_tot
|
return order_text_new, id_of_texts_tot
|
||||||
|
|
||||||
def save_plot_of_layout_main(self, text_regions_p, image_page):
|
|
||||||
values = np.unique(text_regions_p[:, :])
|
|
||||||
# pixels=['Background' , 'Main text' , 'Heading' , 'Marginalia' ,'Drop capitals' , 'Images' , 'Seperators' , 'Tables', 'Graphics']
|
|
||||||
pixels=['Background' , 'Main text' , 'Image' , 'Separator','Marginalia']
|
|
||||||
values_indexes = [0, 1, 2, 3, 4]
|
|
||||||
plt.figure(figsize=(40, 40))
|
|
||||||
plt.rcParams["font.size"] = "40"
|
|
||||||
im = plt.imshow(text_regions_p[:, :])
|
|
||||||
colors = [im.cmap(im.norm(value)) for value in values]
|
|
||||||
patches = [mpatches.Patch(color=colors[np.where(values == i)[0][0]], label="{l}".format(l=pixels[int(np.where(values_indexes == i)[0][0])])) for i in values]
|
|
||||||
plt.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0, fontsize=40)
|
|
||||||
plt.savefig(os.path.join(self.dir_of_layout, self.image_filename_stem + "_layout_main.png"))
|
|
||||||
|
|
||||||
def save_plot_of_layout_main_all(self, text_regions_p, image_page):
|
|
||||||
values = np.unique(text_regions_p[:, :])
|
|
||||||
# pixels=['Background' , 'Main text' , 'Heading' , 'Marginalia' ,'Drop capitals' , 'Images' , 'Seperators' , 'Tables', 'Graphics']
|
|
||||||
pixels=['Background' , 'Main text' , 'Image' , 'Separator','Marginalia']
|
|
||||||
values_indexes = [0, 1, 2, 3, 4]
|
|
||||||
plt.figure(figsize=(80, 40))
|
|
||||||
plt.rcParams["font.size"] = "40"
|
|
||||||
plt.subplot(1, 2, 1)
|
|
||||||
plt.imshow(image_page)
|
|
||||||
plt.subplot(1, 2, 2)
|
|
||||||
im = plt.imshow(text_regions_p[:, :])
|
|
||||||
colors = [im.cmap(im.norm(value)) for value in values]
|
|
||||||
patches = [mpatches.Patch(color=colors[np.where(values == i)[0][0]], label="{l}".format(l=pixels[int(np.where(values_indexes == i)[0][0])])) for i in values]
|
|
||||||
plt.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0, fontsize=60)
|
|
||||||
plt.savefig(os.path.join(self.dir_of_all, self.image_filename_stem + "_layout_main_and_page.png"))
|
|
||||||
|
|
||||||
def save_plot_of_layout(self, text_regions_p, image_page):
|
|
||||||
values = np.unique(text_regions_p[:, :])
|
|
||||||
# pixels=['Background' , 'Main text' , 'Heading' , 'Marginalia' ,'Drop capitals' , 'Images' , 'Seperators' , 'Tables', 'Graphics']
|
|
||||||
pixels = ["Background", "Main text", "Header", "Marginalia", "Drop capital", "Image", "Separator"]
|
|
||||||
values_indexes = [0, 1, 2, 8, 4, 5, 6]
|
|
||||||
plt.figure(figsize=(40, 40))
|
|
||||||
plt.rcParams["font.size"] = "40"
|
|
||||||
im = plt.imshow(text_regions_p[:, :])
|
|
||||||
colors = [im.cmap(im.norm(value)) for value in values]
|
|
||||||
patches = [mpatches.Patch(color=colors[np.where(values == i)[0][0]], label="{l}".format(l=pixels[int(np.where(values_indexes == i)[0][0])])) for i in values]
|
|
||||||
plt.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0, fontsize=40)
|
|
||||||
plt.savefig(os.path.join(self.dir_of_layout, self.image_filename_stem + "_layout.png"))
|
|
||||||
|
|
||||||
def save_plot_of_layout_all(self, text_regions_p, image_page):
|
|
||||||
values = np.unique(text_regions_p[:, :])
|
|
||||||
# pixels=['Background' , 'Main text' , 'Heading' , 'Marginalia' ,'Drop capitals' , 'Images' , 'Seperators' , 'Tables', 'Graphics']
|
|
||||||
pixels = ["Background", "Main text", "Header", "Marginalia", "Drop capital", "Image", "Separator"]
|
|
||||||
values_indexes = [0, 1, 2, 8, 4, 5, 6]
|
|
||||||
plt.figure(figsize=(80, 40))
|
|
||||||
plt.rcParams["font.size"] = "40"
|
|
||||||
plt.subplot(1, 2, 1)
|
|
||||||
plt.imshow(image_page)
|
|
||||||
plt.subplot(1, 2, 2)
|
|
||||||
im = plt.imshow(text_regions_p[:, :])
|
|
||||||
colors = [im.cmap(im.norm(value)) for value in values]
|
|
||||||
patches = [mpatches.Patch(color=colors[np.where(values == i)[0][0]], label="{l}".format(l=pixels[int(np.where(values_indexes == i)[0][0])])) for i in values]
|
|
||||||
plt.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0, fontsize=60)
|
|
||||||
plt.savefig(os.path.join(self.dir_of_all, self.image_filename_stem + "_layout_and_page.png"))
|
|
||||||
|
|
||||||
def save_plot_of_textlines(self, textline_mask_tot_ea, image_page):
|
|
||||||
values = np.unique(textline_mask_tot_ea[:, :])
|
|
||||||
pixels = ["Background", "Textlines"]
|
|
||||||
values_indexes = [0, 1]
|
|
||||||
plt.figure(figsize=(80, 40))
|
|
||||||
plt.rcParams["font.size"] = "40"
|
|
||||||
plt.subplot(1, 2, 1)
|
|
||||||
plt.imshow(image_page)
|
|
||||||
plt.subplot(1, 2, 2)
|
|
||||||
im = plt.imshow(textline_mask_tot_ea[:, :])
|
|
||||||
colors = [im.cmap(im.norm(value)) for value in values]
|
|
||||||
patches = [mpatches.Patch(color=colors[np.where(values == i)[0][0]], label="{l}".format(l=pixels[int(np.where(values_indexes == i)[0][0])])) for i in values]
|
|
||||||
plt.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0, fontsize=60)
|
|
||||||
plt.savefig(os.path.join(self.dir_of_all, self.image_filename_stem + "_textline_and_page.png"))
|
|
||||||
|
|
||||||
def save_deskewed_image(self, slope_deskew):
|
|
||||||
img_rotated = rotyate_image_different(self.image_org, slope_deskew)
|
|
||||||
|
|
||||||
if self.dir_of_all is not None:
|
|
||||||
cv2.imwrite(os.path.join(self.dir_of_all, self.image_filename_stem + "_org.png"), self.image_org)
|
|
||||||
|
|
||||||
cv2.imwrite(os.path.join(self.dir_of_deskewed, self.image_filename_stem + "_deskewed.png"), img_rotated)
|
|
||||||
del img_rotated
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
is_image_enhanced = False
|
is_image_enhanced = False
|
||||||
# get image and sclaes, then extract the page of scanned image
|
# get image and sclaes, then extract the page of scanned image
|
||||||
|
@ -2243,8 +2154,8 @@ class eynollah:
|
||||||
|
|
||||||
image_page, page_coord = self.extract_page()
|
image_page, page_coord = self.extract_page()
|
||||||
# print(image_page.shape,'page')
|
# print(image_page.shape,'page')
|
||||||
if self.dir_of_all is not None:
|
if self.plotter:
|
||||||
cv2.imwrite(os.path.join(self.dir_of_all, self.image_filename_stem + "_page.png"), image_page)
|
self.plotter.save_page_image(image_page)
|
||||||
K.clear_session()
|
K.clear_session()
|
||||||
gc.collect()
|
gc.collect()
|
||||||
|
|
||||||
|
@ -2298,8 +2209,8 @@ class eynollah:
|
||||||
K.clear_session()
|
K.clear_session()
|
||||||
gc.collect()
|
gc.collect()
|
||||||
#print(np.unique(textline_mask_tot_ea[:, :]), "textline")
|
#print(np.unique(textline_mask_tot_ea[:, :]), "textline")
|
||||||
if self.dir_of_all is not None:
|
if self.plotter:
|
||||||
self.save_plot_of_textlines(textline_mask_tot_ea, image_page)
|
self.plotter.save_plot_of_textlines(textline_mask_tot_ea, image_page)
|
||||||
print("textline: " + str(time.time() - t1))
|
print("textline: " + str(time.time() - t1))
|
||||||
# plt.imshow(textline_mask_tot_ea)
|
# plt.imshow(textline_mask_tot_ea)
|
||||||
# plt.show()
|
# plt.show()
|
||||||
|
@ -2307,11 +2218,11 @@ class eynollah:
|
||||||
|
|
||||||
sigma = 2
|
sigma = 2
|
||||||
main_page_deskew = True
|
main_page_deskew = True
|
||||||
slope_deskew = return_deskew_slop(cv2.erode(textline_mask_tot_ea, self.kernel, iterations=2), sigma, main_page_deskew, dir_of_all=self.dir_of_all, image_filename_stem=self.image_filename_stem)
|
slope_deskew = return_deskew_slop(cv2.erode(textline_mask_tot_ea, self.kernel, iterations=2), sigma, main_page_deskew, plotter=self.plotter)
|
||||||
slope_first = 0 # return_deskew_slop(cv2.erode(textline_mask_tot_ea, self.kernel, iterations=2),sigma, dir_of_all=self.dir_of_all, image_filename_stem=self.image_filename_stem)
|
slope_first = 0 # return_deskew_slop(cv2.erode(textline_mask_tot_ea, self.kernel, iterations=2),sigma, plotter=self.plotter)
|
||||||
|
|
||||||
if self.dir_of_deskewed is not None:
|
if self.plotter:
|
||||||
self.save_deskewed_image(slope_deskew)
|
self.plotter.save_deskewed_image(slope_deskew)
|
||||||
# img_rotated=rotyate_image_different(self.image_org,slope_deskew)
|
# img_rotated=rotyate_image_different(self.image_org,slope_deskew)
|
||||||
print(slope_deskew, "slope_deskew")
|
print(slope_deskew, "slope_deskew")
|
||||||
|
|
||||||
|
@ -2344,10 +2255,9 @@ class eynollah:
|
||||||
# plt.imshow(text_regions_p)
|
# plt.imshow(text_regions_p)
|
||||||
# plt.show()
|
# plt.show()
|
||||||
|
|
||||||
if self.dir_of_all is not None:
|
if self.plotter:
|
||||||
self.save_plot_of_layout_main_all(text_regions_p, image_page)
|
self.plotter.save_plot_of_layout_main_all(text_regions_p, image_page)
|
||||||
if self.dir_of_layout is not None:
|
self.plotter.save_plot_of_layout_main(text_regions_p, image_page)
|
||||||
self.save_plot_of_layout_main(text_regions_p, image_page)
|
|
||||||
|
|
||||||
print("marginals: " + str(time.time() - t1))
|
print("marginals: " + str(time.time() - t1))
|
||||||
|
|
||||||
|
@ -2632,10 +2542,9 @@ class eynollah:
|
||||||
contours_only_text_parent_d_ordered = None
|
contours_only_text_parent_d_ordered = None
|
||||||
text_regions_p, contours_only_text_parent, contours_only_text_parent_h, all_box_coord, all_box_coord_h, all_found_texline_polygons, all_found_texline_polygons_h, slopes, slopes_h, contours_only_text_parent_d_ordered, contours_only_text_parent_h_d_ordered = check_any_text_region_in_model_one_is_main_or_header(text_regions_p, regions_fully, contours_only_text_parent, all_box_coord, all_found_texline_polygons, slopes, contours_only_text_parent_d_ordered)
|
text_regions_p, contours_only_text_parent, contours_only_text_parent_h, all_box_coord, all_box_coord_h, all_found_texline_polygons, all_found_texline_polygons_h, slopes, slopes_h, contours_only_text_parent_d_ordered, contours_only_text_parent_h_d_ordered = check_any_text_region_in_model_one_is_main_or_header(text_regions_p, regions_fully, contours_only_text_parent, all_box_coord, all_found_texline_polygons, slopes, contours_only_text_parent_d_ordered)
|
||||||
|
|
||||||
if self.dir_of_layout is not None:
|
if self.plotter:
|
||||||
self.save_plot_of_layout(text_regions_p, image_page)
|
self.plotter.save_plot_of_layout(text_regions_p, image_page)
|
||||||
if self.dir_of_all is not None:
|
self.plotter.save_plot_of_layout_all(text_regions_p, image_page)
|
||||||
self.save_plot_of_layout_all(text_regions_p, image_page)
|
|
||||||
|
|
||||||
K.clear_session()
|
K.clear_session()
|
||||||
gc.collect()
|
gc.collect()
|
||||||
|
@ -2696,8 +2605,8 @@ class eynollah:
|
||||||
boxes_d = return_boxes_of_images_by_order_of_reading_new(spliter_y_new_d, regions_without_seperators_d, matrix_of_lines_ch_d, num_col_classifier)
|
boxes_d = return_boxes_of_images_by_order_of_reading_new(spliter_y_new_d, regions_without_seperators_d, matrix_of_lines_ch_d, num_col_classifier)
|
||||||
|
|
||||||
# print(slopes)
|
# print(slopes)
|
||||||
if self.dir_of_cropped_images is not None:
|
if self.plotter:
|
||||||
self.write_images_into_directory(polygons_of_images, self.dir_of_cropped_images, image_page)
|
self.plotter.write_images_into_directory(polygons_of_images, image_page)
|
||||||
|
|
||||||
if self.full_layout:
|
if self.full_layout:
|
||||||
if np.abs(slope_deskew) < SLOPE_THRESHOLD:
|
if np.abs(slope_deskew) < SLOPE_THRESHOLD:
|
||||||
|
|
159
sbb_newspapers_org_image/plot.py
Normal file
159
sbb_newspapers_org_image/plot.py
Normal file
|
@ -0,0 +1,159 @@
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import matplotlib.patches as mpatches
|
||||||
|
import numpy as np
|
||||||
|
import os.path
|
||||||
|
import cv2
|
||||||
|
from scipy.ndimage import gaussian_filter1d
|
||||||
|
|
||||||
|
from .utils import crop_image_inside_box
|
||||||
|
from .utils.rotate import rotyate_image_different
|
||||||
|
from .utils.resize import resize_image
|
||||||
|
|
||||||
|
class EynollahPlotter():
|
||||||
|
"""
|
||||||
|
Class collecting all the plotting and image writing methods
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
*,
|
||||||
|
dir_of_all,
|
||||||
|
dir_of_deskewed,
|
||||||
|
dir_of_layout,
|
||||||
|
dir_of_cropped_images,
|
||||||
|
image_filename,
|
||||||
|
image_filename_stem,
|
||||||
|
image_org=None,
|
||||||
|
scale_x=1,
|
||||||
|
scale_y=1,
|
||||||
|
):
|
||||||
|
self.dir_of_all = dir_of_all
|
||||||
|
self.dir_of_layout = dir_of_layout
|
||||||
|
self.dir_of_cropped_images = dir_of_cropped_images
|
||||||
|
self.dir_of_deskewed = dir_of_deskewed
|
||||||
|
self.image_filename = image_filename
|
||||||
|
self.image_filename_stem = image_filename_stem
|
||||||
|
# XXX TODO hacky these cannot be set at init time
|
||||||
|
self.image_org = image_org
|
||||||
|
self.scale_x = scale_x
|
||||||
|
self.scale_y = scale_y
|
||||||
|
|
||||||
|
def save_plot_of_layout_main(self, text_regions_p, image_page):
|
||||||
|
values = np.unique(text_regions_p[:, :])
|
||||||
|
# pixels=['Background' , 'Main text' , 'Heading' , 'Marginalia' ,'Drop capitals' , 'Images' , 'Seperators' , 'Tables', 'Graphics']
|
||||||
|
pixels=['Background' , 'Main text' , 'Image' , 'Separator','Marginalia']
|
||||||
|
values_indexes = [0, 1, 2, 3, 4]
|
||||||
|
plt.figure(figsize=(40, 40))
|
||||||
|
plt.rcParams["font.size"] = "40"
|
||||||
|
im = plt.imshow(text_regions_p[:, :])
|
||||||
|
colors = [im.cmap(im.norm(value)) for value in values]
|
||||||
|
patches = [mpatches.Patch(color=colors[np.where(values == i)[0][0]], label="{l}".format(l=pixels[int(np.where(values_indexes == i)[0][0])])) for i in values]
|
||||||
|
plt.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0, fontsize=40)
|
||||||
|
plt.savefig(os.path.join(self.dir_of_layout, self.image_filename_stem + "_layout_main.png"))
|
||||||
|
|
||||||
|
def save_plot_of_layout_main_all(self, text_regions_p, image_page):
|
||||||
|
values = np.unique(text_regions_p[:, :])
|
||||||
|
# pixels=['Background' , 'Main text' , 'Heading' , 'Marginalia' ,'Drop capitals' , 'Images' , 'Seperators' , 'Tables', 'Graphics']
|
||||||
|
pixels=['Background' , 'Main text' , 'Image' , 'Separator','Marginalia']
|
||||||
|
values_indexes = [0, 1, 2, 3, 4]
|
||||||
|
plt.figure(figsize=(80, 40))
|
||||||
|
plt.rcParams["font.size"] = "40"
|
||||||
|
plt.subplot(1, 2, 1)
|
||||||
|
plt.imshow(image_page)
|
||||||
|
plt.subplot(1, 2, 2)
|
||||||
|
im = plt.imshow(text_regions_p[:, :])
|
||||||
|
colors = [im.cmap(im.norm(value)) for value in values]
|
||||||
|
patches = [mpatches.Patch(color=colors[np.where(values == i)[0][0]], label="{l}".format(l=pixels[int(np.where(values_indexes == i)[0][0])])) for i in values]
|
||||||
|
plt.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0, fontsize=60)
|
||||||
|
plt.savefig(os.path.join(self.dir_of_all, self.image_filename_stem + "_layout_main_and_page.png"))
|
||||||
|
|
||||||
|
def save_plot_of_layout(self, text_regions_p, image_page):
|
||||||
|
values = np.unique(text_regions_p[:, :])
|
||||||
|
# pixels=['Background' , 'Main text' , 'Heading' , 'Marginalia' ,'Drop capitals' , 'Images' , 'Seperators' , 'Tables', 'Graphics']
|
||||||
|
pixels = ["Background", "Main text", "Header", "Marginalia", "Drop capital", "Image", "Separator"]
|
||||||
|
values_indexes = [0, 1, 2, 8, 4, 5, 6]
|
||||||
|
plt.figure(figsize=(40, 40))
|
||||||
|
plt.rcParams["font.size"] = "40"
|
||||||
|
im = plt.imshow(text_regions_p[:, :])
|
||||||
|
colors = [im.cmap(im.norm(value)) for value in values]
|
||||||
|
patches = [mpatches.Patch(color=colors[np.where(values == i)[0][0]], label="{l}".format(l=pixels[int(np.where(values_indexes == i)[0][0])])) for i in values]
|
||||||
|
plt.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0, fontsize=40)
|
||||||
|
plt.savefig(os.path.join(self.dir_of_layout, self.image_filename_stem + "_layout.png"))
|
||||||
|
|
||||||
|
def save_plot_of_layout_all(self, text_regions_p, image_page):
|
||||||
|
values = np.unique(text_regions_p[:, :])
|
||||||
|
# pixels=['Background' , 'Main text' , 'Heading' , 'Marginalia' ,'Drop capitals' , 'Images' , 'Seperators' , 'Tables', 'Graphics']
|
||||||
|
pixels = ["Background", "Main text", "Header", "Marginalia", "Drop capital", "Image", "Separator"]
|
||||||
|
values_indexes = [0, 1, 2, 8, 4, 5, 6]
|
||||||
|
plt.figure(figsize=(80, 40))
|
||||||
|
plt.rcParams["font.size"] = "40"
|
||||||
|
plt.subplot(1, 2, 1)
|
||||||
|
plt.imshow(image_page)
|
||||||
|
plt.subplot(1, 2, 2)
|
||||||
|
im = plt.imshow(text_regions_p[:, :])
|
||||||
|
colors = [im.cmap(im.norm(value)) for value in values]
|
||||||
|
patches = [mpatches.Patch(color=colors[np.where(values == i)[0][0]], label="{l}".format(l=pixels[int(np.where(values_indexes == i)[0][0])])) for i in values]
|
||||||
|
plt.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0, fontsize=60)
|
||||||
|
plt.savefig(os.path.join(self.dir_of_all, self.image_filename_stem + "_layout_and_page.png"))
|
||||||
|
|
||||||
|
def save_plot_of_textlines(self, textline_mask_tot_ea, image_page):
|
||||||
|
values = np.unique(textline_mask_tot_ea[:, :])
|
||||||
|
pixels = ["Background", "Textlines"]
|
||||||
|
values_indexes = [0, 1]
|
||||||
|
plt.figure(figsize=(80, 40))
|
||||||
|
plt.rcParams["font.size"] = "40"
|
||||||
|
plt.subplot(1, 2, 1)
|
||||||
|
plt.imshow(image_page)
|
||||||
|
plt.subplot(1, 2, 2)
|
||||||
|
im = plt.imshow(textline_mask_tot_ea[:, :])
|
||||||
|
colors = [im.cmap(im.norm(value)) for value in values]
|
||||||
|
patches = [mpatches.Patch(color=colors[np.where(values == i)[0][0]], label="{l}".format(l=pixels[int(np.where(values_indexes == i)[0][0])])) for i in values]
|
||||||
|
plt.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0, fontsize=60)
|
||||||
|
plt.savefig(os.path.join(self.dir_of_all, self.image_filename_stem + "_textline_and_page.png"))
|
||||||
|
|
||||||
|
def save_deskewed_image(self, slope_deskew):
|
||||||
|
if self.dir_of_all is not None:
|
||||||
|
img_rotated = rotyate_image_different(self.image_org, slope_deskew)
|
||||||
|
cv2.imwrite(os.path.join(self.dir_of_all, self.image_filename_stem + "_org.png"), self.image_org)
|
||||||
|
cv2.imwrite(os.path.join(self.dir_of_deskewed, self.image_filename_stem + "_deskewed.png"), img_rotated)
|
||||||
|
|
||||||
|
def save_page_image(self, image_page):
|
||||||
|
cv2.imwrite(os.path.join(self.dir_of_all, self.image_filename_stem + "_page.png"), image_page)
|
||||||
|
|
||||||
|
def save_plot_of_textline_density(self, img_patch_org):
|
||||||
|
plt.figure(figsize=(80,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(self.dir_of_all, self.image_filename_stem+'_density_of_textline.png'))
|
||||||
|
|
||||||
|
def save_plot_of_rotation_angle(self, angels, var_res):
|
||||||
|
#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.image_filename_stem+'_rotation_angle.png'))
|
||||||
|
|
||||||
|
def write_images_into_directory(self, img_contoures, image_page):
|
||||||
|
index = 0
|
||||||
|
for cont_ind in img_contoures:
|
||||||
|
x, y, w, h = cv2.boundingRect(cont_ind)
|
||||||
|
box = [x, y, w, h]
|
||||||
|
croped_page, page_coord = crop_image_inside_box(box, image_page)
|
||||||
|
|
||||||
|
croped_page = resize_image(croped_page, int(croped_page.shape[0] / self.scale_y), int(croped_page.shape[1] / self.scale_x))
|
||||||
|
|
||||||
|
path = os.path.join(self.dir_of_cropped_images, self.image_filename_stem + "_" + str(index) + ".jpg")
|
||||||
|
cv2.imwrite(path, croped_page)
|
||||||
|
index += 1
|
||||||
|
|
|
@ -373,107 +373,8 @@ def boosting_headers_by_longshot_region_segmentation(textregion_pre_p, textregio
|
||||||
|
|
||||||
def find_num_col_deskew(regions_without_seperators, sigma_, multiplier=3.8):
|
def find_num_col_deskew(regions_without_seperators, sigma_, multiplier=3.8):
|
||||||
regions_without_seperators_0 = regions_without_seperators[:,:].sum(axis=1)
|
regions_without_seperators_0 = regions_without_seperators[:,:].sum(axis=1)
|
||||||
|
z = gaussian_filter1d(regions_without_seperators_0, sigma_)
|
||||||
##meda_n_updown=regions_without_seperators_0[len(regions_without_seperators_0)::-1]
|
return np.std(z)
|
||||||
|
|
||||||
##first_nonzero=(next((i for i, x in enumerate(regions_without_seperators_0) if x), 0))
|
|
||||||
##last_nonzero=(next((i for i, x in enumerate(meda_n_updown) if x), 0))
|
|
||||||
|
|
||||||
##last_nonzero=len(regions_without_seperators_0)-last_nonzero
|
|
||||||
|
|
||||||
|
|
||||||
y=regions_without_seperators_0#[first_nonzero:last_nonzero]
|
|
||||||
|
|
||||||
##y_help=np.zeros(len(y)+20)
|
|
||||||
|
|
||||||
##y_help[10:len(y)+10]=y
|
|
||||||
|
|
||||||
##x=np.array( range(len(y)) )
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##zneg_rev=-y_help+np.max(y_help)
|
|
||||||
|
|
||||||
##zneg=np.zeros(len(zneg_rev)+20)
|
|
||||||
|
|
||||||
##zneg[10:len(zneg_rev)+10]=zneg_rev
|
|
||||||
|
|
||||||
z=gaussian_filter1d(y, sigma_)
|
|
||||||
###zneg= gaussian_filter1d(zneg, sigma_)
|
|
||||||
|
|
||||||
|
|
||||||
###peaks_neg, _ = find_peaks(zneg, height=0)
|
|
||||||
###peaks, _ = find_peaks(z, height=0)
|
|
||||||
|
|
||||||
###peaks_neg=peaks_neg-10-10
|
|
||||||
|
|
||||||
####print(np.std(z),'np.std(z)np.std(z)np.std(z)')
|
|
||||||
|
|
||||||
#####plt.plot(z)
|
|
||||||
#####plt.show()
|
|
||||||
|
|
||||||
#####plt.imshow(regions_without_seperators)
|
|
||||||
#####plt.show()
|
|
||||||
###"""
|
|
||||||
###last_nonzero=last_nonzero-0#100
|
|
||||||
###first_nonzero=first_nonzero+0#+100
|
|
||||||
|
|
||||||
###peaks_neg=peaks_neg[(peaks_neg>first_nonzero) & (peaks_neg<last_nonzero)]
|
|
||||||
|
|
||||||
###peaks=peaks[(peaks>.06*regions_without_seperators.shape[1]) & (peaks<0.94*regions_without_seperators.shape[1])]
|
|
||||||
###"""
|
|
||||||
###interest_pos=z[peaks]
|
|
||||||
|
|
||||||
###interest_pos=interest_pos[interest_pos>10]
|
|
||||||
|
|
||||||
###interest_neg=z[peaks_neg]
|
|
||||||
|
|
||||||
###min_peaks_pos=np.mean(interest_pos)
|
|
||||||
###min_peaks_neg=0#np.min(interest_neg)
|
|
||||||
|
|
||||||
###dis_talaei=(min_peaks_pos-min_peaks_neg)/multiplier
|
|
||||||
####print(interest_pos)
|
|
||||||
###grenze=min_peaks_pos-dis_talaei#np.mean(y[peaks_neg[0]:peaks_neg[len(peaks_neg)-1]])-np.std(y[peaks_neg[0]:peaks_neg[len(peaks_neg)-1]])/2.0
|
|
||||||
|
|
||||||
###interest_neg_fin=interest_neg[(interest_neg<grenze)]
|
|
||||||
###peaks_neg_fin=peaks_neg[(interest_neg<grenze)]
|
|
||||||
###interest_neg_fin=interest_neg[(interest_neg<grenze)]
|
|
||||||
|
|
||||||
###"""
|
|
||||||
###if interest_neg[0]<0.1:
|
|
||||||
###interest_neg=interest_neg[1:]
|
|
||||||
###if interest_neg[len(interest_neg)-1]<0.1:
|
|
||||||
###interest_neg=interest_neg[:len(interest_neg)-1]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###min_peaks_pos=np.min(interest_pos)
|
|
||||||
###min_peaks_neg=0#np.min(interest_neg)
|
|
||||||
|
|
||||||
|
|
||||||
###dis_talaei=(min_peaks_pos-min_peaks_neg)/multiplier
|
|
||||||
###grenze=min_peaks_pos-dis_talaei#np.mean(y[peaks_neg[0]:peaks_neg[len(peaks_neg)-1]])-np.std(y[peaks_neg[0]:peaks_neg[len(peaks_neg)-1]])/2.0
|
|
||||||
###"""
|
|
||||||
####interest_neg_fin=interest_neg#[(interest_neg<grenze)]
|
|
||||||
####peaks_neg_fin=peaks_neg#[(interest_neg<grenze)]
|
|
||||||
####interest_neg_fin=interest_neg#[(interest_neg<grenze)]
|
|
||||||
|
|
||||||
###num_col=(len(interest_neg_fin))+1
|
|
||||||
|
|
||||||
|
|
||||||
###p_l=0
|
|
||||||
###p_u=len(y)-1
|
|
||||||
###p_m=int(len(y)/2.)
|
|
||||||
###p_g_l=int(len(y)/3.)
|
|
||||||
###p_g_u=len(y)-int(len(y)/3.)
|
|
||||||
|
|
||||||
|
|
||||||
###diff_peaks=np.abs( np.diff(peaks_neg_fin) )
|
|
||||||
###diff_peaks_annormal=diff_peaks[diff_peaks<30]
|
|
||||||
|
|
||||||
#print(len(interest_neg_fin),np.mean(interest_neg_fin))
|
|
||||||
return np.std(z)#interest_neg_fin,np.std(z)
|
|
||||||
|
|
||||||
def return_hor_spliter_by_index_for_without_verticals(peaks_neg_fin_t, x_min_hor_some, x_max_hor_some):
|
def return_hor_spliter_by_index_for_without_verticals(peaks_neg_fin_t, x_min_hor_some, x_max_hor_some):
|
||||||
# print(peaks_neg_fin_t,x_min_hor_some,x_max_hor_some)
|
# print(peaks_neg_fin_t,x_min_hor_some,x_max_hor_some)
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import cv2
|
import cv2
|
||||||
from scipy.signal import find_peaks
|
from scipy.signal import find_peaks
|
||||||
|
@ -1485,7 +1484,7 @@ def textline_contours_postprocessing(textline_mask, slope, contour_text_interest
|
||||||
|
|
||||||
return contours_rotated_clean
|
return contours_rotated_clean
|
||||||
|
|
||||||
def seperate_lines_new2(img_path, thetha, num_col, slope_region, dir_of_all, image_filename_stem):
|
def seperate_lines_new2(img_path, thetha, num_col, slope_region, plotter=None):
|
||||||
|
|
||||||
if num_col == 1:
|
if num_col == 1:
|
||||||
num_patches = int(img_path.shape[1] / 200.0)
|
num_patches = int(img_path.shape[1] / 200.0)
|
||||||
|
@ -1536,7 +1535,7 @@ def seperate_lines_new2(img_path, thetha, num_col, slope_region, dir_of_all, ima
|
||||||
|
|
||||||
sigma = 2
|
sigma = 2
|
||||||
try:
|
try:
|
||||||
slope_xline = return_deskew_slop(img_xline, sigma, dir_of_all=dir_of_all, image_filename_stem=image_filename_stem)
|
slope_xline = return_deskew_slop(img_xline, sigma, plotter=plotter)
|
||||||
except:
|
except:
|
||||||
slope_xline = 0
|
slope_xline = 0
|
||||||
|
|
||||||
|
@ -1593,29 +1592,10 @@ def seperate_lines_new2(img_path, thetha, num_col, slope_region, dir_of_all, ima
|
||||||
# plt.show()
|
# plt.show()
|
||||||
return img_patch_ineterst_revised
|
return img_patch_ineterst_revised
|
||||||
|
|
||||||
def return_deskew_slop(img_patch_org, sigma_des, main_page=False, dir_of_all=None, image_filename_stem=None):
|
def return_deskew_slop(img_patch_org, sigma_des, main_page=False, plotter=None):
|
||||||
|
|
||||||
|
if main_page and plotter:
|
||||||
if main_page and dir_of_all is not None:
|
plotter.save_plot_of_textline_density(img_patch_org)
|
||||||
|
|
||||||
|
|
||||||
plt.figure(figsize=(80,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, image_filename_stem+'_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=np.zeros((img_patch_org.shape[0],img_patch_org.shape[1]))
|
||||||
img_int[:,:]=img_patch_org[:,:]#img_patch_org[:,:,0]
|
img_int[:,:]=img_patch_org[:,:]#img_patch_org[:,:,0]
|
||||||
|
@ -1713,17 +1693,8 @@ def return_deskew_slop(img_patch_org, sigma_des, main_page=False, dir_of_all=Non
|
||||||
var_res.append(var_spectrum)
|
var_res.append(var_spectrum)
|
||||||
|
|
||||||
|
|
||||||
if dir_of_all is not None:
|
if plotter:
|
||||||
#print('galdi?')
|
plotter.save_plot_of_rotation_angle(angels, var_res)
|
||||||
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(dir_of_all,image_filename_stem+'_rotation_angle.png'))
|
|
||||||
try:
|
try:
|
||||||
var_res=np.array(var_res)
|
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]
|
ang_int=angels[np.argmax(var_res)]#angels_sorted[arg_final]#angels[arg_sort_early[arg_sort[arg_final]]]#angels[arg_fin]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue