Turing311 commited on
Commit
49e6ff4
1 Parent(s): 7e0621e

Upload 36 files

Browse files
app.py CHANGED
@@ -57,9 +57,9 @@ def face_recognition(face_payload):
57
  resp = send_rapidapi(url, face_payload)
58
  return resp
59
 
60
- @app.route("/")
61
  def index():
62
- return redirect(url_for('id_type'))
63
 
64
  @app.route("/id_type/", methods=['GET'])
65
  def id_type():
@@ -155,7 +155,7 @@ def fr_file_done():
155
  "image": fr_base64
156
  })
157
 
158
- print("Liveness Result:", liveness_api_resp)
159
 
160
  if 'data' in liveness_api_resp and 'result' in liveness_api_resp['data']:
161
  liveness_res = liveness_api_resp['data']['result']
@@ -190,6 +190,7 @@ def fr_detail():
190
  if 'data' in recog_api_resp and 'result' in recog_api_resp['data']:
191
  recog_res = recog_api_resp['data']['result']
192
  recog_similarity = recog_api_resp['data']['similarity']
 
193
 
194
  print("Matching Result", recog_api_resp)
195
  return render_template('fr_detail.html',
@@ -201,7 +202,9 @@ def fr_detail():
201
  selfie = 'data:image/png;base64,' + sess_fr_selfie,
202
  liveness_res = liveness_res.upper(),
203
  recog_res = recog_res.upper(),
204
- recog_similarity = recog_similarity * 100)
 
 
205
  else:
206
  return redirect(url_for('fr_file'))
207
 
 
57
  resp = send_rapidapi(url, face_payload)
58
  return resp
59
 
60
+ @app.route("/", methods=['GET'])
61
  def index():
62
+ return render_template('intro.html')
63
 
64
  @app.route("/id_type/", methods=['GET'])
65
  def id_type():
 
155
  "image": fr_base64
156
  })
157
 
158
+ print("Liveness Result:", liveness_api_resp)
159
 
160
  if 'data' in liveness_api_resp and 'result' in liveness_api_resp['data']:
161
  liveness_res = liveness_api_resp['data']['result']
 
190
  if 'data' in recog_api_resp and 'result' in recog_api_resp['data']:
191
  recog_res = recog_api_resp['data']['result']
192
  recog_similarity = recog_api_resp['data']['similarity']
193
+ recog_api_resp['data']['liveness'] = liveness_res
194
 
195
  print("Matching Result", recog_api_resp)
196
  return render_template('fr_detail.html',
 
202
  selfie = 'data:image/png;base64,' + sess_fr_selfie,
203
  liveness_res = liveness_res.upper(),
204
  recog_res = recog_res.upper(),
205
+ recog_similarity = recog_similarity * 100,
206
+ ocr_result = json.dumps(sess_id_res),
207
+ fr_result = json.dumps(recog_api_resp))
208
  else:
209
  return redirect(url_for('fr_file'))
210
 
requirements.txt CHANGED
@@ -1,4 +1,3 @@
1
  flask
2
  flask-wtf
3
- requests
4
- werkzeug
 
1
  flask
2
  flask-wtf
3
+ requests
 
templates/fr_detail.html CHANGED
@@ -125,51 +125,11 @@
125
  <script type="text/javascript" src="/static/jsi18n.js"></script>
126
  <!-- data js -->
127
  <script id="ocr-result" type="application/json">
