enrolement works

This commit is contained in:
Askill 2020-03-20 21:21:31 +01:00
parent ebf18f19e8
commit c9c32c84d3
7 changed files with 96 additions and 33 deletions

View File

@ -4,6 +4,7 @@ import requests
import application.config as config import application.config as config
import json import json
import cv2 import cv2
import base64
from application.db import Session, Person, Fingerprint from application.db import Session, Person, Fingerprint
lastImage = "" lastImage = ""
@ -14,17 +15,20 @@ class PersonList(Resource):
try: try:
jsonData = flask.request.get_json(force=True) jsonData = flask.request.get_json(force=True)
personJSON = jsonData["person"] personJSON = jsonData["person"]
print(personJSON)
session = Session() session = Session()
# get Fingerprints with Middleware
fingerprintsObj = [] fingerprintsObj = []
for fingerprint in personJSON["fingerprints"]: if "fingerprints" in personJSON:
fingerprint["fingerprint"] = fingerprint["fingerprint"].encode('utf-8') for fingerprint in personJSON["fingerprints"]:
fp = Fingerprint(**fingerprint) # ** Operator converts DICT/JSON to initializable fingerprint["fingerprint"] = fingerprint["fingerprint"].encode('utf-8')
fingerprintsObj.append(fp) fp = Fingerprint(**fingerprint) # ** Operator converts DICT/JSON to initializable
session.add(fp) fingerprintsObj.append(fp)
session.add(fp)
personJSON["fingerprints"] = fingerprintsObj personJSON["fingerprints"] = fingerprintsObj
personJSON["face"] = personJSON["face"].encode('utf-8') personJSON["face"] = ("data:image/png;base64,"+str(lastImage)).encode('utf-8')
person = Person(**personJSON) person = Person(**personJSON)
session.add(person) session.add(person)
session.commit() session.commit()
@ -120,13 +124,13 @@ class Camera(Resource):
def get_frame(self, ending): def get_frame(self, ending):
success, image = self.video.read() success, image = self.video.read()
ret, jpeg = cv2.imencode(ending, image) ret, jpeg = cv2.imencode(ending, image)
return jpeg.tobytes() return jpeg
def gen(self, camera): def gen(self, camera):
"""Video streaming generator function.""" """Video streaming generator function."""
while True: while True:
frame = camera.get_frame('.jpg') frame = camera.get_frame('.jpg').tobytes()
yield (b'--frame\r\n' yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n') b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
@ -137,7 +141,8 @@ class Camera(Resource):
return flask.Response(self.gen(self.VideoCamera()), mimetype='multipart/x-mixed-replace; boundary=frame') return flask.Response(self.gen(self.VideoCamera()), mimetype='multipart/x-mixed-replace; boundary=frame')
elif type == "still": elif type == "still":
return flask.Response(lastImage, mimetype='image/jpeg') lastImage1 = base64.b64decode(lastImage.encode())
return flask.Response(lastImage1, mimetype='image/png')
return flask.make_response(flask.jsonify({'error': "No idea how you got here"}), 404) return flask.make_response(flask.jsonify({'error': "No idea how you got here"}), 404)
except Exception as e: except Exception as e:
@ -147,7 +152,7 @@ class Camera(Resource):
def post(self): def post(self):
global lastImage global lastImage
try: try:
lastImage = self.VideoCamera().get_frame('.png') lastImage = base64.b64encode(self.VideoCamera().get_frame('.png')).decode()
except Exception as e: except Exception as e:
print("error: -", e) print("error: -", e)
return flask.make_response(flask.jsonify({'error': str(e)}), 404) return flask.make_response(flask.jsonify({'error': str(e)}), 404)

View File

@ -1,4 +1,4 @@
function getJSON(url, callback) { function getJSON(url, callback, fallback) {
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.open('GET', url, true); xhr.open('GET', url, true);
xhr.responseType = 'json'; xhr.responseType = 'json';
@ -7,14 +7,13 @@ function getJSON(url, callback) {
if (status < 400) { if (status < 400) {
callback(null, xhr.response); callback(null, xhr.response);
} else { } else {
console.log("failed getting"); fallback();
console.log(status);
} }
}; };
xhr.send(); xhr.send();
}; };
function putJSON(url, data, callback) { function putJSON(url, data, callback, fallback) {
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.open('PUT', url, true); xhr.open('PUT', url, true);
xhr.responseType = 'json'; xhr.responseType = 'json';
@ -24,14 +23,13 @@ function putJSON(url, data, callback) {
if (status < 400) { if (status < 400) {
callback(null, xhr.response); callback(null, xhr.response);
} else { } else {
console.log("failed posting"); fallback();
console.log(status);
} }
}; };
xhr.send(data); xhr.send(data);
}; };
function postJSON(url, data, callback) { function postJSON(url, data, callback, fallback) {
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.open('POST', url, true); xhr.open('POST', url, true);
xhr.responseType = 'json'; xhr.responseType = 'json';
@ -41,8 +39,7 @@ function postJSON(url, data, callback) {
if (status < 400) { if (status < 400) {
callback(null, xhr.response); callback(null, xhr.response);
} else { } else {
console.log("failed posting"); fallback();
console.log(status);
} }
}; };
xhr.send(data); xhr.send(data);

View File

@ -27,7 +27,7 @@
top: 10rem; top: 10rem;
left: -50%; left: -50%;
display: block; display: block;
padding: 0;
} }
.listIMG{ .listIMG{
@ -46,7 +46,7 @@
padding:0; padding:0;
} }
.card{ .card{
margin-top:2rem; margin-top:1rem;
} }
.card-text{ .card-text{
padding: 0; padding: 0;
@ -60,25 +60,27 @@
float:right; float:right;
} }
.middle{ .middle{
margin: 0rem 2rem 0 2rem; padding: 2rem ;
margin: 0 !important;
height: 100%; height: 100%;
width: 40%; width: 45%;
display: block; display: block;
} }
#image-left{ #image-left{
width:100%; width:100%;
padding: 1rem;
} }
#image-right{ #image-right{
width:100%; width:100%;
padding: 1rem;
} }
.heroInfo{ .heroInfo{
padding: 1rem;
} }
.middle-controls{ .middle-controls{
margin-right: 1rem; margin-left: 1rem;
margin-top: 1rem;
} }

