blob: 2ef9b874d4bda1a3d427911b8035560fbef800fb [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 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."""
log.info("{} - connected".format(flask.request.remote_addr))
return flask.render_template('index.html', devices=config.cameras)
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",
help = "Required. Path to an .xml file with a trained model.",
required = True,
type = str)
args.add_argument("-i", "--input",
help = "Path to video file or image. 'cam' for capturing video stream from camera",
default = "gstreamer",
type = str)
args.add_argument("-pt", "--prob_threshold",
help = "Optional. Probability threshold for detections filtering",
default = 0.75,
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("--user",
help = "ROC username",
type = str)
args.add_argument("--password",
help = "ROC password",
type = str)
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)
args.add_argument("--devicegroup",
help="Camera device group",
default="menlo-4g-cameras",
type=str)
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(config.url, args.user, args.password, config.enterprise, config.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)