stop using pycoral libs for efficiency

This commit is contained in:
Blake Blackshear 2021-08-15 09:14:13 -05:00
parent 45798d6d14
commit 2181379475
3 changed files with 21 additions and 17 deletions

View File

@ -9,7 +9,6 @@ from abc import ABC, abstractmethod
from typing import Dict from typing import Dict
import numpy as np import numpy as np
from pycoral.adapters import detect
import tflite_runtime.interpreter as tflite import tflite_runtime.interpreter as tflite
from setproctitle import setproctitle from setproctitle import setproctitle
from tflite_runtime.interpreter import load_delegate from tflite_runtime.interpreter import load_delegate
@ -103,19 +102,25 @@ class LocalObjectDetector(ObjectDetector):
self.interpreter.set_tensor(self.tensor_input_details[0]["index"], tensor_input) self.interpreter.set_tensor(self.tensor_input_details[0]["index"], tensor_input)
self.interpreter.invoke() self.interpreter.invoke()
objects = detect.get_objects(self.interpreter, 0.4) boxes = self.interpreter.tensor(self.tensor_output_details[0]["index"])()[0]
class_ids = self.interpreter.tensor(self.tensor_output_details[1]["index"])()[0]
scores = self.interpreter.tensor(self.tensor_output_details[2]["index"])()[0]
count = int(
self.interpreter.tensor(self.tensor_output_details[3]["index"])()[0]
)
detections = np.zeros((20, 6), np.float32) detections = np.zeros((20, 6), np.float32)
for i, obj in enumerate(objects):
if i == 20: for i in range(count):
if scores[i] < 0.4 or i == 20:
break break
detections[i] = [ detections[i] = [
obj.id, class_ids[i],
obj.score, float(scores[i]),
obj.bbox.ymin, boxes[i][0],
obj.bbox.xmin, boxes[i][1],
obj.bbox.ymax, boxes[i][2],
obj.bbox.xmax, boxes[i][3],
] ]
return detections return detections

View File

@ -112,7 +112,7 @@ class EventCleanup(threading.Thread):
def expire(self, media_type): def expire(self, media_type):
## Expire events from unlisted cameras based on the global config ## Expire events from unlisted cameras based on the global config
if media_type == "clips": if media_type == "clips":
retain_config = self.config.clips.retain retain_config = self.config.record.events.retain
file_extension = "mp4" file_extension = "mp4"
update_params = {"has_clip": False} update_params = {"has_clip": False}
else: else:
@ -163,7 +163,7 @@ class EventCleanup(threading.Thread):
## Expire events from cameras based on the camera config ## Expire events from cameras based on the camera config
for name, camera in self.config.cameras.items(): for name, camera in self.config.cameras.items():
if media_type == "clips": if media_type == "clips":
retain_config = camera.clips.retain retain_config = camera.record.events.retain
else: else:
retain_config = camera.snapshots.retain retain_config = camera.snapshots.retain
# get distinct objects in database for this camera # get distinct objects in database for this camera

View File

@ -413,17 +413,16 @@ def detect(
object_detector, frame, model_shape, region, objects_to_track, object_filters object_detector, frame, model_shape, region, objects_to_track, object_filters
): ):
tensor_input = create_tensor_input(frame, model_shape, region) tensor_input = create_tensor_input(frame, model_shape, region)
scale = float(region[2] - region[0]) / model_shape[0]
detections = [] detections = []
region_detections = object_detector.detect(tensor_input) region_detections = object_detector.detect(tensor_input)
for d in region_detections: for d in region_detections:
box = d[2] box = d[2]
size = region[2] - region[0] size = region[2] - region[0]
x_min = int(max(0, box[1]) * scale + region[0]) x_min = int((box[1] * size) + region[0])
y_min = int(max(0, box[0]) * scale + region[1]) y_min = int((box[0] * size) + region[1])
x_max = int(min(frame.shape[1], box[3]) * scale + region[0]) x_max = int((box[3] * size) + region[0])
y_max = int(min(frame.shape[0], box[2]) * scale + region[1]) y_max = int((box[2] * size) + region[1])
det = ( det = (
d[0], d[0],
d[1], d[1],