From 93d924e090664ca7e88f0f166a7e334e0945746d Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@gmail.com> Date: Sat, 01 Dec 2018 18:21:27 +0000 Subject: [PATCH] Did less noise removal. --- aoi_ocr/sid_process.py | 36 +++++++++++++++++++----------------- 1 files changed, 19 insertions(+), 17 deletions(-) diff --git a/aoi_ocr/sid_process.py b/aoi_ocr/sid_process.py index d8798f1..93fbd89 100644 --- a/aoi_ocr/sid_process.py +++ b/aoi_ocr/sid_process.py @@ -4,7 +4,7 @@ import pkg_resources -templatefile = '/template-8.png' # always use slash +templatefile = "/template-8.png" # always use slash template8 = pkg_resources.resource_filename(__name__, templatefile) @@ -15,19 +15,19 @@ return np.ones((x, y), np.uint8) -def find_biggest_blob(image, original_image,sid_mask): +def find_biggest_blob(image, original_image, sid_mask): if sid_mask[0] == "1": - move_left = 35 + move_left = 45 elif sid_mask[0] == "x": - move_left = 40 + move_left = 50 else: move_left = 0 - # Remove noise + # Remove noise image2 = cv2.morphologyEx( original_image, cv2.MORPH_OPEN, kernel(2, 2), iterations=3 ) # find biggest block of pixels - image1 = cv2.morphologyEx(image2, cv2.MORPH_DILATE, kernel(5, 25), iterations=4) + image1 = cv2.morphologyEx(image, cv2.MORPH_DILATE, kernel(5, 25), iterations=3) image1 = img_as_ubyte(image1 > 50) cv2.imwrite("/tmp/sidblock1.png", image1) im2, ctrs, hier = cv2.findContours( @@ -37,8 +37,9 @@ ctrs, key=lambda ctr: cv2.contourArea(ctr) ) # get bigges contour x, y, w, h = cv2.boundingRect(sorted_ctrs[-1]) - image = image[y : y + h, x + 25 - move_left : x + w - 40] # +25,-25 + image = image[y : y + h, x + 25 - move_left : x + w - 30] # +25,-25 return image + def sid_compare(sid_no, sid_mask): """ @@ -53,7 +54,7 @@ return True -def segment_by_contours(image, original_image, classifier,sid_mask): +def segment_by_contours(image, original_image, classifier, sid_mask): """ First algorithm. it segments numerals with contours. It works with numbers where individual numerals does not touch. :param image: @@ -63,8 +64,8 @@ """ sid_no = "" - image=find_biggest_blob(image,original_image,sid_mask) - cv2.imwrite("/tmp/sid_contour1.png",image) + image = find_biggest_blob(image, original_image, sid_mask) + cv2.imwrite("/tmp/sid_contour1.png", image) im2, ctrs, hier = cv2.findContours( image.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE ) @@ -74,7 +75,7 @@ # Get bounding box x, y, w, h = cv2.boundingRect(ctr) # Getting ROI - if w < h / 2: + if w < h / 3: sid_no = sid_no + "1" continue roi = image[y : y + h, x : x + w] @@ -100,7 +101,7 @@ """ sid_no = "" sid_len = len(sid_mask) - image=find_biggest_blob(image,original_image,sid_mask) + image = find_biggest_blob(image, original_image, sid_mask) cv2.imwrite("/tmp/sidblock2.png", image) imgHeight, imgWidth = image.shape[0:2] numWidth = int(imgWidth / (sid_len)) @@ -190,23 +191,24 @@ cv2.imwrite("/tmp/enSID0.png", image) # Remove noise - #image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel(2, 2), iterations=3) + image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel(3, 3), iterations=2) # Closing. Connect non connected parts image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel(5, 1), iterations=4) # Again noise removal after closing - # image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel(8, 8), iterations=1) + #image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel(8, 8), iterations=1) # don't do too much noise removal. - image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel(3, 3), iterations=1) + #image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel(3, 3), iterations=2) # Skeletonization + #image = img_as_ubyte(morphology.skeletonize(image > 128)) image = img_as_ubyte(morphology.thin(image > 128)) cv2.imwrite("/tmp/enSID1.png", image) # Stub removal (might not be necessary if thinning instead of skeletonize is used above # Making lines stronger - image = cv2.morphologyEx(image, cv2.MORPH_DILATE, kernel(5, 5), iterations=1) + image = cv2.morphologyEx(image, cv2.MORPH_DILATE, kernel(5, 2), iterations=1) image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel(10, 10)) # Thining again @@ -226,5 +228,5 @@ if not sid_compare(sid_no, sid_mask): sid_err = ["Wrong SID!"] - + cv2.imwrite("/tmp/SID_"+sid_no+".png", image) return sid_no, sid_err, sid_warn -- Gitblit v1.9.3