Parcourir la source

cleanup detection shms

Blake Blackshear il y a 4 ans
Parent
commit
e4da3822b1
2 fichiers modifiés avec 11 ajouts et 3 suppressions
  1. 9 1
      detect_objects.py
  2. 2 2
      frigate/edgetpu.py

+ 9 - 1
detect_objects.py

@@ -174,10 +174,15 @@ def main():
     # Queue for clip processing
     event_queue = mp.Queue()
 
-    # create the detection pipes
+    # create the detection pipes and shms
     out_events = {}
+    camera_shms = []
     for name in CONFIG['cameras'].keys():
         out_events[name] = mp.Event()
+        shm_in = mp.shared_memory.SharedMemory(name=name, create=True, size=300*300*3)
+        shm_out = mp.shared_memory.SharedMemory(name=f"out-{name}", create=True, size=20*6*4)
+        camera_shms.append(shm_in)
+        camera_shms.append(shm_out)
 
     detection_queue = mp.Queue()
 
@@ -302,6 +307,9 @@ def main():
             camera_process['capture_thread'].join()
         for detector in detectors:
             detector.stop()
+        for shm in camera_shms:
+            shm.close()
+            shm.unlink()
         sys.exit()
     
     signal.signal(signal.SIGTERM, receiveSignal)

+ 2 - 2
frigate/edgetpu.py

@@ -165,9 +165,9 @@ class RemoteObjectDetector():
         self.fps = EventsPerSecond()
         self.detection_queue = detection_queue
         self.event = event
-        self.shm = mp.shared_memory.SharedMemory(name=self.name, create=True, size=300*300*3)
+        self.shm = mp.shared_memory.SharedMemory(name=self.name, create=False)
         self.np_shm = np.ndarray((1,300,300,3), dtype=np.uint8, buffer=self.shm.buf)
-        self.out_shm = mp.shared_memory.SharedMemory(name=f"out-{self.name}", create=True, size=20*6*4)
+        self.out_shm = mp.shared_memory.SharedMemory(name=f"out-{self.name}", create=False)
         self.out_np_shm = np.ndarray((20,6), dtype=np.float32, buffer=self.out_shm.buf)
     
     def detect(self, tensor_input, threshold=.4):