Development of the ocr part of AOI
Samo Penic
2018-11-21 5460bf601a854c842342a740df0f6d36ad785bbc
Some extra editing
5 files modified
99 ■■■■■ changed files
.idea/sonarIssues.xml 35 ●●●●● patch | view | raw | blame | history
aoiOcr.py 47 ●●●● patch | view | raw | blame | history
aoi_ocr/__pycache__/Ocr.cpython-36.pyc patch | view | raw | blame | history
aoi_ocr/__pycache__/sid_process.cpython-36.pyc patch | view | raw | blame | history
aoi_ocr/sid_process.py 17 ●●●● patch | view | raw | blame | history
.idea/sonarIssues.xml
@@ -18,7 +18,32 @@
            <set />
          </value>
        </entry>
        <entry key="$USER_HOME$/PycharmProjects/berki-parse/aoi_gen/Problem.py">
          <value>
            <set />
          </value>
        </entry>
        <entry key="$USER_HOME$/PycharmProjects/berki-parse/aoi_gen/Variable.py">
          <value>
            <set />
          </value>
        </entry>
        <entry key="$USER_HOME$/PycharmProjects/berki-parse/testcases/dvovod3.txt">
          <value>
            <set />
          </value>
        </entry>
        <entry key="$USER_HOME$/PycharmProjects/berki-parse/testcases/silaCurka1.txt">
          <value>
            <set />
          </value>
        </entry>
        <entry key="$PROJECT_DIR$/../../django/sizif-web/aoi/MainDocker/Dockerfile">
          <value>
            <set />
          </value>
        </entry>
        <entry key="$PROJECT_DIR$/../../django/sizif-web/aoi/README.md">
          <value>
            <set />
          </value>
@@ -38,6 +63,16 @@
            <set />
          </value>
        </entry>
        <entry key="$PROJECT_DIR$/../../django/sizif-web/aoi/exam/templates/exam/exam_detail.html">
          <value>
            <set />
          </value>
        </entry>
        <entry key="$PROJECT_DIR$/../../django/sizif-web/aoi/exam/templates/exam/exam_new.html">
          <value>
            <set />
          </value>
        </entry>
        <entry key="$PROJECT_DIR$/../../django/sizif-web/aoi/exam/templates/exam/postprocess.html">
          <value>
            <set />
aoiOcr.py
@@ -1,19 +1,20 @@
from aoi_ocr.Ocr import Paper
from sklearn.externals import joblib
import pkg_resources
path = '/filename.joblib'  # always use slash
filepath = pkg_resources.resource_filename('aoi_ocr', path)
path = "/filename.joblib"  # always use slash
filepath = pkg_resources.resource_filename("aoi_ocr", path)
from glob import glob
settings = {"sid_mask": "11x0xxxx", "answer_threshold": 0.25}
classifier = joblib.load(filepath)
#p = Paper(filename="testpage300dpi_scan1.png")
#p=Paper(filename='sizif111.tif', sid_classifier=classifier, settings={"sid_mask": "11xx0xxx", "answer_threshold": 0.25})
#p=Paper(filename='processed_scans/20141016095134535_0006.tif', sid_classifier=classifier, settings=settings)
#p = Paper(filename="processed_scans/20151111080408825_0001.tif",sid_classifier=classifier,settings=settings,)
#p=Paper(filename='processed_scans/20151028145444607_0028.tif', sid_classifier=classifier, settings=settings)
# p = Paper(filename="testpage300dpi_scan1.png")
# p=Paper(filename='sizif111.tif', sid_classifier=classifier, settings={"sid_mask": "11xx0xxx", "answer_threshold": 0.25})
# p=Paper(filename='processed_scans/20141016095134535_0006.tif', sid_classifier=classifier, settings=settings)
# p = Paper(filename="processed_scans/20151111080408825_0001.tif",sid_classifier=classifier,settings=settings,)
# p=Paper(filename='processed_scans/20151028145444607_0028.tif', sid_classifier=classifier, settings=settings)
pa = [
    "processed_scans/20141016095134535_0006.tif",
    "processed_scans/20141016095134535_0028.tif",
@@ -24,16 +25,16 @@
    "processed_scans/20141028095553745_0018.tif",
    "processed_scans/20151013180545275_0011.tif",
    "processed_scans/20160408140801098_0004.tif",
    "processed_scans/20160510075445995_0026.tif"
    "processed_scans/20160510075445995_0026.tif",
]
#p=Paper(filename=pa[9], sid_classifier=classifier, settings=settings)
p=Paper(filename='test3.tif', sid_classifier=classifier, settings=settings)
# p=Paper(filename=pa[9], sid_classifier=classifier, settings=settings)
p = Paper(filename="test3.tif", sid_classifier=classifier, settings=settings)
# print(p.QRData)
# print(p.errors)
# print(p.getSkewAngle())
# print(p.locateUpMarkers())
# print(p.locateUpMarkers())%%
# print(p.locateRightMarkers())
# print(p.answerMatrix)
# p.get_enhanced_sid()
@@ -43,17 +44,19 @@
exit(0)
filelist = glob("processed_scans/*.tif")
wrong_sid=0;
total=0
wrong_sid = 0
total = 0
for f in sorted(filelist):
    print("processing: {}".format(f))
    p=Paper(filename=f, sid_classifier=classifier, settings=settings).get_paper_ocr_data()
    print(f,p)
    if(p['page_no']==0):
        total+=1
    if(len(p['errors'])!=0):
        wrong_sid+=1
    if total%10 == 0:
        print("Total:{}, wrong SID: {}".format(total,wrong_sid))
    p = Paper(
        filename=f, sid_classifier=classifier, settings=settings
    ).get_paper_ocr_data()
    print(f, p)
    if p["page_no"] == 0:
        total += 1
    if len(p["errors"]) != 0:
        wrong_sid += 1
    if total % 10 == 0:
        print("Total:{}, wrong SID: {}".format(total, wrong_sid))
print("Total:{}, wrong SID: {}".format(total,wrong_sid))
print("Total:{}, wrong SID: {}".format(total, wrong_sid))
aoi_ocr/__pycache__/Ocr.cpython-36.pyc
Binary files differ
aoi_ocr/__pycache__/sid_process.cpython-36.pyc
Binary files differ
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,14 +15,14 @@
    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
    elif sid_mask[0] == "x":
        move_left = 40
    else:
        move_left = 0
       # Remove noise
    # Remove noise
    image2 = cv2.morphologyEx(
        original_image, cv2.MORPH_OPEN, kernel(2, 2), iterations=3
    )
@@ -40,6 +40,7 @@
    image = image[y : y + h, x + 25 - move_left : x + w - 40]  # +25,-25
    return image
def sid_compare(sid_no, sid_mask):
    """
    Function compares student id number with student id mask if the recognised number is valid according to the 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
    )
@@ -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,7 +191,7 @@
    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, 1), iterations=4)