Warn users when creating large motion masks (#13435)

This commit is contained in:
Josh Hawkins 2024-08-30 08:34:12 -05:00 committed by GitHub
parent 4ec136cab0
commit a8dcc87019
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -73,6 +73,29 @@ export default function MotionMaskEditPane({
return `Motion Mask ${count + 1}`; return `Motion Mask ${count + 1}`;
}, [polygons]); }, [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 const formSchema = z
.object({ .object({
polygon: z.object({ name: z.string(), isFinished: z.boolean() }), polygon: z.object({ name: z.string(), isFinished: z.boolean() }),
@ -238,6 +261,28 @@ export default function MotionMaskEditPane({
<Separator className="my-3 bg-secondary" /> <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 {...form}>
<form <form
onSubmit={form.handleSubmit(onSubmit)} onSubmit={form.handleSubmit(onSubmit)}