Compare commits

..

2 Commits

Author SHA1 Message Date
Nicolas Mowen
edeab2f491 Ensure motion is correctly set when adjusting masks 2025-12-11 21:35:03 -07:00
Josh Hawkins
4b3c0b019d don't require restart when deleting zone or mask 2025-12-11 15:08:02 -06:00
3 changed files with 21 additions and 10 deletions

View File

@ -239,6 +239,12 @@ class ImprovedMotionDetector(MotionDetector):
)
self.mask = np.where(resized_mask == [0])
# Reset motion detection state when mask changes
# so motion detection can quickly recalibrate with the new mask
self.avg_frame = np.zeros(self.motion_frame_size, np.float32)
self.calibrating = True
self.motion_frame_count = 0
def stop(self) -> None:
"""stop the motion detector."""
pass

View File

@ -771,6 +771,7 @@ def process_frames(
camera_enabled = camera_config.enabled
if "motion" in updated_configs:
motion_detector.config = camera_config.motion
motion_detector.update_mask()
if (

View File

@ -26,7 +26,7 @@ import {
toRGBColorString,
} from "@/utils/canvasUtil";
import { Polygon, PolygonType } from "@/types/canvas";
import { useCallback, useContext, useMemo, useState } from "react";
import { useCallback, useMemo, useState } from "react";
import axios from "axios";
import { Toaster } from "@/components/ui/sonner";
import { toast } from "sonner";
@ -34,7 +34,6 @@ import useSWR from "swr";
import { FrigateConfig } from "@/types/frigateConfig";
import { reviewQueries } from "@/utils/zoneEdutUtil";
import IconWrapper from "../ui/icon-wrapper";
import { StatusBarMessagesContext } from "@/context/statusbar-provider";
import { buttonVariants } from "../ui/button";
import { Trans, useTranslation } from "react-i18next";
@ -61,7 +60,6 @@ export default function PolygonItem({
const { data: config, mutate: updateConfig } =
useSWR<FrigateConfig>("config");
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
const { addMessage } = useContext(StatusBarMessagesContext)!;
const [isLoading, setIsLoading] = useState(false);
const cameraConfig = useMemo(() => {
@ -171,10 +169,22 @@ export default function PolygonItem({
}
}
const updateTopicType =
polygon.type === "zone"
? "zones"
: polygon.type === "motion_mask"
? "motion"
: polygon.type === "object_mask"
? "objects"
: polygon.type;
setIsLoading(true);
await axios
.put(`config/set?${url}`, { requires_restart: 0 })
.put(`config/set?${url}`, {
requires_restart: 0,
update_topic: `config/cameras/${polygon.camera}/${updateTopicType}`,
})
.then((res) => {
if (res.status === 200) {
toast.success(
@ -220,12 +230,6 @@ export default function PolygonItem({
const handleDelete = () => {
setActivePolygonIndex(undefined);
saveToConfig(polygon);
addMessage(
"masks_zones",
t("masksAndZones.restart_required"),
undefined,
"masks_zones",
);
};
return (