128
- {
129
- "mrz_type": "TD3",
130
- "valid_score": 100,
131
- "raw_text": "PBLRADAMOVICHMARYIA\nPD00000004BLR9001011F31082734010190B000PB060",
132
- "type": "P",
133
- "country": "Belarus",
134
- "number": "PD0000000",
135
- "date_of_birth": "1990-01-01",
136
- "expired": false,
137
- "expiration_date": "2031-08-27",
138
- "nationality": "BLR",
139
- "sex": "Female",
140
- "names": "MARYIA",
141
- "first_name": "MARYIA",
142
- "surname": "ADAMOVICH",
143
- "last_name": "ADAMOVICH",
144
- "personal_number": "4010190B000PB0",
145
- "check_number": "4",
146
- "check_date_of_birth": "1",
147
- "check_expiration_date": "3",
148
- "check_composite": "0",
149
- "check_personal_number": "6",
150
- "valid_number": true,
151
- "valid_date_of_birth": true,
152
- "valid_expiration_date": true,
153
- "valid_composite": true,
154
- "valid_personal_number": true,
155
- "document_type": "passport"
156
- }</script>
157
  <script id="fr-result" type="application/json">
158
- {
159
- "success": true,
160
- "is_match": false,
161
- "score": 30.758,
162
- "result": {
163
- "is_match": false,
164
- "score": 30.758,
165
- "one_e3": 62.327,
166
- "one_e4": 69.101,
167
- "one_e5": 73.975
168
- },
169
- "is_liveness_passed": true
170
- }</script>
171
  <script id="ocr-type-url" type="application/json">
172
- "/id_type/"</script>
173
  <!-- JQuery -->
174
  <script type="text/javascript" src="/static/vendor/mdbootstrap/jquery.min.js"></script>
175
  <!-- Bootstrap tooltips -->
 
125
  <script type="text/javascript" src="/static/jsi18n.js"></script>
126
  <!-- data js -->
127
  <script id="ocr-result" type="application/json">
128
+ {{ocr_result|safe}}</script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  <script id="fr-result" type="application/json">
130
+ {{fr_result|safe}}</script>
 
 
 
 
 
 
 
 
 
 
 
 
131
  <script id="ocr-type-url" type="application/json">
132
+ "/"</script>
133
  <!-- JQuery -->
134
  <script type="text/javascript" src="/static/vendor/mdbootstrap/jquery.min.js"></script>
135
  <!-- Bootstrap tooltips -->
templates/fr_file.html CHANGED
@@ -94,14 +94,6 @@
94
  <lottie-player src="/static/img/lottie/fr_file.json" background="transparent" speed="1" style="width: 300px; height: 300px;" loop autoplay></lottie-player>
95
  </div>
96
  </div>
97
- <!--div class="row mt-5">
98
- <div class="col-lg-12 text-d-neutral">
99
-
100
- We are commited to protecting your privacy. By proceeding, you agree to our <a href="" target="_blank" class="new-window-link">Terms &amp; Conditions</a>.
101
- View our Global Privacy Statement <a href="" target="_blank" class="new-window-link">here</a>.
102
-
103
- </div>
104
- </div-->
105
  </div>
106
  <div class="preview-container" style="display: none;">
107
  <img id="img-preview" width="100%">
@@ -141,13 +133,30 @@
141
  <img src="/static/img/faceonlive.png" width="42" />&emsp;
142
  <div>
143
  <span class="text-c-neutral">Powered by</span><br />
144
- <a href="https://www.faceonlive.com">FaceOnLive</a>
145
  </div>
146
  </div>
147
 
148
  </footer>
149
 
150
- <!-- Error Modal -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
 
152
 
153
  </div>
 
94
  <lottie-player src="/static/img/lottie/fr_file.json" background="transparent" speed="1" style="width: 300px; height: 300px;" loop autoplay></lottie-player>
95
  </div>
96
  </div>
 
 
 
 
 
 
 
 
97
  </div>
98
  <div class="preview-container" style="display: none;">
99
  <img id="img-preview" width="100%">
 
133
  <img src="/static/img/faceonlive.png" width="42" />&emsp;
134
  <div>
135
  <span class="text-c-neutral">Powered by</span><br />
136
+ <a href="https://www.faceonlive.com" target="_blank" rel="noopener noreferrer">FaceOnLive</a>
137
  </div>
138
  </div>
139
 
140
  </footer>
141
 
