Skip to content

Commit

Permalink
Warn users when creating large motion masks (#13435)
Browse files Browse the repository at this point in the history
  • Loading branch information
hawkeye217 authored Aug 30, 2024
1 parent 4ec136c commit a8dcc87
Showing 1 changed file with 45 additions and 0 deletions.
45 changes: 45 additions & 0 deletions web/src/components/settings/MotionMaskEditPane.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,29 @@ export default function MotionMaskEditPane({
return `Motion Mask ${count + 1}`;
}, [polygons]);

const polygonArea = useMemo(() => {
if (polygon && polygon.isFinished && scaledWidth && scaledHeight) {
const points = interpolatePoints(
polygon.points,
scaledWidth,
scaledHeight,
1,
1,
);

const n = points.length;
let area = 0;

for (let i = 0; i < n; i++) {
const [x1, y1] = points[i];
const [x2, y2] = points[(i + 1) % n];
area += x1 * y2 - y1 * x2;
}

return Math.abs(area) / 2;
}
}, [polygon, scaledWidth, scaledHeight]);

const formSchema = z
.object({
polygon: z.object({ name: z.string(), isFinished: z.boolean() }),
Expand Down Expand Up @@ -238,6 +261,28 @@ export default function MotionMaskEditPane({

<Separator className="my-3 bg-secondary" />

{polygonArea && polygonArea >= 0.35 && (
<>
<div className="mb-3 text-sm text-danger">
The motion mask is covering {Math.round(polygonArea * 100)}% of the
camera frame. Large motion masks are not recommended.
</div>
<div className="mb-3 text-sm text-primary">
Motion masks do not prevent objects from being detected. You should
use a required zone instead.
<Link
to="https://github.com/blakeblackshear/frigate/discussions/13040"
target="_blank"
rel="noopener noreferrer"
className="my-3 block"
>
Read the documentation{" "}
<LuExternalLink className="ml-2 inline-flex size-3" />
</Link>
</div>
</>
)}

<Form {...form}>
<form
onSubmit={form.handleSubmit(onSubmit)}
Expand Down

0 comments on commit a8dcc87

Please sign in to comment.