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.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/megapixels/app/server/api.py b/megapixels/app/server/api.py
new file mode 100644
index 00000000..c5e27dd2
--- /dev/null
+++ b/megapixels/app/server/api.py
@@ -0,0 +1,54 @@
+import os
+import re
+import time
+from flask import Blueprint, request, jsonify
+from PIL import Image # todo: try to remove PIL dependency
+
+from app.models.sql_factory import list_datasets, get_dataset, get_table
+
+sanitize_re = re.compile('[\W]+')
+valid_exts = ['.gif', '.jpg', '.jpeg', '.png']
+
+api = Blueprint('api', __name__)
+
+@api.route('/')
+def index():
+ return jsonify({ 'datasets': list_datasets() })
+
+@api.route('/dataset/<name>')
+def show(name):
+ dataset = get_dataset(name)
+ if dataset:
+ return jsonify(dataset.describe())
+ else:
+ return jsonify({ 'status': 404 })
+
+@api.route('/dataset/<dataset>/face', methods=['POST'])
+def upload(name):
+ file = request.files['query_img']
+ fn = file.filename
+ if fn.endswith('blob'):
+ fn = 'filename.jpg'
+
+ basename, ext = os.path.splitext(fn)
+ print("got {}, type {}".format(basename, ext))
+ if ext.lower() not in valid_exts:
+ return jsonify({ 'error': 'not an image' })
+
+ img = Image.open(file.stream).convert('RGB')
+
+ # vec = db.load_feature_vector_from_file(uploaded_img_path)
+ # vec = fe.extract(img)
+ # print(vec.shape)
+ # results = db.search(vec, limit=limit)
+
+ query = {
+ 'timing': time.time() - start,
+ }
+ results = []
+
+ print(results)
+ return jsonify({
+ 'query': query,
+ 'results': results,
+ })