142
+ {% if error_model %}
143
+ <!-- Error Modal -->
144
+ <div class="modal fade auto-show" id="error-modal-0" data-backdrop="static" data-keyboard="false" tabindex="-1" role="dialog" aria-hidden="true">
145
+ <div class="modal-dialog modal-dialog-centered modal-sm">
146
+ <div class="modal-content">
147
+ <div class="modal-header">
148
+ <div class="modal-title mx-auto">Please Retake Selfie</div>
149
+ </div>
150
+ <div class="modal-body">
151
+ <p>No face or multiple face detected in the selfie.</p>
152
+ </div>
153
+ <div class="modal-footer">
154
+ <button type="button" class="btn btn-primary mx-auto" data-dismiss="modal">Close</button>
155
+ </div>
156
+ </div>
157
+ </div>
158
+ </div>
159
+ {% endif %}
160
 
161
 
162
  </div>
templates/id_detail.html CHANGED
@@ -91,7 +91,7 @@
91
  <img src="/static/img/faceonlive.png" width="42" />&emsp;
92
  <div>
93
  <span class="text-c-neutral">Powered by</span><br />
94
- <a href="https://www.faceonlive.com">FaceOnLive</a>
95
  </div>
96
  </div>
97
 
 
91
  <img src="/static/img/faceonlive.png" width="42" />&emsp;
92
  <div>
93
  <span class="text-c-neutral">Powered by</span><br />
94
+ <a href="https://www.faceonlive.com" target="_blank" rel="noopener noreferrer">FaceOnLive</a>
95
  </div>
96
  </div>
97
 
templates/id_file.html CHANGED
@@ -159,15 +159,29 @@
159
  <img src="/static/img/faceonlive.png" width="42" />&emsp;
160
  <div>
161
  <span class="text-c-neutral">Powered by</span><br />
162
- <a href="https://www.faceonlive.com">FaceOnLive</a>
163
  </div>
164
  </div>
165
 
166
  </footer>
167
-
168
  <!-- Error Modal -->
169
-
170
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
  </div>
172
  <!-- django js translation -->
173
  <script type="text/javascript" src="/static/jsi18n.js"></script>
 
159
  <img src="/static/img/faceonlive.png" width="42" />&emsp;
160
  <div>
161
  <span class="text-c-neutral">Powered by</span><br />
162
+ <a href="https://www.faceonlive.com" target="_blank" rel="noopener noreferrer">FaceOnLive</a>
163
  </div>
164
  </div>
165
 
166
  </footer>
167
+ {% if error_model %}
168
  <!-- Error Modal -->
169
+ <div class="modal fade auto-show" id="error-modal-0" data-backdrop="static" data-keyboard="false" tabindex="-1" role="dialog" aria-hidden="true">
170
+ <div class="modal-dialog modal-dialog-centered modal-sm">
171
+ <div class="modal-content">
172
+ <div class="modal-header">
173
+ <div class="modal-title mx-auto">Please Retake ID</div>
174
+ </div>
175
+ <div class="modal-body">
176
+ <p>Error parsing ID Document, please ensure there is no obstacles or glare and All corners should be visible.</p>
177
+ </div>
178
+ <div class="modal-footer">
179
+ <button type="button" class="btn btn-primary mx-auto" data-dismiss="modal">Close</button>
180
+ </div>
181
+ </div>
182
+ </div>
183
+ </div>
184
+ {% endif %}
185
  </div>
186
  <!-- django js translation -->
187
  <script type="text/javascript" src="/static/jsi18n.js"></script>
templates/id_type.html CHANGED
@@ -92,7 +92,7 @@
92
  Identity Card
93
  <br/>
94
  <span class="text-10">
95
- ID Cards, Driving Licenses, etc
96
  </span>
97
  </button>
98
  </div>
@@ -115,7 +115,7 @@
115
  <img src="/static/img/faceonlive.png" width="42" />&emsp;
116
  <div>
117
  <span class="text-c-neutral">Powered by</span><br />
118
- <a href="https://www.faceonlive.com">FaceOnLive</a>
119
  </div>
120
  </div>
121
 
 
92
  Identity Card
