Initial commit for web interface

Change-Id: I133eaf37221a050eb3c87e245b86ae54c610d446
diff --git a/person_detection/app.py b/person_detection/app.py
new file mode 100644
index 0000000..1b1fbde
--- /dev/null
+++ b/person_detection/app.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+from importlib import import_module
+import os
+from flask import Flask, render_template, Response
+from argparse import ArgumentParser, SUPPRESS
+
+# import camera driver
+if os.environ.get('CAMERA'):
+    Camera = import_module('camera_' + os.environ['CAMERA']).Camera
+else:
+    #from camera import Camera
+    from person_detection import Camera
+
+# Raspberry Pi camera module (requires picamera package)
+# from camera_pi import Camera
+
+app = Flask(__name__)
+
+
+@app.route('/')
+def index():
+    """Video streaming home page."""
+    return render_template('index.html')
+
+
+def gen(camera):
+    """Video streaming generator function."""
+    print("Video streaming generator function.")
+    while True:
+        frame = camera.get_frame()
+        yield (b'--frame\r\n'
+               b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
+
+
+@app.route('/video_feed')
+def video_feed():
+    """Video streaming route. Put this in the src attribute of an img tag."""
+    print("video_feed()", args)
+    camera = Camera(args)
+    print("Camera: ", camera)
+    return Response(gen(camera),
+                    mimetype='multipart/x-mixed-replace; boundary=frame')
+
+def build_argparser():
+    parser = ArgumentParser(add_help=False)
+    args = parser.add_argument_group('Options')
+    args.add_argument('-h', '--help', action='help', default=SUPPRESS, help='Show this help message and exit.')
+    args.add_argument("-m", "--model", help="Required. Path to an .xml file with a trained model.",
+                      required=True, type=str)
+    args.add_argument("-i", "--input",
+                      help="Required. Path to video file or image. 'cam' for capturing video stream from camera",
+                      required=True, type=str)
+    args.add_argument("-l", "--cpu_extension",
+                      help="Optional. Required for CPU custom layers. Absolute path to a shared library with the "
+                           "kernels implementations.", type=str, default=None)
+    args.add_argument("-pp", "--plugin_dir", help="Optional. Path to a plugin folder", type=str, default=None)
+    args.add_argument("-d", "--device",
+                      help="Optional. Specify the target device to infer on; CPU, GPU, FPGA, HDDL or MYRIAD is "
+                           "acceptable. The demo will look for a suitable plugin for device specified. "
+                           "Default value is CPU", default="CPU", type=str)
+    args.add_argument("--labels", help="Optional. Path to labels mapping file", default=None, type=str)
+    args.add_argument("-pt", "--prob_threshold", help="Optional. Probability threshold for detections filtering",
+                      default=0.5, type=float)
+    args.add_argument("-ns", help='No show output', action='store_true')
+
+    return parser
+
+if __name__ == '__main__':
+    args = build_argparser().parse_args()
+    app.run(host='0.0.0.0', threaded=True)