summaryrefslogtreecommitdiff
path: root/megapixels/app
diff options
context:
space:
mode:
Diffstat (limited to 'megapixels/app')
-rw-r--r--megapixels/app/models/sql_factory.py14
-rw-r--r--megapixels/app/server/api.py41
-rw-r--r--megapixels/app/settings/app_cfg.py2
3 files changed, 38 insertions, 19 deletions
diff --git a/megapixels/app/models/sql_factory.py b/megapixels/app/models/sql_factory.py
index 414ef3a6..da95b539 100644
--- a/megapixels/app/models/sql_factory.py
+++ b/megapixels/app/models/sql_factory.py
@@ -97,6 +97,20 @@ class SqlDataset:
'pose': self.select('pose', id),
}
+ def search_name(self, q):
+ table = self.get_table('identity_meta')
+ uuid_table = self.get_table('uuids')
+
+ identity = table.query.filter(table.fullname.like(q)).order_by(table.fullname.desc()).limit(30)
+ identities = []
+ for row in identity:
+ uuid = uuid_table.query.filter(uuid_table.id == row.image_id).first()
+ identities.append({
+ 'uuid': uuid.toJSON(),
+ 'identity': row.toJSON(),
+ })
+ return identities
+
def select(self, table, id):
table = self.get_table(table)
if not table:
diff --git a/megapixels/app/server/api.py b/megapixels/app/server/api.py
index 8ff06611..33cf45df 100644
--- a/megapixels/app/server/api.py
+++ b/megapixels/app/server/api.py
@@ -28,26 +28,26 @@ def index():
return jsonify({ 'datasets': list_datasets() })
-@api.route('/dataset/<name>')
-def show(name):
+@api.route('/dataset/<dataset_name>')
+def show(dataset_name):
"""Show the data that a dataset will return"""
- dataset = get_dataset(name)
+ dataset = get_dataset(dataset_name)
if dataset:
return jsonify(dataset.describe())
else:
return jsonify({ 'status': 404 })
-@api.route('/dataset/<name>/face/', methods=['POST'])
-def upload(name):
+@api.route('/dataset/<dataset_name>/face', methods=['POST'])
+def upload(dataset_name):
"""Query an image against FAISS and return the matching identities"""
start = time.time()
- dataset = get_dataset(name)
- if name not in faiss_datasets:
+ dataset = get_dataset(dataset_name)
+ if dataset_name not in faiss_datasets:
return jsonify({
'error': 'invalid dataset'
})
- faiss_dataset = faiss_datasets[name]
+ faiss_dataset = faiss_datasets[dataset_name]
file = request.files['query_img']
fn = file.filename
if fn.endswith('blob'):
@@ -106,17 +106,21 @@ def upload(name):
for _d, _i in zip(distances, indexes):
if _d <= THRESHOLD:
dists.append(round(float(_d), 2))
- ids.append(_i)
+ ids.append(_i+1)
results = [ dataset.get_identity(int(_i)) for _i in ids ]
# print(distances)
# print(ids)
+ # 'bbox': str(bboxes[0]),
+ # 'bbox_dim': str(bbox),
+ print(bboxes[0])
+ print(bbox)
+
query = {
- 'bbox': bboxes[0],
- 'bbox_dim': bbox,
'timing': round(time.time() - start, 3),
+ 'bbox': str(bbox),
}
# print(results)
return jsonify({
@@ -126,20 +130,21 @@ def upload(name):
})
-@api.route('/dataset/<name>/name', methods=['GET'])
-def name_lookup(dataset):
+@api.route('/dataset/<dataset_name>/name', methods=['GET','POST'])
+def name_lookup(dataset_name):
"""Find a name in the dataset"""
start = time.time()
- dataset = get_dataset(name)
+ dataset = get_dataset(dataset_name)
- # we have a query from the request query string...
- # use this to do a like* query on the identities_meta table
+ q = request.args.get('q')
+ print(q)
query = {
+ 'q': q,
'timing': time.time() - start,
}
- results = []
-
+ results = dataset.search_name(q + '%') if q else None
+
# print(results)
return jsonify({
'query': query,
diff --git a/megapixels/app/settings/app_cfg.py b/megapixels/app/settings/app_cfg.py
index d7752739..55fed166 100644
--- a/megapixels/app/settings/app_cfg.py
+++ b/megapixels/app/settings/app_cfg.py
@@ -89,7 +89,7 @@ CKPT_ZERO_PADDING = 9
HASH_TREE_DEPTH = 3
HASH_BRANCH_SIZE = 3
-DLIB_FACEREC_JITTERS = 25 # number of face recognition jitters
+DLIB_FACEREC_JITTERS = 5 # number of face recognition jitters
DLIB_FACEREC_PADDING = 0.25 # default dlib
POSE_MINMAX_YAW = (-25,25)