diff --git a/frigate/embeddings/onnx/base_embedding.py b/frigate/embeddings/onnx/base_embedding.py index c0bd58475b..5b514d1f60 100644 --- a/frigate/embeddings/onnx/base_embedding.py +++ b/frigate/embeddings/onnx/base_embedding.py @@ -57,6 +57,12 @@ class BaseEmbedding(ABC): def _preprocess_inputs(self, raw_inputs: Any) -> Any: pass + @staticmethod + def _bgr_to_rgb(frame: Any) -> Any: + if isinstance(frame, np.ndarray) and frame.ndim == 3: + return np.ascontiguousarray(frame[:, :, ::-1]) + return frame + def _process_image(self, image, output: str = "RGB") -> Image.Image: if isinstance(image, str): if image.startswith("http"): diff --git a/frigate/embeddings/onnx/face_embedding.py b/frigate/embeddings/onnx/face_embedding.py index 75dfedc94d..31d2bd2066 100644 --- a/frigate/embeddings/onnx/face_embedding.py +++ b/frigate/embeddings/onnx/face_embedding.py @@ -73,7 +73,7 @@ class FaceNetEmbedding(BaseEmbedding): self.tensor_output_details = self.runner.get_output_details() def _preprocess_inputs(self, raw_inputs): - pil = self._process_image(raw_inputs[0]) + pil = self._process_image(self._bgr_to_rgb(raw_inputs[0])) # handle images larger than input size width, height = pil.size @@ -159,7 +159,7 @@ class ArcfaceEmbedding(BaseEmbedding): ) def _preprocess_inputs(self, raw_inputs): - pil = self._process_image(raw_inputs[0]) + pil = self._process_image(self._bgr_to_rgb(raw_inputs[0])) # handle images larger than input size width, height = pil.size