outfactor calculate_width_height_by_columns

pull/19/head
Konstantin Baierer 4 years ago
parent fd0ea5e0a4
commit 7905b3b9d2

@ -273,41 +273,7 @@ class eynollah:
dpi = os.popen('identify -format "%x " ' + self.image_filename).read() dpi = os.popen('identify -format "%x " ' + self.image_filename).read()
return int(float(dpi)) return int(float(dpi))
def resize_image_with_column_classifier(self, is_image_enhanced): def calculate_width_height_by_columns(self, img, num_col, width_early):
img = cv2.imread(self.image_filename)
img = img.astype(np.uint8)
_, page_coord = self.early_page_for_num_of_column_classification()
model_num_classifier, session_col_classifier = self.start_new_session_and_model(self.model_dir_of_col_classifier)
img_1ch = cv2.imread(self.image_filename, 0)
width_early = img_1ch.shape[1]
img_1ch = img_1ch[page_coord[0] : page_coord[1], page_coord[2] : page_coord[3]]
# plt.imshow(img_1ch)
# plt.show()
img_1ch = img_1ch / 255.0
img_1ch = cv2.resize(img_1ch, (448, 448), interpolation=cv2.INTER_NEAREST)
img_in = np.zeros((1, img_1ch.shape[0], img_1ch.shape[1], 3))
img_in[0, :, :, 0] = img_1ch[:, :]
img_in[0, :, :, 1] = img_1ch[:, :]
img_in[0, :, :, 2] = img_1ch[:, :]
label_p_pred = model_num_classifier.predict(img_in)
num_col = np.argmax(label_p_pred[0]) + 1
print(num_col, label_p_pred, "num_col_classifier")
session_col_classifier.close()
del model_num_classifier
del session_col_classifier
K.clear_session()
gc.collect()
# sys.exit()
if num_col == 1 and width_early < 1100: if num_col == 1 and width_early < 1100:
img_w_new = 2000 img_w_new = 2000
img_h_new = int(img.shape[0] / float(img.shape[1]) * 2000) img_h_new = int(img.shape[0] / float(img.shape[1]) * 2000)
@ -367,6 +333,45 @@ class eynollah:
img_new = resize_image(img, img_h_new, img_w_new) img_new = resize_image(img, img_h_new, img_w_new)
num_column_is_classified = True num_column_is_classified = True
return img_new, num_column_is_classified
def resize_image_with_column_classifier(self, is_image_enhanced):
img = cv2.imread(self.image_filename)
img = img.astype(np.uint8)
_, page_coord = self.early_page_for_num_of_column_classification()
model_num_classifier, session_col_classifier = self.start_new_session_and_model(self.model_dir_of_col_classifier)
img_1ch = cv2.imread(self.image_filename, 0)
width_early = img_1ch.shape[1]
img_1ch = img_1ch[page_coord[0] : page_coord[1], page_coord[2] : page_coord[3]]
# plt.imshow(img_1ch)
# plt.show()
img_1ch = img_1ch / 255.0
img_1ch = cv2.resize(img_1ch, (448, 448), interpolation=cv2.INTER_NEAREST)
img_in = np.zeros((1, img_1ch.shape[0], img_1ch.shape[1], 3))
img_in[0, :, :, 0] = img_1ch[:, :]
img_in[0, :, :, 1] = img_1ch[:, :]
img_in[0, :, :, 2] = img_1ch[:, :]
label_p_pred = model_num_classifier.predict(img_in)
num_col = np.argmax(label_p_pred[0]) + 1
print(num_col, label_p_pred, "num_col_classifier")
session_col_classifier.close()
del model_num_classifier
del session_col_classifier
K.clear_session()
gc.collect()
# sys.exit()
img_new, num_column_is_classified = self.calculate_width_height_by_columns(img, num_col, width_early)
if img_new.shape[1] > img.shape[1]: if img_new.shape[1] > img.shape[1]:
img_new = self.predict_enhancement(img_new) img_new = self.predict_enhancement(img_new)
is_image_enhanced = True is_image_enhanced = True
@ -423,64 +428,7 @@ class eynollah:
if dpi < 298: if dpi < 298:
# sys.exit() # sys.exit()
if num_col == 1 and width_early < 1100: img_new, num_column_is_classified = self.calculate_width_height_by_columns(img, num_col, width_early)
img_w_new = 2000
img_h_new = int(img.shape[0] / float(img.shape[1]) * 2000)
elif num_col == 1 and width_early >= 2500:
img_w_new = 2000
img_h_new = int(img.shape[0] / float(img.shape[1]) * 2000)
elif num_col == 1 and width_early >= 1100 and width_early < 2500:
img_w_new = width_early
img_h_new = int(img.shape[0] / float(img.shape[1]) * width_early)
elif num_col == 2 and width_early < 2000:
img_w_new = 2400
img_h_new = int(img.shape[0] / float(img.shape[1]) * 2400)
elif num_col == 2 and width_early >= 3500:
img_w_new = 2400
img_h_new = int(img.shape[0] / float(img.shape[1]) * 2400)
elif num_col == 2 and width_early >= 2000 and width_early < 3500:
img_w_new = width_early
img_h_new = int(img.shape[0] / float(img.shape[1]) * width_early)
elif num_col == 3 and width_early < 2000:
img_w_new = 3000
img_h_new = int(img.shape[0] / float(img.shape[1]) * 3000)
elif num_col == 3 and width_early >= 4000:
img_w_new = 3000
img_h_new = int(img.shape[0] / float(img.shape[1]) * 3000)
elif num_col == 3 and width_early >= 2000 and width_early < 4000:
img_w_new = width_early
img_h_new = int(img.shape[0] / float(img.shape[1]) * width_early)
elif num_col == 4 and width_early < 2500:
img_w_new = 4000
img_h_new = int(img.shape[0] / float(img.shape[1]) * 4000)
elif num_col == 4 and width_early >= 5000:
img_w_new = 4000
img_h_new = int(img.shape[0] / float(img.shape[1]) * 4000)
elif num_col == 4 and width_early >= 2500 and width_early < 5000:
img_w_new = width_early
img_h_new = int(img.shape[0] / float(img.shape[1]) * width_early)
elif num_col == 5 and width_early < 3700:
img_w_new = 5000
img_h_new = int(img.shape[0] / float(img.shape[1]) * 5000)
elif num_col == 5 and width_early >= 7000:
img_w_new = 5000
img_h_new = int(img.shape[0] / float(img.shape[1]) * 5000)
elif num_col == 5 and width_early >= 3700 and width_early < 7000:
img_w_new = width_early
img_h_new = int(img.shape[0] / float(img.shape[1]) * width_early)
elif num_col == 6 and width_early < 4500:
img_w_new = 6500 # 5400
img_h_new = int(img.shape[0] / float(img.shape[1]) * 6500)
else:
img_w_new = width_early
img_h_new = int(img.shape[0] / float(img.shape[1]) * width_early)
if label_p_pred[0][int(num_col - 1)] < 0.9 and img_w_new < width_early:
img_new = np.copy(img)
num_column_is_classified = False
else:
img_new = resize_image(img, img_h_new, img_w_new)
num_column_is_classified = True
# img_new=resize_image(img,img_h_new,img_w_new) # img_new=resize_image(img,img_h_new,img_w_new)
image_res = self.predict_enhancement(img_new) image_res = self.predict_enhancement(img_new)
@ -1533,7 +1481,7 @@ class eynollah:
coord_text.set('points', self.calculate_polygon_coords(found_polygons_drop_capitals, mm, lmm, page_coord) coord_text.set('points', self.calculate_polygon_coords(found_polygons_drop_capitals, mm, lmm, page_coord)
texteqreg=ET.SubElement(textregion, 'TextEquiv') texteqreg = ET.SubElement(textregion, 'TextEquiv')
unireg=ET.SubElement(texteqreg, 'Unicode') unireg=ET.SubElement(texteqreg, 'Unicode')
unireg.text = ' ' unireg.text = ' '

Loading…
Cancel
Save