diff --git a/frigate/embeddings/maintainer.py b/frigate/embeddings/maintainer.py index 78e0ab067..e536d5f11 100644 --- a/frigate/embeddings/maintainer.py +++ b/frigate/embeddings/maintainer.py @@ -292,11 +292,9 @@ class EmbeddingMaintainer(threading.Thread): f"Received classification config update for model: {model_name}" ) - # Update config self.config.classification.custom[model_name] = model_config - - # Check if processor already exists for this model existing_processor_index = None + for i, processor in enumerate(self.realtime_processors): if isinstance( processor, @@ -309,14 +307,12 @@ class EmbeddingMaintainer(threading.Thread): existing_processor_index = i break - # Remove existing processor if found if existing_processor_index is not None: logger.info( f"Removing existing classification processor for model: {model_name}" ) self.realtime_processors.pop(existing_processor_index) - # Add new processor if model_config.state_config is not None: processor = CustomStateClassificationProcessor( self.config, model_config, self.requestor, self.metrics diff --git a/web/src/components/classification/wizard/Step2StateArea.tsx b/web/src/components/classification/wizard/Step2StateArea.tsx index ca2503956..8f50aa85e 100644 --- a/web/src/components/classification/wizard/Step2StateArea.tsx +++ b/web/src/components/classification/wizard/Step2StateArea.tsx @@ -16,6 +16,8 @@ import { useResizeObserver } from "@/hooks/resize-observer"; import { useApiHost } from "@/api"; import { resolveCameraName } from "@/hooks/use-camera-friendly-name"; import Heading from "@/components/ui/heading"; +import { isMobile } from "react-device-detect"; +import { cn } from "@/lib/utils"; export type CameraAreaConfig = { camera: string; @@ -222,8 +224,18 @@ export default function Step2StateArea({ return (
-
-
+
+

{t("wizard.step2.cameras")}

{availableCameras.length > 0 ? ( diff --git a/web/src/components/classification/wizard/Step3ChooseExamples.tsx b/web/src/components/classification/wizard/Step3ChooseExamples.tsx index b26e07309..a4a96c5b3 100644 --- a/web/src/components/classification/wizard/Step3ChooseExamples.tsx +++ b/web/src/components/classification/wizard/Step3ChooseExamples.tsx @@ -15,6 +15,8 @@ import { Step1FormData } from "./Step1NameAndDefine"; import { Step2FormData } from "./Step2StateArea"; import useSWR from "swr"; import { baseUrl } from "@/api/baseUrl"; +import { isMobile } from "react-device-detect"; +import { cn } from "@/lib/utils"; export type Step3FormData = { examplesGenerated: boolean; @@ -245,7 +247,12 @@ export default function Step3ChooseExamples({
{t("wizard.step3.description")}
-
+
{!unknownImages || unknownImages.length === 0 ? (

@@ -253,11 +260,11 @@ export default function Step3ChooseExamples({

) : ( -
+
{unknownImages.slice(0, 24).map((imageName, index) => (