diff --git a/detect_objects.py b/detect_objects.py index 5d549801e..efd6ec089 100644 --- a/detect_objects.py +++ b/detect_objects.py @@ -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, diff --git a/frigate/edgetpu.py b/frigate/edgetpu.py index 6532d2096..3ba4b3f0e 100644 --- a/frigate/edgetpu.py +++ b/frigate/edgetpu.py @@ -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() diff --git a/frigate/video.py b/frigate/video.py index 937a448ca..13890d928 100755 --- a/frigate/video.py +++ b/frigate/video.py @@ -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