Development of the ocr part of AOI
Samo Penic
2018-11-21 9c222b2a0b151e7219e30f0145aa92872890d838
Fixes in qr code, in sid third algoritm in answer matrix finding locations...
3 files modified
29 ■■■■ changed files
aoiOcr.py 2 ●●● patch | view | raw | blame | history
aoi_ocr/Ocr.py 15 ●●●● patch | view | raw | blame | history
aoi_ocr/sid_process.py 12 ●●●● patch | view | raw | blame | history
aoiOcr.py
@@ -6,7 +6,7 @@
from glob import glob
settings = {"sid_mask": "64xx0xxx", "answer_threshold": 0.25}
settings = {"sid_mask": "11x0xxxx", "answer_threshold": 0.25}
classifier = joblib.load(filepath)
#p = Paper(filename="testpage300dpi_scan1.png")
aoi_ocr/Ocr.py
@@ -99,7 +99,8 @@
        # todo, make better tresholding
    def imgTreshold(self):
        (self.thresh, self.bwimg) = cv2.threshold(
            self.img, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU
            self.img, 128, 255,
            cv2.THRESH_BINARY | cv2.THRESH_OTSU
        )
    def getSkewAngle(self):
@@ -242,7 +243,7 @@
        es, err, warn = getSID(
            self.img[
                int(0.04 * self.imgHeight) : int(0.095 * self.imgHeight),
                int(0.7 * self.imgWidth) : int(0.99 * self.imgWidth),
                int(0.65 * self.imgWidth) : int(0.95 * self.imgWidth),
            ],
            self.sid_classifier,
            sid_mask,
@@ -275,7 +276,7 @@
            data = qrdata.split(",")
            retval = {
                "exam_id": int(data[1]),
                "page_no": int(data[3])+1,
                "page_no": int(data[3]),
                "paper_id": int(data[2]),
                "faculty_id": int(data[0]),
                "sid": None
@@ -291,17 +292,17 @@
        data["errors"] = self.errors
        data["warnings"] = self.warnings
        data["up_position"] = (
            list(self.xMarkerLocations[1] / self.imgWidth),
            list(self.yMarkerLocations[1] / self.imgHeight),
            list(self.xMarkerLocations[0] / self.imgWidth),
            list(self.xMarkerLocations[1] / self.imgHeight),
        )
        data["right_position"] = (
            list(self.xMarkerLocations[1] / self.imgWidth),
            list(self.yMarkerLocations[0] / self.imgWidth),
            list(self.yMarkerLocations[1] / self.imgHeight),
        )
        data["ans_matrix"] = (
            (np.array(self.answerMatrix) > self.settings["answer_threshold"]) * 1
        ).tolist()
        if data["sid"] is None and data["page_no"] == 2:
        if data["sid"] is None and data["page_no"] == 1:
            data["sid"] = self.get_enhanced_sid()
        output_filename=os.path.join(self.output_path, '.'.join(self.filename.split('/')[-1].split('.')[:-1])+".png")
        cv2.imwrite(output_filename, self.img)
aoi_ocr/sid_process.py
@@ -17,14 +17,14 @@
def find_biggest_blob(image, original_image,sid_mask):
    if sid_mask[0] == "1":
        move_left = 45
        move_left = 35
    elif sid_mask[0] == "x":
        move_left = 55
        move_left = 40
    else:
        move_left = 0
       # Remove noise
    image2 = cv2.morphologyEx(
        original_image, cv2.MORPH_OPEN, kernel(2, 2), iterations=7
        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)
@@ -186,14 +186,14 @@
    sid_err = []
    image = 255 - image
    image_original = image.copy()
    image = img_as_ubyte(image > 100)
    image = img_as_ubyte(image > 70)
    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(2, 2), iterations=3)
    # Closing. Connect non connected parts
    image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel(5, 3), iterations=4)
    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)