View File

@ -5,6 +5,15 @@ var ml = document.getElementById('middle-left');
var mr = document.getElementById('middle-right'); var mr = document.getElementById('middle-right');
personData = {} personData = {}
/**
* Retrieves input data from a form and returns it as a JSON object.
* @param {HTMLFormControlsCollection} elements the form elements
* @return {Object} form data as an object literal
*/
const formToJSON = elements => [].reduce.call(elements, (data, element) => {
data[element.name] = element.value;
return data;
}, {});
function focusNav(id) { function focusNav(id) {
focusedID = id; focusedID = id;
@ -51,7 +60,8 @@ function snapShot(){
postJSON(rootKontext + "/api/v1/camera/", {}, postJSON(rootKontext + "/api/v1/camera/", {},
function (error, data) { function (error, data) {
document.getElementById('image-left').src = rootKontext + "/api/v1/camera/still"; document.getElementById('image-left').src = rootKontext + "/api/v1/camera/still";
} },
null
); );
} }
@ -70,12 +80,32 @@ function renderPersonRight(data){
mr.innerHTML = string; mr.innerHTML = string;
} }
function enrole(){
data = {}
data["fname"] = document.getElementById("personform")["fname"].value
data["lname"] = document.getElementById("personform")["lname"].value
data["gender"] = document.getElementById("personform")["gender"].value
data["yob"] = document.getElementById("personform")["yob"].value
data = {"person": data}
console.log(data)
postJSON(rootKontext + "/api/v1/person/", JSON.stringify(data),
function(){
location.reload()
},
null
)
}
function identify(){ function identify(){
snapShot() snapShot()
getJSON(rootKontext + "/api/v1/person/?useFace=True", getJSON(rootKontext + "/api/v1/person/?useFace=True",
function (error, data) { function (error, data) {
data = data["data"] data = data["data"]
renderPersonRight(data) renderPersonRight(data)
$("#middle-right").removeClass("border-danger").addClass("boarder-success")
},
function(){
$("#middle-right").removeClass("border-success").addClass("border-danger")
} }
); );
} }
@ -86,6 +116,11 @@ function validate(){
function (error, data) { function (error, data) {
data = data["data"] data = data["data"]
renderPersonRight(data) renderPersonRight(data)
$("#middle-right").removeClass("border-danger").addClass("border-success")
},
function(){
mr.innerHTML="<p><h3>Please select a person<br> from the list, which you want to use for validation</h3></p>"
$("#middle-right").removeClass("border-success").addClass("border-danger")
} }
); );
} }
@ -110,7 +145,8 @@ function loadData() {
personData = data personData = data
loadPersonList(data) loadPersonList(data)
renderIdentify() renderIdentify()
} },
null
); );
} }

View File

@ -12,6 +12,7 @@ function renderValidate(){
<button onclick="renderValidate()" class="btn btn-warning float-right middle-controls">Retry</button> <button onclick="renderValidate()" class="btn btn-warning float-right middle-controls">Retry</button>
` `
ml.innerHTML = string; ml.innerHTML = string;
$("#middle-right").removeClass("border-danger").removeClass("border-success")
} }
function renderChange(){ function renderChange(){
@ -20,7 +21,29 @@ function renderChange(){
} }
function renderEnrole(){ function renderEnrole(){
clearMiddle() clearMiddle()
console.log("enrole") string = `
<img src="${rootKontext + "/api/v1/camera/stream"}" id="image-left"> </img>
<button onclick="snapShot()" class="btn btn-primary float-right middle-controls">Snap</button>
<button onclick="renderEnrole()" class="btn btn-warning float-right middle-controls">Retry</button>
`
ml.innerHTML = string;
string2 = `
<form id="personform">
<input type="text" class="form-control" name="fname" placeholder="First Name" ><br>
<input type="text" class="form-control" name="lname" placeholder="Last Name" ><br>
<select class="form-control" id="gender" name="gender">
<option>male</option>
<option>female</option>
<option>other</option>
</select><br>
<input type="text" class="form-control" name="yob" placeholder="YoB"><br>
</form>
<button type="button" class="btn btn-success float-right" onclick="enrole()">Enrole</button>
`
mr.innerHTML = string2;
} }
function renderIdentify(){ function renderIdentify(){
clearMiddle() clearMiddle()

View File

@ -40,11 +40,11 @@
</div> </div>
<div style="position: fixed; left: 50%;"> <div style="position: fixed; left: 50%;">
<div class="container bg-dark" id="main"> <div class="container bg-dark" id="main">
<div class="middle" id="middle-left"> <div class="middle card" id="middle-left">
</div> </div>
<div class="middle" id="middle-right"> <div class="middle card" id="middle-right">
</div> </div>

Binary file not shown.