Blake Blackshear 5 yıl önce
ebeveyn
işleme
05951aa7da
3 değiştirilmiş dosya ile 10 ekleme ve 16 silme
  1. 2 8
      detect_objects.py
  2. 6 6
      frigate/edgetpu.py
  3. 2 2
      frigate/video.py

+ 2 - 8
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, 

+ 6 - 6
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()
 

+ 2 - 2
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