This commit is contained in:
Blake Blackshear 2020-02-18 06:11:02 -06:00
parent bb8e4621f5
commit 05951aa7da
3 changed files with 10 additions and 16 deletions

View File

@ -51,12 +51,6 @@ GLOBAL_OBJECT_CONFIG = CONFIG.get('objects', {})
WEB_PORT = CONFIG.get('web_port', 5000)
DEBUG = (CONFIG.get('debug', '0') == '1')
# TODO: make CPU/Coral switching more seamless
# MODEL_PATH = CONFIG.get('tflite_model', '/lab/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite')
MODEL_PATH = CONFIG.get('tflite_model', '/lab/detect.tflite')
LABEL_MAP = CONFIG.get('label_map', '/lab/labelmap.txt')
class CameraWatchdog(threading.Thread):
def __init__(self, camera_processes, config, tflite_process, tracked_objects_queue):
threading.Thread.__init__(self)
@ -129,13 +123,13 @@ def main():
tracked_objects_queue = mp.Queue()
# Start the shared tflite process
tflite_process = EdgeTPUProcess(MODEL_PATH)
tflite_process = EdgeTPUProcess()
# start the camera processes
camera_processes = {}
for name, config in CONFIG['cameras'].items():
camera_processes[name] = {
'fps': mp.Value('d', float(config[name]['fps'])),
'fps': mp.Value('d', float(config['fps'])),
'skipped_fps': mp.Value('d', 0.0)
}
camera_process = mp.Process(target=track_camera, args=(name, config, FFMPEG_DEFAULT_CONFIG, GLOBAL_OBJECT_CONFIG,

View File

@ -27,7 +27,7 @@ def load_labels(path, encoding='utf-8'):
return {index: line.strip() for index, line in enumerate(lines)}
class ObjectDetector():
def __init__(self, model_file):
def __init__(self):
edge_tpu_delegate = None
try:
edge_tpu_delegate = load_delegate('libedgetpu.so.1.0')
@ -61,7 +61,7 @@ class ObjectDetector():
return detections
class EdgeTPUProcess():
def __init__(self, model):
def __init__(self):
# TODO: see if we can use the plasma store with a queue and maintain the same speeds
try:
sa.delete("frame")
@ -79,11 +79,11 @@ class EdgeTPUProcess():
self.detect_ready = mp.Event()
self.frame_ready = mp.Event()
self.fps = mp.Value('d', 0.0)
self.avg_inference_speed = mp.Value('d', 10.0)
self.avg_inference_speed = mp.Value('d', 0.01)
def run_detector(model, detect_ready, frame_ready, fps, avg_speed):
def run_detector(detect_ready, frame_ready, fps, avg_speed):
print(f"Starting detection process: {os.getpid()}")
object_detector = ObjectDetector(model)
object_detector = ObjectDetector()
input_frame = sa.attach("frame")
detections = sa.attach("detections")
fps_tracker = EventsPerSecond()
@ -103,7 +103,7 @@ class EdgeTPUProcess():
duration = datetime.datetime.now().timestamp()-start
avg_speed.value = (avg_speed.value*9 + duration)/10
self.detect_process = mp.Process(target=run_detector, args=(model, self.detect_ready, self.frame_ready, self.fps, self.avg_inference_speed))
self.detect_process = mp.Process(target=run_detector, args=(self.detect_ready, self.frame_ready, self.fps, self.avg_inference_speed))
self.detect_process.daemon = True
self.detect_process.start()

View File

@ -146,7 +146,7 @@ def track_camera(name, config, ffmpeg_global_config, global_objects_config, dete
mask[:] = 255
motion_detector = MotionDetector(frame_shape, mask, resize_factor=6)
object_detector = RemoteObjectDetector('/lab/labelmap.txt', detect_lock, detect_ready, frame_ready)
object_detector = RemoteObjectDetector('/labelmap.txt', detect_lock, detect_ready, frame_ready)
object_tracker = ObjectTracker(10)
@ -193,7 +193,7 @@ def track_camera(name, config, ffmpeg_global_config, global_objects_config, dete
motion_boxes = motion_detector.detect(frame)
# skip object detection if we are below the min_fps
if frame_num > 50 and fps.value < expected_fps-1:
if frame_num > 100 and fps.value < expected_fps-1:
skipped_fps_tracker.update()
skipped_fps.value = skipped_fps_tracker.eps()
continue