diff --git a/frigate/http.py b/frigate/http.py index f27d7f7ea..fc7beffb9 100644 --- a/frigate/http.py +++ b/frigate/http.py @@ -30,7 +30,6 @@ from tzlocal import get_localzone_name from frigate.config import FrigateConfig from frigate.const import ( - ALL_ATTRIBUTE_LABELS, CLIPS_DIR, MAX_SEGMENT_DURATION, RECORD_DIR, @@ -417,14 +416,19 @@ def set_sub_label(id): @bp.route("/labels") def get_labels(): + camera = request.args.get("camera", type=str, default="") + try: - events = Event.select(Event.label).distinct() + if camera: + events = Event.select(Event.label).where(Event.camera == camera).distinct() + else: + events = Event.select(Event.label).distinct() except Exception as e: return jsonify( {"success": False, "message": f"Failed to get labels: {e}"}, "404" ) - labels = sorted([e.label for e in events if e.label not in ALL_ATTRIBUTE_LABELS]) + labels = sorted([e.label for e in events]) return jsonify(labels) diff --git a/web/src/routes/Camera.jsx b/web/src/routes/Camera.jsx index 7f5e3ca77..723760663 100644 --- a/web/src/routes/Camera.jsx +++ b/web/src/routes/Camera.jsx @@ -22,6 +22,7 @@ const emptyObject = Object.freeze({}); export default function Camera({ camera }) { const { data: config } = useSWR('config'); + const { data: trackedLabels } = useSWR(['labels', { camera }]); const apiHost = useApiHost(); const [showSettings, setShowSettings] = useState(false); const [viewMode, setViewMode] = useState('live'); @@ -121,7 +122,9 @@ export default function Camera({ camera }) {
@@ -203,7 +206,7 @@ export default function Camera({ camera }) {
Tracked objects
- {cameraConfig.objects.track.map((objectType) => ( + {trackedLabels.map((objectType) => (