summaryrefslogtreecommitdiff
path: root/megapixels/app/server
diff options
context:
space:
mode:
Diffstat (limited to 'megapixels/app/server')
-rw-r--r--megapixels/app/server/api.py43
-rw-r--r--megapixels/app/server/create.py7
2 files changed, 47 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,
}
diff --git a/megapixels/app/server/create.py b/megapixels/app/server/create.py
index c1f41dc4..4b1333b9 100644
--- a/megapixels/app/server/create.py
+++ b/megapixels/app/server/create.py
@@ -7,6 +7,9 @@ from app.server.api import api
db = SQLAlchemy()
def create_app(script_info=None):
+ """
+ functional pattern for creating the flask app
+ """
app = Flask(__name__, static_folder='static', static_url_path='')
app.config['SQLALCHEMY_DATABASE_URI'] = connection_url
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
@@ -37,6 +40,10 @@ def create_app(script_info=None):
return app
def serve_page(file_relative_path_to_root):
+ """
+ trying to get this to serve /path/ with /path/index.html,
+ ...but it doesnt actually matter for production...
+ """
if file_relative_path_to_root[-1] == '/':
file_relative_path_to_root += 'index.html'
return send_from_directory("static", file_relative_path_to_root)