summaryrefslogtreecommitdiff
path: root/megapixels/app/server/api.py
diff options
context:
space:
mode:
Diffstat (limited to 'megapixels/app/server/api.py')
-rw-r--r--megapixels/app/server/api.py43
1 files changed, 40 insertions, 3 deletions
diff --git a/megapixels/app/server/api.py b/megapixels/app/server/api.py
index c5e27dd2..cf8241bd 100644
--- a/megapixels/app/server/api.py
+++ b/megapixels/app/server/api.py
@@ -1,9 +1,12 @@
import os
import re
import time
+import dlib
from flask import Blueprint, request, jsonify
from PIL import Image # todo: try to remove PIL dependency
+from app.processors import face_recognition
+from app.processors import face_detector
from app.models.sql_factory import list_datasets, get_dataset, get_table
sanitize_re = re.compile('[\W]+')
@@ -23,8 +26,10 @@ def show(name):
else:
return jsonify({ 'status': 404 })
-@api.route('/dataset/<dataset>/face', methods=['POST'])
+@api.route('/dataset/<name>/face', methods=['POST'])
def upload(name):
+ start = time.time()
+ dataset = get_dataset(name)
file = request.files['query_img']
fn = file.filename
if fn.endswith('blob'):
@@ -37,11 +42,43 @@ def upload(name):
img = Image.open(file.stream).convert('RGB')
- # vec = db.load_feature_vector_from_file(uploaded_img_path)
- # vec = fe.extract(img)
+ # Face detection
+ detector = face_detector.DetectorDLIBHOG()
+
+ # get detection as BBox object
+ bboxes = detector.detect(im, largest=True)
+ bbox = bboxes[0]
+ dim = im.shape[:2][::-1]
+ bbox = bbox.to_dim(dim) # convert back to real dimensions
+
+ # face recognition/vector
+ recognition = face_recognition.RecognitionDLIB(gpu=-1)
+
# print(vec.shape)
# results = db.search(vec, limit=limit)
+ # with the result we have an ID
+ # query the sql dataset for the UUID etc here
+
+ query = {
+ 'timing': time.time() - start,
+ }
+ results = []
+
+ print(results)
+ return jsonify({
+ 'query': query,
+ 'results': results,
+ })
+
+@api.route('/dataset/<name>/name', methods=['GET'])
+def name_lookup(dataset):
+ start = time.time()
+ dataset = get_dataset(name)
+
+ # we have a query from the request query string...
+ # use this to do a like* query on the identities_meta table
+
query = {
'timing': time.time() - start,
}