summaryrefslogtreecommitdiff
path: root/check/app/server/api.py
diff options
context:
space:
mode:
Diffstat (limited to 'check/app/server/api.py')
-rw-r--r--check/app/server/api.py57
1 files changed, 32 insertions, 25 deletions
diff --git a/check/app/server/api.py b/check/app/server/api.py
index 66a0dd1..1a935cc 100644
--- a/check/app/server/api.py
+++ b/check/app/server/api.py
@@ -35,49 +35,41 @@ def get_params(default_threshold=MATCH_THRESHOLD, default_limit=MATCH_LIMIT):
threshold = int(request.form.get('threshold') or default_threshold)
limit = int(request.form.get('limit') or default_limit)
except:
- return jsonify({
- 'success': False,
- 'match': False,
- 'error': 'param_error'
- })
-
+ return None, 'param_error'
+
+ # Process uploaded file
if 'q' in request.files:
file = request.files['q']
fn = file.filename
- if fn.endswith('blob'): # FIX PNG IMAGES?
+ # demo client currently uploads a jpeg called 'blob'
+ if fn.endswith('blob'):
logging.debug('received a blob, assuming JPEG')
fn = 'filename.jpg'
basename, ext = os.path.splitext(fn)
if ext.lower() not in valid_exts:
- return jsonify({
- 'success': False,
- 'match': False,
- 'error': 'not_an_image'
- })
+ return None, 'not_an_image'
+ ext = ext[1:].lower()
raw = None
im = Image.open(file.stream).convert('RGB')
+ url = None
+
+ # Fetch remote URL
else:
url = request.form.get('url')
if not url:
- return jsonify({
- 'success': False,
- 'match': False,
- 'error': 'no_image'
- })
+ return None, 'no_image'
basename, ext = os.path.splitext(url)
if ext.lower() not in valid_exts:
- return jsonify({
- 'success': False,
- 'match': False,
- 'error': 'not_an_image'
- })
+ return None, 'not_an_image'
+ ext = ext[1:].lower()
remote_request = urllib.request.Request(url)
remote_response = urllib.request.urlopen(remote_request)
raw = remote_response.read()
im = Image.open(io.BytesIO(raw)).convert('RGB')
+ return (threshold, limit, url, ext, raw, im,), None
@api.route('/v1/match', methods=['POST'])
def match():
@@ -86,10 +78,17 @@ def match():
"""
start = time.time()
- threshold, limit, raw, im = get_params()
+ params, error = get_params()
+ if error:
+ return jsonify({
+ 'success': False,
+ 'match': False,
+ 'error': error,
+ })
+
+ threshold, limit, url, ext, raw, im = params
phash = compute_phash_int(im)
- ext = ext[1:].lower()
results = search_by_phash(phash=phash, threshold=threshold, limit=limit)
@@ -118,7 +117,15 @@ def similar():
"""
start = time.time()
- threshold, limit, raw, im = get_params(default_threshold=SIMILARITY_THRESHOLD, default_limit=SIMILARITY_LIMIT)
+ params, error = get_params(default_threshold=SIMILARITY_THRESHOLD, default_limit=SIMILARITY_LIMIT)
+ if error:
+ return jsonify({
+ 'success': False,
+ 'match': False,
+ 'error': error,
+ })
+
+ threshold, limit, url, ext, raw, im = params
phash = compute_phash_int(im)
ext = ext[1:].lower()