93
  <br/>
94
  <span class="text-10">
95
+ ID Cards, Driving Licenses, etc (Front & Back Side)
96
  </span>
97
  </button>
98
  </div>
 
115
  <img src="/static/img/faceonlive.png" width="42" />&emsp;
116
  <div>
117
  <span class="text-c-neutral">Powered by</span><br />
118
+ <a href="https://www.faceonlive.com" target="_blank" rel="noopener noreferrer">FaceOnLive</a>
119
  </div>
120
  </div>
121
 
templates/intro.html ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en" data-bs-theme="dark">
3
+
4
+ <head>
5
+ <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
6
+ <meta http-equiv="Pragma" content="no-cache">
7
+ <meta http-equiv="Expires" content="0">
8
+ <meta charset="utf-8">
9
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
10
+ <title>FaceOnLive OpenKYC</title>
11
+ <link rel="shortcut icon" href="/static/img/favicon.ico">
12
+
13
+ <!-- material icons -->
14
+ <link
15
+ href="https://fonts.googleapis.com/css?family=Material+Icons|Material+Icons+Outlined|Material+Icons+Two+Tone|Material+Icons+Round|Material+Icons+Sharp"
16
+ rel="stylesheet">
17
+ <!-- Font Awesome -->
18
+ <link href="https://use.fontawesome.com/releases/v5.8.2/css/all.css" rel="stylesheet">
19
+ <!-- Google Fonts -->
20
+ <link href="https://fonts.googleapis.com/css?family=Poppins:300,400,500,700&display=swap" rel="stylesheet">
21
+ <!-- Bootstrap core CSS -->
22
+ <link href="/static/vendor/mdbootstrap/bootstrap.min.css" rel="stylesheet">
23
+ <!-- Material Design Bootstrap -->
24
+ <link href="/static/vendor/mdbootstrap/mdb.min.css" rel="stylesheet">
25
+ <!-- other css library based on page -->
26
+
27
+ <!-- global css -->
28
+ <link href="/static/ui/scss/bundle.min.css" rel="stylesheet">
29
+ <!-- css based on page -->
30
+ <link rel="stylesheet" href="/static/ui/scss/ocr_type.css">
31
+
32
+
33
+ </head>
34
+
35
+ <body>
36
+
37
+ <div class="wrapper">
38
+
39
+
40
+ <!-- Page Loader -->
41
+ <div class="loader">
42
+ <div class="spinner-border" role="status">
43
+ <span class="sr-only"></span>
44
+ </div>
45
+ </div>
46
+ <!-- Header -->
47
+ <header>
48
+
49
+ <div class="header-left">
50
+ <div class="container">
51
+
52
+ </div>
53
+ </div>
54
+ <div class="header-middle">
55
+ <div class="container">
56
+
57
+ </div>
58
+ </div>
59
+ <div class="header-right">
60
+ <div class="container">
61
+
62
+ </div>
63
+ </div>
64
+
65
+ </header>
66
+ <!-- Content -->
67
+ <main>
68
+
69
+
70
+ <form method="post" id="form-intro" autocomplete="off">
71
+ <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
72
+ <div class="row page-header">
73
+ <div class="col-lg-12 text-center">
74
+ OpenKYC Introduction
75
+ </div>
76
+ </div>
77
+ <div class="row page-subheader">
78
+ <div class="col-12">
79
+ <div class="default-container">
80
+ <p class="mb-0">
81
+ <h5>Contributions welcome on <a href="https://github.com/FaceOnLive/OpenKYC" target="_blank" rel="noopener noreferrer">Github.</a><br/>
82
+ Join our <a href="https://join.slack.com/t/faceonlive/shared_invite/zt-2drx19c5t-vQsR4TUGPD8oL7i7BXdKZA" target="_blank" rel="noopener noreferrer">Slack</a> to discuss and get support.</h5>
83
+ </p>
84
+ <br/>
85
+ <p class="mb-0">
86
+ <h5>Steps to setup project (using Free FaceOnLive RapidAPIs)</h5>
87
+ </p>
88
+ <ol class="mb-0 pl-3">
89
+ <li>Please subscribe following 3 RapidAPIs(Free) and get X-RapidAPI-Key there.<br/>
90
+ <a href="https://rapidapi.com/faceonlive-inc-faceonlive-inc-default/api/id-document-recognition2/" target="_blank" rel="noopener noreferrer">ID Document Recognition</a><br/>
91
+ <a href="https://rapidapi.com/faceonlive-inc-faceonlive-inc-default/api/face-liveness-detection3/" target="_blank" rel="noopener noreferrer">Face Liveness Detection</a><br/>
92
+ <a href="https://rapidapi.com/faceonlive-inc-faceonlive-inc-default/api/face-recognition26/" target="_blank" rel="noopener noreferrer">Face Recognition</a>
93
+ </li>
94
+ <li>Set X-RapidAPI-Key as enrironment variable named API_KEY.</li>
95
+ <li>Install python packages from requirements.txt and run "python app.py".</li>
96
+ </ol>
97
+ <br/>
98
+ <p class="mb-0">
99
+ <h5><a href="mailto:[email protected]">Contact us</a> for On-Premise deployment</h5>
100
+ </p>
101
+ <br/>
102
+ <p class="mb-0">
103
+ <h5>This project is community project supported by <a href="https://faceonlive.com" target="_blank" rel="noopener noreferrer">FaceOnLive</a>.</h5>
104
+ </p>
105
+ </div>
106
+ </div>
107
+ </div>
108
+ <div class="row page-content">
109
+ <div class="col-lg-12">
110
+ </div>
111
+ </div>
112
+ <div class="row page-footer">
113
+ <div class="col-6">
114
+ <a href="https://faceonlive.com" class="btn btn-outline-primary btn-side px-3" target="_blank" rel="noopener noreferrer">Learn More</a>
115
+ </div>
116
+ <div class="col-6">
117
+ <a href="/id_type/" class="btn btn-primary btn-side px-3">Start</a>
118
+ </div>
119
+ </div>
120
+ </form>
121
+
122
+ </main>
123
+ <!-- Footer -->
124
+ <footer>
125
+
126
+ <div class="container powered">
127
+ <img src="/static/img/faceonlive.png" width="42" />&emsp;
128
+ <div>
129
+ <span class="text-c-neutral">Powered by</span><br />
130
+ <a href="https://www.faceonlive.com" target="_blank" rel="noopener noreferrer">FaceOnLive</a>
131
+ </div>
132
+ </div>
133
+
134
+ </footer>
135
+
136
+ <!-- Error Modal -->
137
+
138
+
139
+ </div>
140
+ <!-- django js translation -->
141
+ <script type="text/javascript" src="/static/jsi18n.js"></script>
142
+ <!-- data js -->
143
+
144
+
145
+ <!-- JQuery -->
146
+ <script type="text/javascript" src="/static/vendor/mdbootstrap/jquery.min.js"></script>
147
+ <!-- Bootstrap tooltips -->
148
+ <script type="text/javascript" src="/static/vendor/mdbootstrap/popper.min.js"></script>
149
+ <!-- Bootstrap core JavaScript -->
150
+ <script type="text/javascript" src="/static/vendor/mdbootstrap/bootstrap.min.js.download"></script>
151
+ <!-- MDB core JavaScript -->
152
+ <script type="text/javascript" src="/static/vendor/mdbootstrap/mdb.min.js.download"></script>
153
+ <!-- other js library based on page -->
154
+
155
+
156
+ <script src="https://unpkg.com/@lottiefiles/lottie-player@latest/dist/lottie-player.js"></script>
157
+
158
+ <!-- global js -->
159
+ <script type="text/javascript" src="/static/ui/js/base.js"></script>
160
+ <!-- js based on page -->
161
+ <script type="text/javascript" src="/static/ui/js/ocr_type.js"></script>
162
+ </body>
163
+
164
+ </html>