From 6fde5fba87aaf2f2ad8c4af08a59454f06d8dc30 Mon Sep 17 00:00:00 2001
From: Samo Penic <samo.penic@gmail.com>
Date: Sat, 17 Nov 2018 12:28:39 +0000
Subject: [PATCH] Improving the robustness of all three algorithms. Again...

---
 Ocr.py |   49 +++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 45 insertions(+), 4 deletions(-)

diff --git a/Ocr.py b/Ocr.py
index 35c6729..f4447e5 100644
--- a/Ocr.py
+++ b/Ocr.py
@@ -6,13 +6,15 @@
 
 
 class Paper:
-    def __init__(self, filename=None, sid_classifier=None):
+    def __init__(self, filename=None, sid_classifier=None, settings=None):
         self.filename = filename
         self.invalid = None
         self.QRData = None
+        self.settings={'answer_treshold':0.25,} if settings is None else settings
         self.errors = []
         self.warnings = []
-        self.sid_classifier=sid_classifier
+        self.sid=None
+        self.sid_classifier = sid_classifier
         if filename is not None:
             self.loadImage(filename)
             self.runOcr()
@@ -216,11 +218,50 @@
     def get_enhanced_sid(self):
         if self.sid_classifier is None:
             return "x"
-        es = getSID(
+        if self.settings is not None:
+            sid_mask=self.settings.get("sid_mask", None)
+        es,err,warn = getSID(
             self.img[
-                int(0.045 * self.imgHeight) : int(0.085 * self.imgHeight),
+                int(0.04 * self.imgHeight) : int(0.095 * self.imgHeight),
                 int(0.7 * self.imgWidth) : int(0.99 * self.imgWidth),
             ],
             self.sid_classifier,
+            sid_mask
         )
+        [self.errors.append(e) for e in err]
+        [self.warnings.append(w) for w in warn]
         return es
+
+
+    def get_code_data(self):
+        qrdata = bytes.decode(self.QRData, 'utf8')
+        if self.QRDecode[0].type=='EAN13':
+            return {'exam_id': int(qrdata[0:7]),
+                    'page_no': int(qrdata[7]),
+                    'paper_id': int(qrdata[-5:-1]),
+                    'faculty_id': None,
+                    'sid': None
+                    }
+        else:
+            data=qrdata.split(',')
+            retval={'exam_id': int(data[1]),
+                    'page_no': int(data[3]),
+                    'paper_id':int(data[2]),
+                    'faculty_id':int(data[0]),
+            }
+            if(len(data)>4):
+                retval['sid']=data[4]
+
+            return retval
+
+    def get_paper_ocr_data(self):
+        data=self.get_code_data()
+        data['qr']=self.QRData
+        data['errors']=self.errors
+        data['warnings']=self.warnings
+        data['up_position']=(list(self.xMarkerLocations[1]/self.imgWidth), list(self.yMarkerLocations[1]/self.imgHeight))
+        data['right_position']=(list(self.xMarkerLocations[1]/self.imgWidth), list(self.yMarkerLocations[1]/self.imgHeight))
+        data['ans_matrix']=((np.array(self.answerMatrix)>self.settings['answer_treshold'])*1).tolist()
+        if data['sid'] is None:
+            data['sid']=self.get_enhanced_sid()
+        return data

--
Gitblit v1.9.3