summaryrefslogtreecommitdiff
path: root/megapixels/app
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2018-12-14 17:24:23 +0100
committerJules Laplace <julescarbon@gmail.com>2018-12-14 17:24:23 +0100
commit36b6082dfa768cbf35d40dc2c82706dfae0b687b (patch)
tree70a49e3623b708caad8d93cd722512d5438a0bec /megapixels/app
parentb39b1d51db2d485e9c60fb4d3f5445474cef8700 (diff)
flask server click script
Diffstat (limited to 'megapixels/app')
-rw-r--r--megapixels/app/models/sql_factory.py1
-rw-r--r--megapixels/app/server/api/image.py40
-rw-r--r--megapixels/app/server/create.py27
l---------megapixels/app/server/static1
4 files changed, 68 insertions, 1 deletions
diff --git a/megapixels/app/models/sql_factory.py b/megapixels/app/models/sql_factory.py
index ecca0c7f..525492f1 100644
--- a/megapixels/app/models/sql_factory.py
+++ b/megapixels/app/models/sql_factory.py
@@ -14,7 +14,6 @@ connection_url = "mysql+mysqldb://{}:{}@{}/{}".format(
# Session = sessionmaker(bind=engine)
# session = Session()
-
class SqlDataset:
"""
Bridge between the facial information CSVs connected to the datasets, and MySQL
diff --git a/megapixels/app/server/api/image.py b/megapixels/app/server/api/image.py
new file mode 100644
index 00000000..f2f4a4f9
--- /dev/null
+++ b/megapixels/app/server/api/image.py
@@ -0,0 +1,40 @@
+from flask import Blueprint, render_template, abort
+# from jinja2 import TemplateNotFound
+
+router = Blueprint('image', __name__)
+
+@router.route('/<dataset>/test', methods=['POST'])
+def test(name):
+ # dataset =
+@router.route('/<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' })
+
+ uploaded_fn = datetime.now().isoformat() + "_" + basename
+ uploaded_fn = sanitize_re.sub('', uploaded_fn)
+ uploaded_img_path = "static/uploaded/" + uploaded_fn + ext
+ uploaded_img_path = uploaded_img_path.lower()
+ print('query: {}'.format(uploaded_img_path))
+
+ img = Image.open(file.stream).convert('RGB')
+ # img.save(uploaded_img_path)
+ # 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,
+ }
+ print(results)
+ return jsonify({
+ 'results': results,
+ })
diff --git a/megapixels/app/server/create.py b/megapixels/app/server/create.py
new file mode 100644
index 00000000..1119ee8f
--- /dev/null
+++ b/megapixels/app/server/create.py
@@ -0,0 +1,27 @@
+from flask import Flask, Blueprint
+from flask_sqlalchemy import SQLAlchemy
+from app.models.sql_factory import connection_url
+
+from app.server.api import router as api_router
+
+# from app.server.views.assets import assets
+
+db = SQLAlchemy()
+
+def create_app(script_info=None):
+ app = Flask(__name__, static_url_path='')
+ app.config['SQLALCHEMY_DATABASE_URI'] = connection_url
+ app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
+
+ db.init_app(app)
+ app.register_blueprint(api)
+
+ @app.route('/', methods=['GET'])
+ def index():
+ return app.send_static_file('index.html')
+
+ @app.shell_context_processor
+ def shell_context():
+ return { 'app': app, 'db': db }
+
+ return app
diff --git a/megapixels/app/server/static b/megapixels/app/server/static
new file mode 120000
index 00000000..1dc7a639
--- /dev/null
+++ b/megapixels/app/server/static
@@ -0,0 +1 @@
+../../../site/public \ No newline at end of file