From 7556d08e1ca6c75fddc5b082e20f79361b7c87db Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Fri, 5 Apr 2024 07:25:23 -0500 Subject: [PATCH] initial working konva --- web/package-lock.json | 93 ++++++++- web/package.json | 2 + web/public/space_landscape.jpg | Bin 0 -> 147649 bytes web/src/api/ws.tsx | 28 +++ web/src/components/settings/DebugCanvas.tsx | 197 ++++++++++++++++++ web/src/components/settings/MotionTuner.tsx | 141 +++++++++++++ .../components/settings/PolygonDrawer-off.tsx | 180 ++++++++++++++++ web/src/components/settings/PolygonDrawer.tsx | 128 ++++++++++++ web/src/components/settings/Zones.tsx | 79 +++++++ web/src/hooks/use-double-click.ts | 50 +++++ web/src/pages/Settings.tsx | 32 ++- web/src/types/canvas.ts | 4 + web/src/utils/canvasUtil.ts | 45 ++++ web/vite.config.ts | 12 +- 14 files changed, 981 insertions(+), 10 deletions(-) create mode 100644 web/public/space_landscape.jpg create mode 100644 web/src/components/settings/DebugCanvas.tsx create mode 100644 web/src/components/settings/MotionTuner.tsx create mode 100644 web/src/components/settings/PolygonDrawer-off.tsx create mode 100644 web/src/components/settings/PolygonDrawer.tsx create mode 100644 web/src/components/settings/Zones.tsx create mode 100644 web/src/hooks/use-double-click.ts create mode 100644 web/src/types/canvas.ts create mode 100644 web/src/utils/canvasUtil.ts diff --git a/web/package-lock.json b/web/package-lock.json index 262c11421..a09f066ea 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -37,6 +37,7 @@ "hls.js": "^1.5.8", "idb-keyval": "^6.2.1", "immer": "^10.0.4", + "konva": "^9.3.6", "lucide-react": "^0.368.0", "monaco-yaml": "^5.1.1", "next-themes": "^0.3.0", @@ -47,6 +48,7 @@ "react-dom": "^18.2.0", "react-hook-form": "^7.51.3", "react-icons": "^5.0.1", + "react-konva": "^18.2.10", "react-router-dom": "^6.22.3", "react-swipeable": "^7.0.1", "react-tracked": "^1.7.14", @@ -2518,8 +2520,7 @@ "node_modules/@types/prop-types": { "version": "15.7.11", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", - "devOptional": true + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "node_modules/@types/react": { "version": "18.2.78", @@ -2550,6 +2551,14 @@ "react-icons": "*" } }, + "node_modules/@types/react-reconciler": { + "version": "0.28.8", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.8.tgz", + "integrity": "sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-transition-group": { "version": "4.4.10", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", @@ -2559,6 +2568,11 @@ "@types/react": "*" } }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" + }, "node_modules/@types/semver": { "version": "7.5.6", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", @@ -5046,6 +5060,17 @@ "node": ">=8" } }, + "node_modules/its-fine": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-1.1.3.tgz", + "integrity": "sha512-mncCA+yb6tuh5zK26cHqKlsSyxm4zdm4YgJpxycyx6p9fgxgK5PLu3iDVpKhzTn57Yrv3jk/r0aK0RFTT1OjFw==", + "dependencies": { + "@types/react-reconciler": "^0.28.0" + }, + "peerDependencies": { + "react": ">=18.0" + } + }, "node_modules/jest-diff": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", @@ -5177,6 +5202,25 @@ "json-buffer": "3.0.1" } }, + "node_modules/konva": { + "version": "9.3.6", + "resolved": "https://registry.npmjs.org/konva/-/konva-9.3.6.tgz", + "integrity": "sha512-dqR8EbcM0hjuilZCBP6xauQ5V3kH3m9kBcsDkqPypQuRgsXbcXUrxqYxhNbdvKZpYNW8Amq94jAD/C0NY3qfBQ==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/lavrton" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/konva" + }, + { + "type": "github", + "url": "https://github.com/sponsors/lavrton" + } + ] + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -6289,6 +6333,51 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "node_modules/react-konva": { + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/react-konva/-/react-konva-18.2.10.tgz", + "integrity": "sha512-ohcX1BJINL43m4ynjZ24MxFI1syjBdrXhqVxYVDw2rKgr3yuS0x/6m1Y2Z4sl4T/gKhfreBx8KHisd0XC6OT1g==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/lavrton" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/konva" + }, + { + "type": "github", + "url": "https://github.com/sponsors/lavrton" + } + ], + "dependencies": { + "@types/react-reconciler": "^0.28.2", + "its-fine": "^1.1.1", + "react-reconciler": "~0.29.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "konva": "^8.0.1 || ^7.2.5 || ^9.0.0", + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/react-reconciler": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.29.0.tgz", + "integrity": "sha512-wa0fGj7Zht1EYMRhKWwoo1H9GApxYLBuhoAuXN0TlltESAjDssB+Apf0T/DngVqaMyPypDmabL37vw/2aRM98Q==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, "node_modules/react-remove-scroll": { "version": "2.5.5", "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", diff --git a/web/package.json b/web/package.json index 626b9a409..c39567e4c 100644 --- a/web/package.json +++ b/web/package.json @@ -42,6 +42,7 @@ "hls.js": "^1.5.8", "idb-keyval": "^6.2.1", "immer": "^10.0.4", + "konva": "^9.3.6", "lucide-react": "^0.368.0", "monaco-yaml": "^5.1.1", "next-themes": "^0.3.0", @@ -52,6 +53,7 @@ "react-dom": "^18.2.0", "react-hook-form": "^7.51.3", "react-icons": "^5.0.1", + "react-konva": "^18.2.10", "react-router-dom": "^6.22.3", "react-swipeable": "^7.0.1", "react-tracked": "^1.7.14", diff --git a/web/public/space_landscape.jpg b/web/public/space_landscape.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc0987e5578be04550b310827dbc1ab09503767c GIT binary patch literal 147649 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%0D_B%b664 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 literal 0 HcmV?d00001 diff --git a/web/src/api/ws.tsx b/web/src/api/ws.tsx index a6638a94d..362a98749 100644 --- a/web/src/api/ws.tsx +++ b/web/src/api/ws.tsx @@ -206,3 +206,31 @@ export function useAudioActivity(camera: string): { payload: number } { } = useWs(`${camera}/audio/rms`, ""); return { payload: payload as number }; } + +export function useMotionThreshold(camera: string): { + payload: string; + send: (payload: number, retain?: boolean) => void; +} { + const { + value: { payload }, + send, + } = useWs( + `${camera}/motion_threshold/state`, + `${camera}/motion_threshold/set`, + ); + return { payload: payload as string, send }; +} + +export function useMotionContourArea(camera: string): { + payload: string; + send: (payload: number, retain?: boolean) => void; +} { + const { + value: { payload }, + send, + } = useWs( + `${camera}/motion_contour_area/state`, + `${camera}/motion_contour_area/set`, + ); + return { payload: payload as string, send }; +} diff --git a/web/src/components/settings/DebugCanvas.tsx b/web/src/components/settings/DebugCanvas.tsx new file mode 100644 index 000000000..e0739fc15 --- /dev/null +++ b/web/src/components/settings/DebugCanvas.tsx @@ -0,0 +1,197 @@ +import React, { useMemo, useRef, useState, useEffect } from "react"; +import PolygonDrawer from "./PolygonDrawer"; +import { Stage, Layer, Image } from "react-konva"; +import Konva from "konva"; +import type { KonvaEventObject } from "konva/lib/Node"; +import { Button } from "../ui/button"; + +const videoSource = "./space_landscape.jpg"; + +const wrapperStyle: React.CSSProperties = { + display: "flex", + justifyContent: "center", + marginTop: 20, + backgroundColor: "aliceblue", +}; + +const columnStyle: React.CSSProperties = { + display: "flex", + justifyContent: "center", + flexDirection: "column", + alignItems: "center", + marginTop: 20, + backgroundColor: "aliceblue", +}; + +export function DebugCanvas() { + const [image, setImage] = useState(); + const imageRef = useRef(null); + const dataRef = useRef(null); + const stageRef = useRef(null); + const [points, setPoints] = useState([]); + const [size, setSize] = useState<{ width: number; height: number }>({ + width: 0, + height: 0, + }); + const [flattenedPoints, setFlattenedPoints] = useState([]); + const [position, setPosition] = useState([0, 0]); + const [isMouseOverPoint, setMouseOverPoint] = useState(false); + const [isPolyComplete, setPolyComplete] = useState(false); + + const videoElement = useMemo(() => { + const element = new window.Image(); + element.width = 650; + element.height = 302; + element.src = videoSource; + return element; + }, []); // No dependency needed here since videoSource is a constant + + useEffect(() => { + const onload = function () { + setSize({ + width: videoElement.width, + height: videoElement.height, + }); + setImage(videoElement); + if (imageRef.current) imageRef.current = videoElement; + }; + videoElement.addEventListener("load", onload); + return () => { + videoElement.removeEventListener("load", onload); + }; + }, [videoElement]); + + const getMousePos = (stage: Konva.Stage) => { + return [stage.getPointerPosition()!.x, stage.getPointerPosition()!.y]; + }; + + const handleMouseDown = (e: KonvaEventObject) => { + if (isPolyComplete) return; + const stage = e.target.getStage()!; + const mousePos = getMousePos(stage); + if (isMouseOverPoint && points.length >= 3) { + setPolyComplete(true); + } else { + setPoints([...points, mousePos]); + } + }; + + const handleMouseMove = (e: KonvaEventObject) => { + const stage = e.target.getStage()!; + const mousePos = getMousePos(stage); + setPosition(mousePos); + }; + + const handleMouseOverStartPoint = (e: KonvaEventObject) => { + if (isPolyComplete || points.length < 3) return; + e.currentTarget.scale({ x: 3, y: 3 }); + setMouseOverPoint(true); + }; + + const handleMouseOutStartPoint = (e: KonvaEventObject) => { + e.currentTarget.scale({ x: 1, y: 1 }); + setMouseOverPoint(false); + }; + + const handlePointDragMove = (e: KonvaEventObject) => { + const stage = e.target.getStage(); + if (stage) { + const index = e.target.index - 1; + const pos = [e.target._lastPos!.x, e.target._lastPos!.y]; + if (pos[0] < 0) pos[0] = 0; + if (pos[1] < 0) pos[1] = 0; + if (pos[0] > stage.width()) pos[0] = stage.width(); + if (pos[1] > stage.height()) pos[1] = stage.height(); + setPoints([...points.slice(0, index), pos, ...points.slice(index + 1)]); + } + }; + + useEffect(() => { + setFlattenedPoints( + points + .concat(isPolyComplete ? [] : position) + .reduce((a, b) => a.concat(b), []), + ); + }, [points, isPolyComplete, position]); + + const undo = () => { + setPoints(points.slice(0, -1)); + setPolyComplete(false); + setPosition(points[points.length - 1]); + }; + + const reset = () => { + setPoints([]); + setPolyComplete(false); + }; + + const handleGroupDragEnd = (e: KonvaEventObject) => { + if (e.target.name() === "polygon") { + const result: number[][] = []; + const copyPoints = [...points]; + copyPoints.map((point) => + result.push([point[0] + e.target.x(), point[1] + e.target.y()]), + ); + e.target.position({ x: 0, y: 0 }); + setPoints(result); + } + }; + + return ( +
+
+ + + + + + +
+
+
+
+
{JSON.stringify(points)}
+
+
+ ); +} + +export default DebugCanvas; diff --git a/web/src/components/settings/MotionTuner.tsx b/web/src/components/settings/MotionTuner.tsx new file mode 100644 index 000000000..bb49bd052 --- /dev/null +++ b/web/src/components/settings/MotionTuner.tsx @@ -0,0 +1,141 @@ +import Heading from "@/components/ui/heading"; +import { + Select, + SelectContent, + SelectGroup, + SelectItem, + SelectLabel, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import DebugCameraImage from "@/components/camera/DebugCameraImage"; +import { FrigateConfig } from "@/types/frigateConfig"; +import useSWR from "swr"; +import ActivityIndicator from "@/components/indicators/activity-indicator"; +import { useCallback, useMemo, useState } from "react"; +import { Slider } from "@/components/ui/slider"; +import { Label } from "@/components/ui/label"; +import { useMotionContourArea, useMotionThreshold } from "@/api/ws"; + +export default function MotionTuner() { + const { data: config } = useSWR("config"); + + const cameras = useMemo(() => { + if (!config) { + return []; + } + + return Object.values(config.cameras) + .filter((conf) => conf.ui.dashboard && conf.enabled) + .sort((aConf, bConf) => aConf.ui.order - bConf.ui.order); + }, [config]); + + const [selectedCamera, setSelectedCamera] = useState(cameras[0].name); + + const cameraConfig = useMemo(() => { + if (config && selectedCamera) { + return config.cameras[selectedCamera]; + } + }, [config, selectedCamera]); + + const motionThreshold = useMemo(() => { + return cameraConfig?.motion.threshold ?? 0; + }, [cameraConfig?.motion.threshold]); + + const motionContourArea = useMemo( + () => cameraConfig?.motion.contour_area ?? 0, + [cameraConfig?.motion.contour_area], + ); + + const { send: sendMotionThreshold } = useMotionThreshold(selectedCamera); + const { send: sendMotionContourArea } = useMotionContourArea(selectedCamera); + + const setMotionThreshold = useCallback( + (threshold: number) => { + if (cameraConfig && threshold != motionThreshold) { + cameraConfig.motion.threshold = threshold; + sendMotionThreshold(threshold); + console.log("setting motion threshold", threshold); + } + }, + [cameraConfig, motionThreshold, sendMotionThreshold], + ); + + const setMotionContourArea = useCallback( + (contour_area: number) => { + if (cameraConfig && contour_area != motionContourArea) { + cameraConfig.motion.contour_area = contour_area; + sendMotionContourArea(contour_area); + console.log("setting motion contour area", contour_area); + } + }, + [cameraConfig, motionContourArea, sendMotionContourArea], + ); + + if (!cameraConfig && !selectedCamera) { + return ; + } + + // console.log("selected camera", selectedCamera); + // console.log("threshold", motionThreshold); + // console.log("contour area", motionContourArea); + // console.log(cameraConfig); + + return ( + <> + Motion Detection Tuner +
+ +
+ +
+
+ setMotionThreshold(value[0])} + /> + +
+
+ setMotionContourArea(value[0])} + /> + +
+
+ + ); +} diff --git a/web/src/components/settings/PolygonDrawer-off.tsx b/web/src/components/settings/PolygonDrawer-off.tsx new file mode 100644 index 000000000..64fbd6e71 --- /dev/null +++ b/web/src/components/settings/PolygonDrawer-off.tsx @@ -0,0 +1,180 @@ +import { useEffect, useRef, useState } from "react"; +import Konva from "konva"; +import { Stage, Layer, Line, Circle, Transformer } from "react-konva"; +import useDoubleClick from "@/hooks/use-double-click"; + +export default function PolygonDrawer() { + const [points, setPoints] = useState([]); + const [anchors, setAnchors] = useState([]); + const [lastPointIndex, setLastPointIndex] = useState(0); + const [isDrawing, setIsDrawing] = useState(false); + const [selectedAnchorIndex, setSelectedAnchorIndex] = useState( + null, + ); + const containerRef = useRef(null); + const stageRef = useRef(null); + const layerRef = useRef(null); + + const handleMouseDown = () => { + if (!stageRef.current) { + return; + } + + const stage = stageRef.current.getStage(); + const mousePos = stage?.getPointerPosition(); + if (!mousePos) return; + + const updatedPoints = [...points]; + updatedPoints.push(mousePos.x, mousePos.y); + setPoints(updatedPoints); + + const newAnchor = new Konva.Circle({ + x: mousePos.x, + y: mousePos.y, + radius: 5, + fill: "blue", + draggable: true, + name: "anchor", + }); + setAnchors((prevAnchors) => [...prevAnchors, newAnchor]); + layerRef.current?.add(newAnchor); + + setIsDrawing(true); + }; + console.log(isDrawing); + + const handleMouseMove = () => { + const stage = stageRef.current?.getStage(); + const mousePos = stage?.getPointerPosition(); + if (!mousePos || !isDrawing) return; + + const updatedPoints = [...points]; + updatedPoints[updatedPoints.length - 2] = mousePos.x; + updatedPoints[updatedPoints.length - 1] = mousePos.y; + setPoints(updatedPoints); + layerRef.current?.batchDraw(); + }; + + const handleDoubleClick = () => { + alert("double clicked 1"); + const layer = layerRef.current; + console.log(layer); + if (!layer) return; + console.log("double clicked"); + document.body.style.background = "red"; + + const tempLine = layerRef.current.findOne(".temp"); + if (tempLine) tempLine.destroy(); + + const polyObj = new Konva.Line({ + points, + name: "poly", + fill: "green", + stroke: "red", + strokeWidth: 1, + draggable: true, + closed: true, + hitStrokeWidth: 10, + }); + layerRef.current.add(polyObj); + layerRef.current.batchDraw(); + + setIsDrawing(false); + setLastPointIndex(0); + setPoints([]); + setAnchors([]); + }; + + const handleStageClick = (e: Konva.KonvaEventObject) => { + const clickedTarget = e.target; + if (clickedTarget instanceof Konva.Circle) { + const index = anchors.findIndex((anchor) => anchor === clickedTarget); + setSelectedAnchorIndex(index); + } else { + setSelectedAnchorIndex(null); + } + }; + + const handleAnchorDragMove = (index: number) => { + const stage = stageRef.current?.getStage(); + const mousePos = stage?.getPointerPosition(); + if (!mousePos) return; + + const updatedAnchors = [...anchors]; + updatedAnchors[index] = new Konva.Circle({ + ...updatedAnchors[index].attrs, + x: mousePos.x, + y: mousePos.y, + }); + setAnchors(updatedAnchors); + + const updatedPoints = [...points]; + updatedPoints[index * 2] = mousePos.x; + updatedPoints[index * 2 + 1] = mousePos.y; + setPoints(updatedPoints); + + layerRef.current?.batchDraw(); + }; + + useEffect(() => { + const stage = stageRef.current; + if (stage) { + console.log(stage); + stage.on("mousedown", handleMouseDown); + stage.on("mousemove", handleMouseMove); + stage.on("dblclick", handleDoubleClick); + } + return () => { + if (stage) { + stage.off("mousedown", handleMouseDown); + stage.off("mousemove", handleMouseMove); + stage.off("dblclick", handleDoubleClick); + } + }; + }, []); + + console.log(points); + + return ( +
+ { + // e.cancelBubble = true; + // console.log("dbl"); + // handleDoubleClick(); + // }} + // onMouseDown={handleMouseDown} + // onMouseMove={handleMouseMove} + // onClick={handleStageClick} + ref={stageRef} + > + + {isDrawing && ( + + )} + {anchors.map((anchor, index) => ( + handleAnchorDragMove(index, e)} + /> + ))} + + +
debug
+
+ ); +} diff --git a/web/src/components/settings/PolygonDrawer.tsx b/web/src/components/settings/PolygonDrawer.tsx new file mode 100644 index 000000000..8e95f70d3 --- /dev/null +++ b/web/src/components/settings/PolygonDrawer.tsx @@ -0,0 +1,128 @@ +import { useState } from "react"; +import { Line, Circle, Group } from "react-konva"; +import { minMax, dragBoundFunc } from "@/utils/canvasUtil"; +import type { KonvaEventObject } from "konva/lib/Node"; +import Konva from "konva"; +import { Vector2d } from "konva/lib/types"; + +type PolygonDrawerProps = { + points: number[][]; + flattenedPoints: number[]; + isFinished: boolean; + handlePointDragMove: (e: KonvaEventObject) => void; + handleGroupDragEnd: (e: KonvaEventObject) => void; + handleMouseOverStartPoint: (e: KonvaEventObject) => void; + handleMouseOutStartPoint: (e: KonvaEventObject) => void; +}; + +export default function PolygonDrawer({ + points, + flattenedPoints, + isFinished, + handlePointDragMove, + handleGroupDragEnd, + handleMouseOverStartPoint, + handleMouseOutStartPoint, +}: PolygonDrawerProps) { + const vertexRadius = 6; + + const [stage, setStage] = useState(); + + const [minMaxX, setMinMaxX] = useState<[number, number]>([0, 0]); //min and max in x axis + const [minMaxY, setMinMaxY] = useState<[number, number]>([0, 0]); //min and max in y axis + + const handleGroupMouseOver = (e: Konva.KonvaEventObject) => { + if (!isFinished) return; + e.target.getStage()!.container().style.cursor = "move"; + setStage(e.target.getStage()!); + }; + + const handleGroupMouseOut = (e: Konva.KonvaEventObject) => { + if (!e.target) return; + e.target.getStage()!.container().style.cursor = "default"; + }; + + const handleGroupDragStart = () => { + const arrX = points.map((p) => p[0]); + const arrY = points.map((p) => p[1]); + setMinMaxX(minMax(arrX)); + setMinMaxY(minMax(arrY)); + }; + + const groupDragBound = (pos: Vector2d) => { + if (!stage) { + return pos; + } + let { x, y } = pos; + const sw = stage.width(); + const sh = stage.height(); + if (minMaxY[0] + y < 0) y = -1 * minMaxY[0]; + if (minMaxX[0] + x < 0) x = -1 * minMaxX[0]; + if (minMaxY[1] + y > sh) y = sh - minMaxY[1]; + if (minMaxX[1] + x > sw) x = sw - minMaxX[1]; + return { x, y }; + }; + + // const flattenedPointsAsNumber = useMemo( + // () => flattenedPoints.flatMap((point) => [point.x, point.y]), + // [flattenedPoints], + // ); + + return ( + + + {points.map((point, index) => { + const x = point[0] - vertexRadius / 2; + const y = point[1] - vertexRadius / 2; + const startPointAttr = + index === 0 + ? { + hitStrokeWidth: 12, + onMouseOver: handleMouseOverStartPoint, + onMouseOut: handleMouseOutStartPoint, + } + : null; + return ( + { + if (stage) { + return dragBoundFunc( + stage.width(), + stage.height(), + vertexRadius, + pos, + ); + } else { + return pos; // Return original pos if stage is not defined + } + }} + {...startPointAttr} + /> + ); + })} + + ); +} diff --git a/web/src/components/settings/Zones.tsx b/web/src/components/settings/Zones.tsx new file mode 100644 index 000000000..a8f01c5c8 --- /dev/null +++ b/web/src/components/settings/Zones.tsx @@ -0,0 +1,79 @@ +import Heading from "@/components/ui/heading"; +import { + Select, + SelectContent, + SelectGroup, + SelectItem, + SelectLabel, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import DebugCameraImage from "@/components/camera/DebugCameraImage"; +import { FrigateConfig } from "@/types/frigateConfig"; +import useSWR from "swr"; +import ActivityIndicator from "@/components/indicators/activity-indicator"; +import { useCallback, useMemo, useState } from "react"; +import { Slider } from "@/components/ui/slider"; +import { Label } from "@/components/ui/label"; +import { useMotionContourArea, useMotionThreshold } from "@/api/ws"; +import DebugCanvas from "./DebugCanvas"; + +export default function SettingsZones() { + const { data: config } = useSWR("config"); + + const cameras = useMemo(() => { + if (!config) { + return []; + } + + return Object.values(config.cameras) + .filter((conf) => conf.ui.dashboard && conf.enabled) + .sort((aConf, bConf) => aConf.ui.order - bConf.ui.order); + }, [config]); + + const [selectedCamera, setSelectedCamera] = useState(cameras[0].name); + + const cameraConfig = useMemo(() => { + if (config && selectedCamera) { + return config.cameras[selectedCamera]; + } + }, [config, selectedCamera]); + + if (!cameraConfig && !selectedCamera) { + return ; + } + + // console.log("selected camera", selectedCamera); + // console.log("threshold", motionThreshold); + // console.log("contour area", motionContourArea); + // console.log(cameraConfig); + + return ( + <> + Motion Detection Tuner +
+ +
+ + + + ); +} diff --git a/web/src/hooks/use-double-click.ts b/web/src/hooks/use-double-click.ts new file mode 100644 index 000000000..db3048f20 --- /dev/null +++ b/web/src/hooks/use-double-click.ts @@ -0,0 +1,50 @@ +import { useEffect, MutableRefObject } from "react"; + +/** + * A simple React hook for differentiating single and double clicks on the same component. + * + * @param ref Dom node to watch for double clicks + * @param latency The amount of time (in milliseconds) to wait before differentiating a single from a double click + * @param onSingleClick A callback function for single click events + * @param onDoubleClick A callback function for double click events + */ +const useDoubleClick = ({ + ref, + latency = 300, + onSingleClick = () => null, + onDoubleClick = () => null, +}: { + ref: MutableRefObject; + latency?: number; + onSingleClick?: (e: MouseEvent) => void; + onDoubleClick?: (e: MouseEvent) => void; +}) => { + useEffect(() => { + const clickRef = ref.current; + let clickCount = 0; + const handleClick = (e: MouseEvent) => { + clickCount += 1; + + setTimeout(() => { + if (clickCount === 1) onSingleClick(e); + else if (clickCount === 2) onDoubleClick(e); + + clickCount = 0; + }, latency); + }; + + // Add event listener for click events + if (clickRef) { + clickRef.addEventListener("click", handleClick); + } + + // Remove event listener + return () => { + if (clickRef) { + clickRef.removeEventListener("click", handleClick); + } + }; + }, [ref, latency, onSingleClick, onDoubleClick]); +}; + +export default useDoubleClick; diff --git a/web/src/pages/Settings.tsx b/web/src/pages/Settings.tsx index b80040203..65cf793f3 100644 --- a/web/src/pages/Settings.tsx +++ b/web/src/pages/Settings.tsx @@ -10,8 +10,11 @@ import { SelectValue, } from "@/components/ui/select"; import { Switch } from "@/components/ui/switch"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import MotionTuner from "@/components/settings/MotionTuner"; +import SettingsZones from "@/components/settings/Zones"; -function Settings() { +function General() { return ( <> Settings @@ -41,4 +44,29 @@ function Settings() { ); } -export default Settings; +export default function Settings() { + return ( + <> + + + General + Objects + Zones + Masks + Motion + + + + + Objects + + + + Masks + + + + + + ); +} diff --git a/web/src/types/canvas.ts b/web/src/types/canvas.ts new file mode 100644 index 000000000..6522523a5 --- /dev/null +++ b/web/src/types/canvas.ts @@ -0,0 +1,4 @@ +export type Point = { + x: number; + y: number; +}; diff --git a/web/src/utils/canvasUtil.ts b/web/src/utils/canvasUtil.ts new file mode 100644 index 000000000..7a7bc25cd --- /dev/null +++ b/web/src/utils/canvasUtil.ts @@ -0,0 +1,45 @@ +export const getAveragePoint = (points: number[]): number => { + let totalX = 0; + let totalY = 0; + for (let i = 0; i < points.length; i += 2) { + totalX += points[i]; + totalY += points[i + 1]; + } + return { + x: totalX / (points.length / 2), + y: totalY / (points.length / 2), + }; +}; + +export const getDistance = (node1: number[], node2: number[]): string => { + const diffX = Math.abs(node1[0] - node2[0]); + const diffY = Math.abs(node1[1] - node2[1]); + const distanceInPixel = Math.sqrt(diffX * diffX + diffY * diffY); + return distanceInPixel.toFixed(2); +}; + +export const dragBoundFunc = ( + stageWidth: number, + stageHeight: number, + vertexRadius: number, + pos: Point, +): Point => { + let x = pos.x; + let y = pos.y; + if (pos.x + vertexRadius > stageWidth) x = stageWidth; + if (pos.x - vertexRadius < 0) x = 0; + if (pos.y + vertexRadius > stageHeight) y = stageHeight; + if (pos.y - vertexRadius < 0) y = 0; + return { x, y }; +}; + +export const minMax = (points: number[]): [number, number] => { + return points.reduce( + (acc: [number | undefined, number | undefined], val) => { + acc[0] = acc[0] === undefined || val < acc[0] ? val : acc[0]; + acc[1] = acc[1] === undefined || val > acc[1] ? val : acc[1]; + return acc; + }, + [undefined, undefined], + ) as [number, number]; +}; diff --git a/web/vite.config.ts b/web/vite.config.ts index 5afefa331..b914f76c9 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -12,24 +12,24 @@ export default defineConfig({ server: { proxy: { "/api": { - target: "http://localhost:5000", + target: "http://192.168.5.4:5000", ws: true, }, "/vod": { - target: "http://localhost:5000", + target: "http://192.168.5.4:5000", }, "/clips": { - target: "http://localhost:5000", + target: "http://192.168.5.4:5000", }, "/exports": { - target: "http://localhost:5000", + target: "http://192.168.5.4:5000", }, "/ws": { - target: "ws://localhost:5000", + target: "ws://192.168.5.4:5000", ws: true, }, "/live": { - target: "ws://localhost:5000", + target: "ws://192.168.5.4:5000", changeOrigin: true, ws: true, },