blob: 765295077d671ace03dd7f9efa18eed89182077e [file] [log] [blame]
#!/usr/bin/env python
"""
SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
SPDX-License-Identifier: LicenseRef-ONF-Member-1.01
"""
import os
import logging as log
import sys
import flask
from argparse import ArgumentParser, SUPPRESS
import config
from person_detection import Camera
from roc import Roc
app = flask.Flask(__name__)
@app.route('/')
def index():
"""Video streaming home page."""
global args
devices = {str(x): "Camera "+str(x) for x in range(args.num)}
log.info("{} - connected".format(flask.request.remote_addr))
return flask.render_template('index.html', devices=devices)
def gen(camera):
"""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/<device>')
def video_feed(device):
"""Video streaming route. Put this in the src attribute of an img tag."""
global args
log.debug("{} - video feed {}".format(flask.request.remote_addr, device))
camera = Camera(device, flask.request.remote_addr, args)
return flask.Response(gen(camera),
mimetype='multipart/x-mixed-replace; boundary=frame')
def name_to_port(name):
return int(name)
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",
default="models/intel/person-detection-retail-0013/FP32/person-detection-retail-0013.xml",
help="Path to model", type=str)
args.add_argument("-i", "--input",
help="Video input", default="gstreamer", type=str)
args.add_argument("-pt", "--prob_threshold", default=0.75,
help="Probability threshold for detection", type=float)
args.add_argument("--noroc", action='store_true', help="No ROC")
args.add_argument("--key", help="ROC api key", type=str)
args.add_argument("--url", default=config.ROCURL,
help="ROC url", type=str)
args.add_argument("--keycloak", default=config.KEYCLOAKURL,
help="Keycloak url", type=str)
args.add_argument("--enterprise", default=config.ENTERPRISE,
help="Enterprise ID", type=str)
args.add_argument("--site", default=config.SITE,
help="Site ID", type=str)
args.add_argument("--devicegroup", default=config.DEVICEGROUP,
help="Camera device group", type=str)
args.add_argument("--user", default=config.ROCUSER,
help="ROC username", type=str)
args.add_argument("--password", default=config.ROCPASSWORD,
help="ROC password", type=str)
args.add_argument("--num", default=config.NUMDEVICES,
help="Number of camera devices",
type=int)
args.add_argument("--mbrlow", help="Low range of MBR", default=7000000,
type=int)
args.add_argument("--mbrhigh", help="High range of MBR", default=10000000,
type=int)
return parser
if __name__ == '__main__':
log.basicConfig(
format='%(asctime)s %(levelname)-8s %(message)s',
level=log.DEBUG,
datefmt='%Y-%m-%d %H:%M:%S',
stream=sys.stdout)
log.debug("Starting person detection app")
args = build_argparser().parse_args()
if not args.noroc:
key = args.key
if key is None:
if args.user is not None and args.password is not None:
roc = Roc(args.url, args.keycloak, args.user, args.password,
args.enterprise, args.site)
key = roc.get_key()
else:
log.error("Either key or user/password required")
sys.exit()
log.info("Device group:{} mbr:{}(low)".format(args.devicegroup,
args.mbrlow))
roc.set_mbr(args.devicegroup, args.mbrlow)
app.run(host='0.0.0.0', debug=True)