@camera.ui/server 2.2.8 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +8 -1
- package/dist/interface/assets/{404-BYV0u5qE.js → 404-C0X5UBF4.js} +1 -1
- package/dist/interface/assets/About-Ctp_u5qK.js +1 -0
- package/dist/interface/assets/Assistant-Bj2bAUHD.css +1 -0
- package/dist/interface/assets/Assistant-CDrBV_mg.js +1 -0
- package/dist/interface/assets/Automation-Dp6V80Iz.js +3 -0
- package/dist/interface/assets/{Automation-BSicfOGF.css → Automation-R5o9sXYY.css} +1 -1
- package/dist/interface/assets/{AutomationImport-Iu-K82Os.js → AutomationImport-DKgg7atE.js} +2 -2
- package/dist/interface/assets/AutomationStore-CU-m5VC8.js +2 -0
- package/dist/interface/assets/{AutomationStoreDetail-BbvLRJ5u.js → AutomationStoreDetail-CiyIs8Iu.js} +2 -2
- package/dist/interface/assets/Automations-Dljh-sWu.js +2 -0
- package/dist/interface/assets/Camera-0p0P_mbp.css +1 -0
- package/dist/interface/assets/Camera-Bvovab-8.js +2 -0
- package/dist/interface/assets/{CameraConsole-JBD3ZmJ6.js → CameraConsole-D_Fv-MAi.js} +1 -1
- package/dist/interface/assets/{Cameras-R5mJGMK9.js → Cameras-Cq7Gw-fk.js} +2 -2
- package/dist/interface/assets/{Camview-DH6_8CxH.css → Camview-Bs2VvmUS.css} +1 -1
- package/dist/interface/assets/Camview-CP6PA20C.js +1 -0
- package/dist/interface/assets/{CertificateUpload-B9S4EOQs.js → CertificateUpload-DjzNMFc3.js} +1 -1
- package/dist/interface/assets/{Config-CbFl5Wcp.js → Config-Dl2TlyFe.js} +1 -1
- package/dist/interface/assets/{ConfigActionAssistant-DIOh6-np.js → ConfigActionAssistant-DCkJ_Iqq.js} +1 -1
- package/dist/interface/assets/ConfigActionCameraControl-2pzl59gR.js +1 -0
- package/dist/interface/assets/{ConfigActionDelay-B9i4YZjy.js → ConfigActionDelay-BAp1dr0N.js} +1 -1
- package/dist/interface/assets/{ConfigActionHttp-DFtxAa3U.js → ConfigActionHttp-_kqgEuun.js} +1 -1
- package/dist/interface/assets/{ConfigActionImageInput-CuTH4Nw2.js → ConfigActionImageInput-BgtACnCm.js} +1 -1
- package/dist/interface/assets/{ConfigActionMqtt-B9SfWP-G.js → ConfigActionMqtt-z7UzccW5.js} +1 -1
- package/dist/interface/assets/{ConfigActionNotification-BGMIByJT.js → ConfigActionNotification-bhbb5AqU.js} +1 -1
- package/dist/interface/assets/{ConfigActionNotificationControl-Cz72szMd.js → ConfigActionNotificationControl-BbvX8MFu.js} +1 -1
- package/dist/interface/assets/{ConfigActionOutput-BG6DoIRe.js → ConfigActionOutput-DdgSg3FU.js} +1 -1
- package/dist/interface/assets/{ConfigActionPlugin-B5oRSE9n.js → ConfigActionPlugin-DGjZd1L0.js} +1 -1
- package/dist/interface/assets/ConfigActionSensor-DmImWFAo.js +1 -0
- package/dist/interface/assets/{ConfigActionSnapshot-Di-uxMrg.js → ConfigActionSnapshot-hVHSfdtS.js} +1 -1
- package/dist/interface/assets/{ConfigActionVariable-BBpUti5A.js → ConfigActionVariable-BIpruwsx.js} +1 -1
- package/dist/interface/assets/{ConfigConditionIfElse-DjOKPXQw.js → ConfigConditionIfElse-DRSpsoR4.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSensorState-BzvvZvD0.js → ConfigConditionSensorState-C2SNARH7.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSwitch-DQvdfUxR.js → ConfigConditionSwitch-4SbQcU7N.js} +1 -1
- package/dist/interface/assets/{ConfigConditionTime-BqOElX5C.js → ConfigConditionTime-ESX3shbg.js} +1 -1
- package/dist/interface/assets/{ConfigSensorValueInput-BT-0LhSH.js → ConfigSensorValueInput-CTUdAA-R.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerDetection-1OkudUah.js → ConfigTriggerDetection-BRr6ixxQ.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerGeofence-HGatk3C5.js → ConfigTriggerGeofence-D-xRMGrT.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerManual-DpRr_vVq.js → ConfigTriggerManual-aXD6k1qa.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerMqtt-C_MId3BY.js → ConfigTriggerMqtt-pjHW4yOL.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSchedule-BmwDqd6N.js → ConfigTriggerSchedule-CYOt57qg.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSensor-Rgx8q4g8.js → ConfigTriggerSensor-BwJ_cAqd.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSystem-4VsHPmbn.js → ConfigTriggerSystem-DBXIrjzU.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerWebhook-Bs7zEfY0.js → ConfigTriggerWebhook-CccBmMCb.js} +1 -1
- package/dist/interface/assets/Console-DWAaz1C6.js +1 -0
- package/dist/interface/assets/CuiAssistantConversation-B3xEiNNt.js +5 -0
- package/dist/interface/assets/{CuiAssistantConversation-BmBhwrNh.css → CuiAssistantConversation-C5ca1lgX.css} +1 -1
- package/dist/interface/assets/CuiAutomationRunsDialog-CfylVPLI.js +1 -0
- package/dist/interface/assets/CuiBottomSheet-ACN23VLS.js +1 -0
- package/dist/interface/assets/{CuiBottomSheet-Dd3uOtnC.js → CuiBottomSheet-DEVNeDqa.js} +1 -1
- package/dist/interface/assets/CuiCameraPipCard-rR_FW9zq.js +1 -0
- package/dist/interface/assets/CuiCameraRecordings-CnorhPhf.js +1 -0
- package/dist/interface/assets/CuiCameraShares-BxUgedC_.js +1 -0
- package/dist/interface/assets/{CuiCameraTable-C7WLZ2pA.js → CuiCameraTable-C3GB4Q2y.js} +2 -2
- package/dist/interface/assets/CuiCameraTable-MHfnZSyK.js +1 -0
- package/dist/interface/assets/CuiChartTable-TAzZgetO.js +1 -0
- package/dist/interface/assets/{CuiConsole-CkZML0iY.js → CuiConsole-Cf5lOCE1.js} +2 -2
- package/dist/interface/assets/{CuiDataTable-BFIhx1D3.js → CuiDataTable-DfjXa0C1.js} +1 -1
- package/dist/interface/assets/CuiLightControl-ChK-SvJp.js +1 -0
- package/dist/interface/assets/CuiList-C4fxd9lD.js +1 -0
- package/dist/interface/assets/CuiPluginCard-DMpANIQj.js +2 -0
- package/dist/interface/assets/CuiPluginCategoryChip-BKxJMid7.js +1 -0
- package/dist/interface/assets/{CuiPluginOAuthButton-BQZkTcgo.js → CuiPluginOAuthButton-DnQ838JJ.js} +2 -2
- package/dist/interface/assets/{CuiPluginTrustBadge-DbqdfdaL.js → CuiPluginTrustBadge-DyYDUWV6.js} +1 -1
- package/dist/interface/assets/{CuiQRCode-2WsWJQFi.js → CuiQRCode-S9fPi0_l.js} +1 -1
- package/dist/interface/assets/CuiSchema-DScmDQsh.js +1 -0
- package/dist/interface/assets/CuiTopNavbarItem-CT10aAlO.js +1 -0
- package/dist/interface/assets/Faces-Coy-tUVM.js +1 -0
- package/dist/interface/assets/FirstSteps-CrMJC049.js +1 -0
- package/dist/interface/assets/Floorplan-Bj_mVrxp.js +1 -0
- package/dist/interface/assets/{Floorplan-Ci63Zd8W.css → Floorplan-CT5TrMSD.css} +1 -1
- package/dist/interface/assets/Instances-B_mpKAng.js +1 -0
- package/dist/interface/assets/{Logs-DMehPk0t.js → Logs-fY1dpQk4.js} +2 -2
- package/dist/interface/assets/Menu-Bgi-NLdg.js +1 -0
- package/dist/interface/assets/Metrics-DnMeIrkf.css +1 -0
- package/dist/interface/assets/Metrics-k9KACiwh.js +12 -0
- package/dist/interface/assets/OAuthDeviceFlow-xTh83xmc.js +1 -0
- package/dist/interface/assets/Plugin-BB7x7UHw.css +1 -0
- package/dist/interface/assets/Plugin-VWq7sONB.js +1 -0
- package/dist/interface/assets/{PluginConsole-D1BRQCO9.js → PluginConsole-LnnDOVBL.js} +2 -2
- package/dist/interface/assets/PluginDetail-CKD9sbDx.js +2 -0
- package/dist/interface/assets/{PluginSchema-B9VsBHOU.js → PluginSchema-BnB0_6Sk.js} +1 -1
- package/dist/interface/assets/PluginSearch-BoBZLLbr.js +1 -0
- package/dist/interface/assets/PluginSearch-kGhweU1J.js +2 -0
- package/dist/interface/assets/{PluginUpdateProgress-uj0XPV-_.js → PluginUpdateProgress-DMx0QlgE.js} +1 -1
- package/dist/interface/assets/{Plugins-CPx9Hszm.js → Plugins-Ekmr6aVa.js} +1 -1
- package/dist/interface/assets/RecentEventsFilter-StLJNuks.js +1 -0
- package/dist/interface/assets/Recordings-8PqxJOI3.css +1 -0
- package/dist/interface/assets/Recordings-Bvkuk_TV.js +1 -0
- package/dist/interface/assets/SensorEdit-CAf9Nb01.js +1 -0
- package/dist/interface/assets/SensorHistory-il8bDErX.js +1 -0
- package/dist/interface/assets/Sensors-sxQ6HLKo.js +2 -0
- package/dist/interface/assets/Settings-Bu0G7Ebx.js +1 -0
- package/dist/interface/assets/{Settings-D7495zbV.css → Settings-DtCSaLPb.css} +1 -1
- package/dist/interface/assets/SettingsAccount-8OZJLQi-.js +1 -0
- package/dist/interface/assets/SettingsAccount-bSfFi9YH.js +1 -0
- package/dist/interface/assets/SettingsAppearance-CnvN_Tzr.js +1 -0
- package/dist/interface/assets/SettingsAppearance-EvPWgF4c.js +1 -0
- package/dist/interface/assets/SettingsAssistant-B6s6pHCx.js +1 -0
- package/dist/interface/assets/SettingsBackup-Dd2FaUcN.js +1 -0
- package/dist/interface/assets/SettingsList-SvCO_gfG.js +1 -0
- package/dist/interface/assets/SettingsMqtt-BXBzHX84.js +1 -0
- package/dist/interface/assets/SettingsNotifications-CV-jJwFV.js +1 -0
- package/dist/interface/assets/SettingsPermissions-GchFaWjz.js +1 -0
- package/dist/interface/assets/SettingsRecordings-C4Ch_jmV.js +1 -0
- package/dist/interface/assets/SettingsRemote-OZHDJKSq.js +2 -0
- package/dist/interface/assets/SettingsSystem-BJlHXwVs.js +2 -0
- package/dist/interface/assets/SettingsUsers-RGOkOzx0.js +1 -0
- package/dist/interface/assets/Terminal-DX-ECC91.js +4 -0
- package/dist/interface/assets/Training-B8my7vka.js +1 -0
- package/dist/interface/assets/Training-D1DDjCCD.css +1 -0
- package/dist/interface/assets/Updates-DmavyhAn.js +2 -0
- package/dist/interface/assets/{VariableInput-CcILik4M.js → VariableInput-DQJle67Y.js} +1 -1
- package/dist/interface/assets/{VariableSuggestions-Bj0HdrYW.js → VariableSuggestions-D8V739dF.js} +1 -1
- package/dist/interface/assets/{VersionsHandler-BA8Lcysg.js → VersionsHandler-B41TJhgY.js} +1 -1
- package/dist/interface/assets/{VirtualSensorCreate-DvHyw7I2.js → VirtualSensorCreate-MfLh-LpH.js} +1 -1
- package/dist/interface/assets/Workers-CafDeRhH.js +2 -0
- package/dist/interface/assets/api-By0v6EeA.css +2 -0
- package/dist/interface/assets/api-D1iULsSy.js +4 -0
- package/dist/interface/assets/{api-CKbL5jC7.js → api-DbUdfXO_.js} +1 -1
- package/dist/interface/assets/{assistant-CwmHp5bB.js → assistant-7hqP6OpA.js} +1 -1
- package/dist/interface/assets/{auth-AfZrkJ2f.js → auth-CDxrn7fe.js} +1 -1
- package/dist/interface/assets/{automations-DOCG0q8-.js → automations-CTTQlGCW.js} +1 -1
- package/dist/interface/assets/{cameraSources-mHEz9ROa.js → cameraSources-MOiE_1-W.js} +1 -1
- package/dist/interface/assets/cloudHandoff-CJzFH7CW.js +1 -0
- package/dist/interface/assets/{config-AG0SnOiY.js → config-6EiGxiYm.js} +1 -1
- package/dist/interface/assets/eventLabels-idFWh3Y_.js +1 -0
- package/dist/interface/assets/{flowSchema-B0d3VjU7.js → flowSchema-Dp_-p9WA.js} +1 -1
- package/dist/interface/assets/{intercomService-DG3EeZ6s.js → intercomService-BQYzjnAi.js} +1 -1
- package/dist/interface/assets/main-0oXl_8v7.js +3 -0
- package/dist/interface/assets/main-CdvAniEp.css +1 -0
- package/dist/interface/assets/mqtt-ChvXxMhR.js +1 -0
- package/dist/interface/assets/{notifications-8FH4ApEz.js → notifications-CbL-1oMs.js} +1 -1
- package/dist/interface/assets/{plugins-2JLUEMYc.js → plugins-lsoAntRQ.js} +1 -1
- package/dist/interface/assets/{rooms-DoAfzA8W.js → rooms-P8WrRIco.js} +1 -1
- package/dist/interface/assets/sensorIcons-BRTtoaHX.js +1 -0
- package/dist/interface/assets/{sensorSlots-biaL-O8E.js → sensorSlots-BTj-IM7z.js} +1 -1
- package/dist/interface/assets/{sensors-DyAMdS-H.js → sensors-Dxc7HgjZ.js} +1 -1
- package/dist/interface/assets/{server-BDRUGj61.js → server-DlK8gUoE.js} +1 -1
- package/dist/interface/assets/{theme-CLxrnR60.js → theme-BOppzzar.js} +1 -1
- package/dist/interface/assets/types-CeruGCb8.js +1 -0
- package/dist/interface/assets/{types-8JXzkoC8.js → types-J1Drrxo1.js} +1 -1
- package/dist/interface/assets/types-U4AuTNLR.js +1 -0
- package/dist/interface/assets/ungrouped-ING_JAuK.js +1 -0
- package/dist/interface/assets/{updates-F-veEP1I.js → updates-DtVp84Y0.js} +1 -1
- package/dist/interface/assets/{useAppVersion-BjUQmB7M.js → useAppVersion-BGgCk5GD.js} +1 -1
- package/dist/interface/assets/{useAssistantActions-CNEJol4o.js → useAssistantActions-C13O5EHU.js} +1 -1
- package/dist/interface/assets/useBackupRestore-vrhmc9i-.js +1 -0
- package/dist/interface/assets/{useCameraOptions-D_oduve2.js → useCameraOptions-CI1baRmm.js} +1 -1
- package/dist/interface/assets/{useKeyboardInset-CPWSVYlA.js → useKeyboardInset-CvgJp091.js} +1 -1
- package/dist/interface/assets/{useLogsSocket-B_jXUqv8.js → useLogsSocket-Bf0BI8ET.js} +1 -1
- package/dist/interface/assets/{useNavLayout-DEngIIeU.js → useNavLayout-6zM1Y-7B.js} +1 -1
- package/dist/interface/assets/{usePermissions-DAO92InI.js → usePermissions-DZitFsBQ.js} +1 -1
- package/dist/interface/assets/{usePluginUpdates-CJi8Y_wl.js → usePluginUpdates-VZdpJ_Ax.js} +1 -1
- package/dist/interface/assets/{usePushRegistration-j9WCeFbv.js → usePushRegistration-vcbMrTxZ.js} +1 -1
- package/dist/interface/assets/{useServerRestart-BVks5tuC.js → useServerRestart-DrpuNbIu.js} +1 -1
- package/dist/interface/assets/{useStreamStatus-DQ0NSyU8.js → useStreamStatus-l3Pfk1H4.js} +1 -1
- package/dist/interface/assets/{useTabSwipe-CVq7EcIY.js → useTabSwipe-BSpi25WV.js} +1 -1
- package/dist/interface/assets/{useUpdateChannel-C0fjDvNP.js → useUpdateChannel-kAl-5UNY.js} +1 -1
- package/dist/interface/assets/{useUpdatesSocket-DXKF9hzc.js → useUpdatesSocket-CaFz_fEb.js} +1 -1
- package/dist/interface/assets/{useUserOptions-UjMeAL5n.js → useUserOptions-BKteXnmU.js} +1 -1
- package/dist/interface/assets/vendor-cameraui-K1Nw4PvF.js +2326 -0
- package/dist/interface/assets/vendor-core-CJdfpB0I.js +1 -0
- package/dist/interface/assets/{vendor-primevue-Zx6t06A4.js → vendor-primevue-DoA2Rwcb.js} +871 -871
- package/dist/interface/assets/walk-B8FNhXuj.js +1 -0
- package/dist/interface/ha/{404-D5gfy0Cd.js → 404-RtgPpD9N.js} +1 -1
- package/dist/interface/ha/{About-JzlpCzBN.js → About-0PRv9bU0.js} +4 -4
- package/dist/interface/ha/{Assistant-DgOfGesf.js → Assistant-DbwxVfpl.js} +1021 -1021
- package/dist/interface/ha/{Automation-BDaWYiBu.js → Automation-D3HomdH7.js} +159 -155
- package/dist/interface/ha/{AutomationImport-BNB_PJ9R.js → AutomationImport-nQUUvZcv.js} +6 -6
- package/dist/interface/ha/{AutomationStore-_TeOt1wz.js → AutomationStore-BXDD92wZ.js} +8 -8
- package/dist/interface/ha/{AutomationStoreDetail-jjIEZoRi.js → AutomationStoreDetail-BYeq7FID.js} +19 -19
- package/dist/interface/ha/{Automations-DM6FEVOw.js → Automations-CJlGqmSP.js} +74 -74
- package/dist/interface/ha/Camera-Ai4BxVh_.js +747 -0
- package/dist/interface/ha/{CameraConsole-BoVql05l.js → CameraConsole-UMNOX3dE.js} +4 -4
- package/dist/interface/ha/{Cameras-cQBGvXq7.js → Cameras-BW-AEXYi.js} +266 -266
- package/dist/interface/ha/{Camview-mkG5FXZM.js → Camview-jikpVEE0.js} +195 -194
- package/dist/interface/ha/{Config-BNPDzo_h.js → Config-BOxwBH2D.js} +111 -111
- package/dist/interface/ha/{ConfigActionAssistant-C-8P3DYz.js → ConfigActionAssistant--3iWk9sq.js} +4 -4
- package/dist/interface/ha/{ConfigActionCameraControl-x1ksGL7m.js → ConfigActionCameraControl-DbVXWTeA.js} +3 -3
- package/dist/interface/ha/{ConfigActionHttp-DzCJp85z.js → ConfigActionHttp-Du3n2Yj0.js} +2 -2
- package/dist/interface/ha/{ConfigActionImageInput-C5C5U_2z.js → ConfigActionImageInput-BrJrTZTY.js} +4 -4
- package/dist/interface/ha/{ConfigActionMqtt-T29xb75r.js → ConfigActionMqtt-DZd1BNUt.js} +4 -4
- package/dist/interface/ha/{ConfigActionNotification-BcnyilF9.js → ConfigActionNotification-CJWW10gt.js} +3 -3
- package/dist/interface/ha/{ConfigActionNotificationControl-D3wIVKuU.js → ConfigActionNotificationControl-Bl41AVv1.js} +2 -2
- package/dist/interface/ha/{ConfigActionOutput-hD-yVczw.js → ConfigActionOutput-OTj7Lwgq.js} +1 -1
- package/dist/interface/ha/{ConfigActionPlugin-Bz1O-O4Q.js → ConfigActionPlugin-B790PEk0.js} +8 -8
- package/dist/interface/ha/{ConfigActionSensor-FOz-PYl_.js → ConfigActionSensor-BG3jZxge.js} +5 -5
- package/dist/interface/ha/{ConfigActionSnapshot-CmxEOuK1.js → ConfigActionSnapshot-fGmLl6jb.js} +2 -2
- package/dist/interface/ha/{ConfigActionVariable-BCvkrdCh.js → ConfigActionVariable-CK3vYDsr.js} +1 -1
- package/dist/interface/ha/{ConfigConditionIfElse-icfTG9OA.js → ConfigConditionIfElse-DyFLGg3y.js} +3 -3
- package/dist/interface/ha/{ConfigConditionSensorState-ClUAsm0d.js → ConfigConditionSensorState-BUTfeFO2.js} +7 -7
- package/dist/interface/ha/{ConfigConditionSwitch-C8AMCkn6.js → ConfigConditionSwitch-iDG_ubif.js} +5 -5
- package/dist/interface/ha/{ConfigSensorValueInput-ChvDQzGd.js → ConfigSensorValueInput-BmRIGUKB.js} +5 -5
- package/dist/interface/ha/{ConfigTriggerDetection-aUSyaClu.js → ConfigTriggerDetection-DyPQGt9M.js} +24 -24
- package/dist/interface/ha/{ConfigTriggerGeofence-DsJeJWP4.js → ConfigTriggerGeofence-CGE-bH_t.js} +6 -6
- package/dist/interface/ha/{ConfigTriggerMqtt-CsAxA7QZ.js → ConfigTriggerMqtt-CM3KZqBc.js} +1 -1
- package/dist/interface/ha/{ConfigTriggerSensor-CTxr9cfU.js → ConfigTriggerSensor-DoHMcwP4.js} +1 -1
- package/dist/interface/ha/{ConfigTriggerSystem-C8UEfpfs.js → ConfigTriggerSystem-BYKbW4Zr.js} +2 -2
- package/dist/interface/ha/{ConfigTriggerWebhook-frEE-SCB.js → ConfigTriggerWebhook-5PBAadG8.js} +2 -2
- package/dist/interface/ha/{Console-A3VtbsLg.js → Console-BEXzl4p1.js} +7 -7
- package/dist/interface/ha/{CuiAutomationRunsDialog-BlJvhBiX.js → CuiAutomationRunsDialog-DkK_ar5G.js} +3 -3
- package/dist/interface/ha/{CuiBottomSheet-Cu-t3H0Z.js → CuiBottomSheet-CYNvQV4T.js} +2 -2
- package/dist/interface/ha/{CuiCameraRecordings-R5ArEmqJ.js → CuiCameraRecordings-DYjecmE_.js} +30 -48
- package/dist/interface/ha/{CuiCameraShares-B9pfRkM4.js → CuiCameraShares-C0H60nZS.js} +7 -7
- package/dist/interface/ha/{CuiCameraTable-CKjGKaMC.js → CuiCameraTable-CQNMyBaq.js} +5 -5
- package/dist/interface/ha/{CuiChartTable-BxWjRe-k.js → CuiChartTable-Bhv1p9zj.js} +1161 -1161
- package/dist/interface/ha/{CuiConsole-C5fzsR7t.js → CuiConsole-DtXorGF5.js} +20 -20
- package/dist/interface/ha/{CuiDataTable-BOdQDY8J.js → CuiDataTable-Cy8EjCk9.js} +7 -7
- package/dist/interface/ha/{CuiList-CU2NJ1K6.js → CuiList-DnW6Q5m2.js} +1 -1
- package/dist/interface/ha/{CuiPluginCard-BT71RRAD.js → CuiPluginCard-B4SCUblV.js} +125 -125
- package/dist/interface/ha/{CuiPluginOAuthButton-moh9uS7G.js → CuiPluginOAuthButton-BKg9SftQ.js} +5 -5
- package/dist/interface/ha/{CuiPluginTrustBadge-F_pVWkPJ.js → CuiPluginTrustBadge-CEtUJhCJ.js} +1 -1
- package/dist/interface/ha/{CuiQRCode-BNuj-nJ4.js → CuiQRCode-gp-9hqyk.js} +7 -7
- package/dist/interface/ha/{CuiSchema-Cb_8Ks-I.js → CuiSchema-CYpr_dD7.js} +161 -161
- package/dist/interface/ha/{CuiTopNavbarItem-BGzrrTls.js → CuiTopNavbarItem-CM-1oPxf.js} +1 -1
- package/dist/interface/ha/Faces-pa60ySng.js +1575 -0
- package/dist/interface/ha/{FirstSteps-BFX0-EEi.js → FirstSteps-D42yZm7R.js} +68 -68
- package/dist/interface/ha/{Floorplan-D6MGqSJT.js → Floorplan-BvE546pE.js} +512 -511
- package/dist/interface/ha/{Instances-CHzIUyyA.js → Instances-CAGCyfbB.js} +64 -64
- package/dist/interface/ha/{Logs-DZKM3dWv.js → Logs-RB3Ba8WM.js} +12 -12
- package/dist/interface/ha/{Menu-BQz4dfQi.js → Menu-hAnHu_jq.js} +17 -17
- package/dist/interface/ha/{Metrics-CdpWJ1mm.js → Metrics-ChYTebkX.js} +94 -93
- package/dist/interface/ha/{OAuthDeviceFlow-DUELtx3X.js → OAuthDeviceFlow-C05pH-9o.js} +3 -3
- package/dist/interface/ha/{Plugin-5bbTF0Rv.js → Plugin-D7XwcXkW.js} +647 -439
- package/dist/interface/ha/{PluginConsole-C__0lzsS.js → PluginConsole-DphEIOlL.js} +4 -4
- package/dist/interface/ha/{PluginDetail-Blrktk9W.js → PluginDetail-DfMl-yCl.js} +9 -9
- package/dist/interface/ha/{PluginSearch-BKbdwHQ1.js → PluginSearch-BPN4Opg5.js} +34 -34
- package/dist/interface/ha/{PluginUpdateProgress-IsNiecu3.js → PluginUpdateProgress-ByJ0R5sW.js} +3 -3
- package/dist/interface/ha/{Plugins-CC2Dwlx5.js → Plugins-BhKmjjNn.js} +59 -59
- package/dist/interface/ha/{RecentEventsFilter-9ZkDHD1g.js → RecentEventsFilter-BkLMlGVJ.js} +5 -6
- package/dist/interface/ha/Recordings-BaU7M1OW.js +1836 -0
- package/dist/interface/ha/{SensorEdit-Bi2Yx_ji.js → SensorEdit-DWxcCJ0F.js} +88 -88
- package/dist/interface/ha/{SensorHistory-sqG_6eav.js → SensorHistory-DuA9E9wT.js} +2 -2
- package/dist/interface/ha/{Sensors-DLtOh1p4.js → Sensors-CVpIHcgG.js} +438 -435
- package/dist/interface/ha/{Settings-DI3_zenm.js → Settings-BO2eBGEn.js} +61 -61
- package/dist/interface/ha/{SettingsAccount-pS86Qyr-.js → SettingsAccount-BQZZfoSM.js} +255 -255
- package/dist/interface/ha/{SettingsAppearance-tS3bubKQ.js → SettingsAppearance-B_yGl89u.js} +16 -16
- package/dist/interface/ha/{SettingsAssistant-LejCRXsF.js → SettingsAssistant-kMOixl9g.js} +501 -501
- package/dist/interface/ha/{SettingsBackup-CkhD1Kze.js → SettingsBackup-BpG-W4j-.js} +24 -24
- package/dist/interface/ha/{SettingsList-bibwvPSM.js → SettingsList-Btnkzu94.js} +6 -6
- package/dist/interface/ha/{SettingsMqtt-DSt0B4Qg.js → SettingsMqtt-C4DX9cNC.js} +23 -23
- package/dist/interface/ha/{SettingsNotifications-BF7ajNwE.js → SettingsNotifications-DI6ImggH.js} +6 -6
- package/dist/interface/ha/{SettingsPermissions-Jh0FuIF7.js → SettingsPermissions-BCDyCFcb.js} +2 -2
- package/dist/interface/ha/{SettingsRecordings-BTIdncxg.js → SettingsRecordings-Bq5NkJhd.js} +10 -10
- package/dist/interface/ha/{SettingsRemote-Cba4P1-O.js → SettingsRemote-CtncaPIA.js} +308 -308
- package/dist/interface/ha/{SettingsSystem-_Nnh2ZF5.js → SettingsSystem-BJXuA7xA.js} +11 -11
- package/dist/interface/ha/{SettingsUsers-BfHFoxJi.js → SettingsUsers-BF0rDluv.js} +91 -91
- package/dist/interface/ha/{Terminal-Dv_7oWmS.js → Terminal-kTCe2jP3.js} +11 -11
- package/dist/interface/ha/Training-BM2Xb8Ef.js +1754 -0
- package/dist/interface/ha/{Updates-BHl5H7zE.js → Updates-Cv1EY_T0.js} +6 -6
- package/dist/interface/ha/{VariableInput-DtLo7-Nw.js → VariableInput-BO2zZu4N.js} +1 -1
- package/dist/interface/ha/{VersionsHandler-CF0DSeol.js → VersionsHandler-CRnT9-K7.js} +10 -10
- package/dist/interface/ha/{VirtualSensorCreate-C907EgIz.js → VirtualSensorCreate-6dVRxPjw.js} +8 -8
- package/dist/interface/ha/{Workers-Dz1d9gEQ.js → Workers-MHia86lu.js} +97 -97
- package/dist/interface/ha/{api-DUqpDJ2N.js → api-CH_Y8Hee.js} +17459 -14633
- package/dist/interface/ha/{api-gId1nlMj.js → api-DylRa66V.js} +3 -3
- package/dist/interface/ha/{assistant-BaR65gIY.js → assistant-smRQYA6p.js} +53 -53
- package/dist/interface/ha/{auth-Btsz_KxO.js → auth-BXj5Fm6s.js} +38 -38
- package/dist/interface/ha/{automationBlueprint-CuO3iOiM.js → automationBlueprint-DGjftXFC.js} +4 -4
- package/dist/interface/ha/cameraui-cards.js +1 -1
- package/dist/interface/ha/{cards-DWhezIPP.js → cards-E0zw1UVg.js} +114 -113
- package/dist/interface/ha/{config-BKStpoEQ.js → config-dG_DA6XL.js} +16 -16
- package/dist/interface/ha/{dist-CM7R4_Gj.js → dist-BQf9ANPx.js} +77 -77
- package/dist/interface/ha/{dist-BIngHzHx.js → dist-euRmladF.js} +4 -4
- package/dist/interface/ha/{eventIcons-BFNUgeGr.js → eventLabels-B5GrM5jO.js} +291 -233
- package/dist/interface/ha/{intercomService-B7HkLs6z.js → intercomService-BtJ_zUNd.js} +250 -264
- package/dist/interface/ha/{mqtt-ajcSmTB-.js → mqtt-CP3vVkRJ.js} +12 -12
- package/dist/interface/ha/{notifications-Cf9dXHEO.js → notifications-CZNwSXTg.js} +22 -22
- package/dist/interface/ha/{pinia-DIKO5lnE.js → pinia-CVnHHb-s.js} +533 -501
- package/dist/interface/ha/{plugins-ml823dJV.js → plugins--eatOIaI.js} +66 -66
- package/dist/interface/ha/{protocol-BB4jdtUC-DW3jl2tV.js → protocol-BB4jdtUC-BhEwymva.js} +129 -48
- package/dist/interface/ha/{rooms-C5gUErBi.js → rooms-D5E6K75d.js} +8 -8
- package/dist/interface/ha/{server-dArenpJI.js → server-D1BqEY7i.js} +31 -31
- package/dist/interface/ha/{types-DYymuACA.js → types-CWogEoya.js} +36 -36
- package/dist/interface/ha/ungrouped-Ch4UX4dy.js +58 -0
- package/dist/interface/ha/{updates-D5sFzGtC.js → updates-B48Owi1w.js} +28 -28
- package/dist/interface/ha/{useAppVersion-C5x3Ap4_.js → useAppVersion-D95sKTJR.js} +2 -2
- package/dist/interface/ha/{useAssistantActions-S1FrNe9b.js → useAssistantActions-kDwiO-u5.js} +1 -1
- package/dist/interface/ha/{useKeyboardInset-Cj0T2AFX.js → useKeyboardInset-C2R51vsC.js} +1 -1
- package/dist/interface/ha/{useLogsSocket-DtvfQlPh.js → useLogsSocket-BzNWa2y2.js} +1 -1
- package/dist/interface/ha/{useNavLayout-HSFBA4JV.js → useNavLayout-228cwwqA.js} +19 -19
- package/dist/interface/ha/{usePermissions-DaE_wFch.js → usePermissions-CfA5x7Df.js} +1 -1
- package/dist/interface/ha/{useServerRestart-Ci0SppGW.js → useServerRestart-B0c40zs5.js} +1 -1
- package/dist/interface/ha/{useTabSwipe-CPKkRmaH.js → useTabSwipe-CfZg5hWj.js} +2 -2
- package/dist/interface/ha/{useUpdateChannel-CXHHovK3.js → useUpdateChannel-DQxI7FrD.js} +2 -2
- package/dist/interface/ha/{useUpdatesSocket-DVST2YXV.js → useUpdatesSocket-B8LqBBd3.js} +1 -1
- package/dist/interface/ha/{useUserOptions-BYcYI6QA.js → useUserOptions-dZf6ejlz.js} +1 -1
- package/dist/interface/ha/walk-CsSXaeJw.js +33 -0
- package/dist/interface/index.html +35 -36
- package/dist/interface/sw.js +1 -1
- package/dist/interface/workbox-5f52ac45.js +1 -0
- package/dist/server/package.json +11 -11
- package/dist/server/requirements.txt +2 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/__init__.py +22 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/config.py +4 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/__init__.py +10 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/contract.py +6 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/interfaces.py +92 -4
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/__init__.py +16 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/base.py +4 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/face_embedder.py +1 -1
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/object.py +3 -3
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/person_embedder.py +65 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/segmenter.py +81 -0
- package/dist/server/src/api/database/index.d.ts +2 -1
- package/dist/server/src/api/database/index.js +31 -7
- package/dist/server/src/api/database/index.js.map +1 -1
- package/dist/server/src/api/database/migrations/v2-2-9.d.ts +3 -0
- package/dist/server/src/api/database/migrations/v2-2-9.js +28 -0
- package/dist/server/src/api/database/migrations/v2-2-9.js.map +1 -0
- package/dist/server/src/api/database/record-schemas.d.ts +1 -1
- package/dist/server/src/api/database/types.d.ts +17 -1
- package/dist/server/src/api/schemas/assistant.schema.d.ts +1 -1
- package/dist/server/src/api/schemas/cameras.schema.d.ts +140 -76
- package/dist/server/src/api/schemas/cameras.schema.js +4 -2
- package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
- package/dist/server/src/api/schemas/training.schema.d.ts +15 -3
- package/dist/server/src/api/schemas/training.schema.js +4 -1
- package/dist/server/src/api/schemas/training.schema.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/worker-perf.js +2 -0
- package/dist/server/src/api/websocket/nsp/worker-perf.js.map +1 -1
- package/dist/server/src/api/websocket/types.d.ts +1 -0
- package/dist/server/src/assistant/search.d.ts +17 -0
- package/dist/server/src/assistant/search.js +10 -2
- package/dist/server/src/assistant/search.js.map +1 -1
- package/dist/server/src/assistant/tools/plugins.js +7 -3
- package/dist/server/src/assistant/tools/plugins.js.map +1 -1
- package/dist/server/src/assistant/types.d.ts +2 -0
- package/dist/server/src/automations/actions/plugin.js +5 -9
- package/dist/server/src/automations/actions/plugin.js.map +1 -1
- package/dist/server/src/automations/pluginMethodRegistry.d.ts +6 -0
- package/dist/server/src/automations/pluginMethodRegistry.js +39 -0
- package/dist/server/src/automations/pluginMethodRegistry.js.map +1 -1
- package/dist/server/src/automations/segment-picture.d.ts +16 -0
- package/dist/server/src/automations/segment-picture.js +152 -0
- package/dist/server/src/automations/segment-picture.js.map +1 -0
- package/dist/server/src/camera/decoder/detection-coordinator.d.ts +5 -2
- package/dist/server/src/camera/decoder/detection-coordinator.js +45 -22
- package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
- package/dist/server/src/camera/decoder/detection-pipeline.d.ts +30 -2
- package/dist/server/src/camera/decoder/detection-pipeline.js +81 -21
- package/dist/server/src/camera/decoder/detection-pipeline.js.map +1 -1
- package/dist/server/src/camera/decoder/event-manager.d.ts +12 -2
- package/dist/server/src/camera/decoder/event-manager.js +77 -75
- package/dist/server/src/camera/decoder/event-manager.js.map +1 -1
- package/dist/server/src/camera/decoder/event-trace.d.ts +41 -1
- package/dist/server/src/camera/decoder/event-trace.js +63 -8
- package/dist/server/src/camera/decoder/event-trace.js.map +1 -1
- package/dist/server/src/camera/decoder/face-tracks.d.ts +26 -0
- package/dist/server/src/camera/decoder/face-tracks.js +199 -0
- package/dist/server/src/camera/decoder/face-tracks.js.map +1 -0
- package/dist/server/src/camera/decoder/frame-scaler.d.ts +3 -1
- package/dist/server/src/camera/decoder/frame-scaler.js +36 -8
- package/dist/server/src/camera/decoder/frame-scaler.js.map +1 -1
- package/dist/server/src/camera/decoder/nvr-sink.d.ts +6 -0
- package/dist/server/src/camera/decoder/nvr-sink.js +1 -1
- package/dist/server/src/camera/decoder/nvr-sink.js.map +1 -1
- package/dist/server/src/camera/decoder/perf-tracker.d.ts +2 -0
- package/dist/server/src/camera/decoder/perf-tracker.js +4 -0
- package/dist/server/src/camera/decoder/perf-tracker.js.map +1 -1
- package/dist/server/src/camera/decoder/ptz/autotracker.d.ts +6 -1
- package/dist/server/src/camera/decoder/ptz/autotracker.js +107 -25
- package/dist/server/src/camera/decoder/ptz/autotracker.js.map +1 -1
- package/dist/server/src/camera/decoder/secondary-stage.d.ts +10 -8
- package/dist/server/src/camera/decoder/secondary-stage.js +145 -125
- package/dist/server/src/camera/decoder/secondary-stage.js.map +1 -1
- package/dist/server/src/camera/decoder/training-sink.d.ts +5 -2
- package/dist/server/src/camera/decoder/training-sink.js +30 -6
- package/dist/server/src/camera/decoder/training-sink.js.map +1 -1
- package/dist/server/src/camera/decoder/types.d.ts +6 -2
- package/dist/server/src/camera/decoder/types.js +4 -2
- package/dist/server/src/camera/decoder/types.js.map +1 -1
- package/dist/server/src/manager/trainingCandidateManager.d.ts +2 -1
- package/dist/server/src/manager/trainingCandidateManager.js +25 -3
- package/dist/server/src/manager/trainingCandidateManager.js.map +1 -1
- package/dist/server/src/manager/trainingSubmission.d.ts +5 -0
- package/dist/server/src/manager/trainingSubmission.js +73 -0
- package/dist/server/src/manager/trainingSubmission.js.map +1 -0
- package/dist/server/src/manager/types.d.ts +8 -2
- package/dist/server/src/manager/types.js.map +1 -1
- package/dist/server/src/plugins/runtime/python/proxy/sensor.py +2 -0
- package/dist/server/src/remote/api/routes/train.d.ts +44 -3
- package/dist/server/src/remote/api/routes/train.js +2 -2
- package/dist/server/src/remote/api/routes/train.js.map +1 -1
- package/dist/server/src/rpc/interfaces/core.d.ts +6 -2
- package/dist/server/src/rpc/interfaces/detection.d.ts +20 -3
- package/dist/server/src/rpc/server.d.ts +2 -0
- package/dist/server/src/rpc/server.js +8 -5
- package/dist/server/src/rpc/server.js.map +1 -1
- package/dist/server/src/sensors/registry.d.ts +1 -0
- package/dist/server/src/sensors/registry.js +20 -11
- package/dist/server/src/sensors/registry.js.map +1 -1
- package/dist/server/src/sensors/types.d.ts +1 -0
- package/dist/server/src/sensors/types.js +3 -0
- package/dist/server/src/sensors/types.js.map +1 -1
- package/dist/server/src/services/config/index.d.ts +1 -0
- package/dist/server/src/services/config/index.js +2 -0
- package/dist/server/src/services/config/index.js.map +1 -1
- package/dist/server/src/utils/image.d.ts +6 -0
- package/dist/server/src/utils/image.js +58 -22
- package/dist/server/src/utils/image.js.map +1 -1
- package/npm-shrinkwrap.json +115 -74
- package/package.json +11 -11
- package/dist/interface/assets/About-DBOS1rfw.js +0 -1
- package/dist/interface/assets/Assistant-BQ6Ld-bt.css +0 -1
- package/dist/interface/assets/Assistant-BRcHj8hq.js +0 -1
- package/dist/interface/assets/Automation-C0Emde7z.js +0 -3
- package/dist/interface/assets/AutomationStore-C2G0Bk8c.js +0 -2
- package/dist/interface/assets/Automations-D-vfqRnZ.js +0 -2
- package/dist/interface/assets/Camera-BpurrgAr.js +0 -2
- package/dist/interface/assets/Camera-D0B7yyVD.css +0 -1
- package/dist/interface/assets/Camview-IbOVRx20.js +0 -1
- package/dist/interface/assets/ConfigActionCameraControl-Bw_egtpP.js +0 -1
- package/dist/interface/assets/ConfigActionSensor-BErRRYfl.js +0 -1
- package/dist/interface/assets/Console-oCuuVKET.js +0 -1
- package/dist/interface/assets/CuiAssistantConversation-Bsyxau9v.js +0 -5
- package/dist/interface/assets/CuiAutomationRunsDialog-sRh_K6JI.js +0 -1
- package/dist/interface/assets/CuiBottomSheet-DWoSHzC7.js +0 -1
- package/dist/interface/assets/CuiCameraPipCard-D6REm8uT.js +0 -1
- package/dist/interface/assets/CuiCameraRecordings-C2tvrbbw.js +0 -1
- package/dist/interface/assets/CuiCameraShares-jrrUEHoZ.js +0 -1
- package/dist/interface/assets/CuiCameraTable-BOzTWLwd.js +0 -1
- package/dist/interface/assets/CuiChartTable-BYrIX7LV.js +0 -1
- package/dist/interface/assets/CuiLightControl-DitIWqUr.js +0 -1
- package/dist/interface/assets/CuiList-BewTNr2X.js +0 -1
- package/dist/interface/assets/CuiPluginCard-Bd2HFduI.js +0 -2
- package/dist/interface/assets/CuiPluginCategoryChip-DlzOwRgc.js +0 -1
- package/dist/interface/assets/CuiSchema-BL0QZmP2.js +0 -1
- package/dist/interface/assets/CuiTopNavbarItem-Ti2TueU1.js +0 -1
- package/dist/interface/assets/Faces-DARrGLXf.js +0 -1
- package/dist/interface/assets/FirstSteps-DBYPBvGr.js +0 -1
- package/dist/interface/assets/Floorplan-BaZvzoyv.js +0 -1
- package/dist/interface/assets/Instances-r0xReURi.js +0 -1
- package/dist/interface/assets/Menu-C34RRyLd.js +0 -1
- package/dist/interface/assets/Metrics-BjoC71_O.js +0 -12
- package/dist/interface/assets/Metrics-DsHBab6t.css +0 -1
- package/dist/interface/assets/OAuthDeviceFlow-CdZxelf2.js +0 -1
- package/dist/interface/assets/Plugin-Qr_Q_Qfi.css +0 -1
- package/dist/interface/assets/Plugin-npx7CnwV.js +0 -1
- package/dist/interface/assets/PluginDetail-nwTrJmO6.js +0 -2
- package/dist/interface/assets/PluginSearch-CP2kQWKf.js +0 -1
- package/dist/interface/assets/PluginSearch-WEvbKMRs.js +0 -2
- package/dist/interface/assets/RecentEventsFilter-D5VSH2K1.js +0 -1
- package/dist/interface/assets/Recordings-BEKAn6QK.css +0 -1
- package/dist/interface/assets/Recordings-De6Zcv0M.js +0 -1
- package/dist/interface/assets/SensorEdit-SD_oHBRo.js +0 -1
- package/dist/interface/assets/SensorHistory-SxiLOloa.js +0 -1
- package/dist/interface/assets/Sensors-Djl64M-W.js +0 -2
- package/dist/interface/assets/Settings-CAf2reGs.js +0 -1
- package/dist/interface/assets/SettingsAccount-BGj5Ni91.js +0 -1
- package/dist/interface/assets/SettingsAccount-Dy6WC8ql.js +0 -1
- package/dist/interface/assets/SettingsAppearance-BGFhMlRk.js +0 -1
- package/dist/interface/assets/SettingsAppearance-DQzQmVzE.js +0 -1
- package/dist/interface/assets/SettingsAssistant-BwYVyuN3.js +0 -1
- package/dist/interface/assets/SettingsBackup-CVExGnOo.js +0 -1
- package/dist/interface/assets/SettingsList-vo7sz_MY.js +0 -1
- package/dist/interface/assets/SettingsMqtt-B1CuOcML.js +0 -1
- package/dist/interface/assets/SettingsNotifications-CCQ6eiq8.js +0 -1
- package/dist/interface/assets/SettingsPermissions-BlOf6HEy.js +0 -1
- package/dist/interface/assets/SettingsRecordings-7tTBg6m1.js +0 -1
- package/dist/interface/assets/SettingsRemote-DBgKmIdv.js +0 -2
- package/dist/interface/assets/SettingsSystem-DaFMsZpN.js +0 -2
- package/dist/interface/assets/SettingsUsers-DXACwVPi.js +0 -1
- package/dist/interface/assets/Terminal-DtGqlHbk.js +0 -4
- package/dist/interface/assets/Training-C-ToeAl4.css +0 -1
- package/dist/interface/assets/Training-Ca11D1Vj.js +0 -1
- package/dist/interface/assets/Updates-yenwuqnD.js +0 -2
- package/dist/interface/assets/Workers-Dyo44zxe.js +0 -2
- package/dist/interface/assets/api-CHQlxVtZ.css +0 -2
- package/dist/interface/assets/api-CLazgL-g.js +0 -4
- package/dist/interface/assets/cloudHandoff-zJCrDmwk.js +0 -1
- package/dist/interface/assets/eventIcons-C3JWChgS.js +0 -1
- package/dist/interface/assets/eventLabels-BsPoPWS9.js +0 -1
- package/dist/interface/assets/main-CGY9cVyi.css +0 -1
- package/dist/interface/assets/main-DkHV6YgB.js +0 -3
- package/dist/interface/assets/mqtt-DE2VbNdt.js +0 -1
- package/dist/interface/assets/sensorIcons-BntiOPX7.js +0 -1
- package/dist/interface/assets/types-B4LLKzDW.js +0 -1
- package/dist/interface/assets/types-a7Nw-P-m.js +0 -1
- package/dist/interface/assets/ungrouped-BoAbb9w3.js +0 -1
- package/dist/interface/assets/ungrouped-ChmBvcXp.css +0 -1
- package/dist/interface/assets/useBackupRestore-Biqn_lhh.js +0 -1
- package/dist/interface/assets/vendor-cameraui-GmMRyJ2R.js +0 -2326
- package/dist/interface/assets/vendor-core-BeAannbA.js +0 -1
- package/dist/interface/ha/Camera-sH9fRv18.js +0 -670
- package/dist/interface/ha/Faces-CsM5VO8Q.js +0 -1441
- package/dist/interface/ha/Recordings-B1XsJrzs.js +0 -1539
- package/dist/interface/ha/Training-CaSFA5oH.js +0 -1699
- package/dist/interface/ha/eventLabels-B4C1_4vT.js +0 -42
- package/dist/interface/ha/ungrouped-BHLAySWP.js +0 -1312
- package/dist/interface/workbox-778a14ff.js +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PluginInterface } from '@camera.ui/sdk';
|
|
2
|
+
import { segmentPicture } from './segment-picture.js';
|
|
2
3
|
const IMAGE_METADATA = { fixed: { width: 0, height: 0 } };
|
|
3
4
|
const AUDIO_METADATA = { fixed: { mimeType: 'audio/wav' } };
|
|
4
5
|
const CONFIG_PARAM = { param: 'config' };
|
|
@@ -35,6 +36,34 @@ export const PLUGIN_METHOD_REGISTRY = {
|
|
|
35
36
|
settingsMethod: 'faceDetectionSettings',
|
|
36
37
|
},
|
|
37
38
|
],
|
|
39
|
+
[PluginInterface.FaceEmbedding]: [
|
|
40
|
+
{
|
|
41
|
+
id: 'embedFaceImages',
|
|
42
|
+
labelKey: 'components.automation_nodes.method_embed_faces',
|
|
43
|
+
params: [{ name: 'imageData', labelKey: 'components.automation_nodes.param_image', type: 'image', placeholder: '', binary: true }],
|
|
44
|
+
args: [{ images: 'imageData' }, CONFIG_PARAM],
|
|
45
|
+
settingsMethod: 'faceEmbeddingSettings',
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
[PluginInterface.PersonEmbedding]: [
|
|
49
|
+
{
|
|
50
|
+
id: 'embedPersonImages',
|
|
51
|
+
labelKey: 'components.automation_nodes.method_embed_persons',
|
|
52
|
+
params: [{ name: 'imageData', labelKey: 'components.automation_nodes.param_image', type: 'image', placeholder: '', binary: true }],
|
|
53
|
+
args: [{ images: 'imageData' }, CONFIG_PARAM],
|
|
54
|
+
settingsMethod: 'personEmbeddingSettings',
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
[PluginInterface.Segmentation]: [
|
|
58
|
+
{
|
|
59
|
+
id: 'segmentImages',
|
|
60
|
+
labelKey: 'components.automation_nodes.method_segment',
|
|
61
|
+
params: [{ name: 'imageData', labelKey: 'components.automation_nodes.param_image', type: 'image', placeholder: '', binary: true }],
|
|
62
|
+
args: [],
|
|
63
|
+
settingsMethod: 'segmentationSettings',
|
|
64
|
+
run: (plugin, contract, params) => segmentPicture(plugin, contract, params.imageData, params.config ?? {}),
|
|
65
|
+
},
|
|
66
|
+
],
|
|
38
67
|
[PluginInterface.LicensePlateDetection]: [
|
|
39
68
|
{
|
|
40
69
|
id: 'testLicensePlateDetection',
|
|
@@ -130,6 +159,14 @@ export function getMethodDef(methodId) {
|
|
|
130
159
|
}
|
|
131
160
|
return undefined;
|
|
132
161
|
}
|
|
162
|
+
export async function runRegistryMethod(def, plugin, contract, params) {
|
|
163
|
+
if (def.run)
|
|
164
|
+
return await def.run(plugin, contract, params);
|
|
165
|
+
const method = plugin[def.id];
|
|
166
|
+
if (!method)
|
|
167
|
+
throw new Error(`Method "${def.id}" is not implemented by the plugin`);
|
|
168
|
+
return await method(...buildArgsFromRegistry(def.id, params));
|
|
169
|
+
}
|
|
133
170
|
export function buildArgsFromRegistry(methodId, resolvedParams) {
|
|
134
171
|
const def = getMethodDef(methodId);
|
|
135
172
|
if (!def)
|
|
@@ -151,6 +188,8 @@ export function buildArgsFromRegistry(methodId, resolvedParams) {
|
|
|
151
188
|
const format = (resolvedParams[`${arg.audioFrame}.format`] ?? resolvedParams['audio.format'] ?? 'pcm16');
|
|
152
189
|
return { data, sampleRate, channels, format };
|
|
153
190
|
}
|
|
191
|
+
if ('images' in arg)
|
|
192
|
+
return [resolvedParams[arg.images]];
|
|
154
193
|
return resolvedParams[arg.param];
|
|
155
194
|
});
|
|
156
195
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pluginMethodRegistry.js","sourceRoot":"","sources":["../../../../src/automations/pluginMethodRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"pluginMethodRegistry.js","sourceRoot":"","sources":["../../../../src/automations/pluginMethodRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA2BtD,MAAM,cAAc,GAAoB,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;AAC3E,MAAM,cAAc,GAAoB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;AAC7E,MAAM,YAAY,GAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAE1D,MAAM,CAAC,MAAM,sBAAsB,GAAwD;IACzF,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE;QACjC;YACE,EAAE,EAAE,qBAAqB;YACzB,QAAQ,EAAE,gDAAgD;YAC1D,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC;YAC5D,cAAc,EAAE,yBAAyB;SAC1C;QACD;YACE,EAAE,EAAE,eAAe;YACnB,QAAQ,EAAE,mDAAmD;YAC7D,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,YAAY,CAAC;YAC5C,cAAc,EAAE,yBAAyB;SAC1C;KACF;IACD,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE;QAC/B;YACE,EAAE,EAAE,mBAAmB;YACvB,QAAQ,EAAE,8CAA8C;YACxD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC;YAC5D,cAAc,EAAE,uBAAuB;SACxC;QACD;YACE,EAAE,EAAE,aAAa;YACjB,QAAQ,EAAE,iDAAiD;YAC3D,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,YAAY,CAAC;YAC5C,cAAc,EAAE,uBAAuB;SACxC;KACF;IACD,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE;QAC/B;YACE,EAAE,EAAE,iBAAiB;YACrB,QAAQ,EAAE,gDAAgD;YAC1D,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,YAAY,CAAC;YAC7C,cAAc,EAAE,uBAAuB;SACxC;KACF;IACD,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE;QACjC;YACE,EAAE,EAAE,mBAAmB;YACvB,QAAQ,EAAE,kDAAkD;YAC5D,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,YAAY,CAAC;YAC7C,cAAc,EAAE,yBAAyB;SAC1C;KACF;IACD,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE;QAC9B;YACE,EAAE,EAAE,eAAe;YACnB,QAAQ,EAAE,4CAA4C;YACtD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,EAAE;YACR,cAAc,EAAE,sBAAsB;YACtC,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAmB,EAAG,MAAM,CAAC,MAA8C,IAAI,EAAE,CAAC;SAC9J;KACF;IACD,CAAC,eAAe,CAAC,qBAAqB,CAAC,EAAE;QACvC;YACE,EAAE,EAAE,2BAA2B;YAC/B,QAAQ,EAAE,+CAA+C;YACzD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC;YAC5D,cAAc,EAAE,+BAA+B;SAChD;QACD;YACE,EAAE,EAAE,qBAAqB;YACzB,QAAQ,EAAE,kDAAkD;YAC5D,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,YAAY,CAAC;YAC5C,cAAc,EAAE,+BAA+B;SAChD;KACF;IACD,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAAE;QACrC;YACE,EAAE,EAAE,yBAAyB;YAC7B,QAAQ,EAAE,oDAAoD;YAC9D,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC;YAC5D,cAAc,EAAE,6BAA6B;SAC9C;QACD;YACE,EAAE,EAAE,uBAAuB;YAC3B,QAAQ,EAAE,2DAA2D;YACrE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,YAAY,CAAC;YAC5C,cAAc,EAAE,6BAA6B;SAC9C;KACF;IACD,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE;QACjC;YACE,EAAE,EAAE,qBAAqB;YACzB,QAAQ,EAAE,gDAAgD;YAC1D,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,YAAY,CAAC;YAC5C,cAAc,EAAE,yBAAyB;SAC1C;QACD;YACE,EAAE,EAAE,cAAc;YAClB,QAAQ,EAAE,kDAAkD;YAC5D,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,YAAY,CAAC;YAC5C,cAAc,EAAE,yBAAyB;SAC1C;KACF;IACD,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE;QAChC;YACE,EAAE,EAAE,oBAAoB;YACxB,QAAQ,EAAE,+CAA+C;YACzD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC;YAC5D,cAAc,EAAE,wBAAwB;SACzC;QACD;YACE,EAAE,EAAE,aAAa;YACjB,QAAQ,EAAE,iDAAiD;YAC3D,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACnI,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,YAAY,CAAC;YAClD,cAAc,EAAE,wBAAwB;SACzC;KACF;IACD,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE;QAC/B;YACE,EAAE,EAAE,mBAAmB;YACvB,QAAQ,EAAE,8CAA8C;YACxD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC;YAC5D,cAAc,EAAE,cAAc;SAC/B;QACD;YACE,EAAE,EAAE,qBAAqB;YACzB,QAAQ,EAAE,gDAAgD;YAC1D,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,yCAAyC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClI,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,YAAY,CAAC;YAC5C,cAAc,EAAE,cAAc;SAC/B;QACD;YACE,EAAE,EAAE,kBAAkB;YACtB,QAAQ,EAAE,mDAAmD;YAC7D,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,wCAAwC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;YAC3H,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SAC1B;KACF;CACF,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACtD,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAoB,EACpB,MAAqB,EACrB,QAAoC,EACpC,MAA+B;IAE/B,IAAI,GAAG,CAAC,GAAG;QAAE,OAAO,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE,oCAAoC,CAAC,CAAC;IACpF,OAAO,MAAM,MAAM,CAAC,GAAG,qBAAqB,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAgB,EAAE,cAAuC;IAC7F,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAE/C,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1B,IAAI,OAAO,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC;QACrC,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAW,CAAC;YACjD,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,KAAK,QAAQ,CAAC,IAAI,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACjG,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,KAAK,SAAS,CAAC,IAAI,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YACpG,MAAM,MAAM,GAAG,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,KAAK,SAAS,CAAC,IAAI,cAAc,CAAC,cAAc,CAAC,IAAI,KAAK,CAAW,CAAC;YAC5G,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC3D,CAAC;QACD,IAAI,YAAY,IAAI,GAAG,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,CAAW,CAAC;YACtD,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,UAAU,aAAa,CAAC,IAAI,cAAc,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC,CAAC;YAC1H,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,UAAU,WAAW,CAAC,IAAI,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/G,MAAM,MAAM,GAAG,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,UAAU,SAAS,CAAC,IAAI,cAAc,CAAC,cAAc,CAAC,IAAI,OAAO,CAAW,CAAC;YACnH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAChD,CAAC;QACD,IAAI,QAAQ,IAAI,GAAG;YAAE,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACzD,OAAO,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB;IAIvC,MAAM,MAAM,GAGR,EAAE,CAAC;IAEP,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClC,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3B,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;aAC3B,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;IACN,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { BoundingBox, ImageMetadata, ObjectDetectionPluginResponse, PluginContract, SegmentationImage, SegmentationPluginResponse } from '@camera.ui/sdk';
|
|
2
|
+
export interface SegmentedObject {
|
|
3
|
+
label?: string;
|
|
4
|
+
confidence?: number;
|
|
5
|
+
box: BoundingBox;
|
|
6
|
+
outline: BoundingBox;
|
|
7
|
+
}
|
|
8
|
+
export interface SegmentedPicture {
|
|
9
|
+
detected: boolean;
|
|
10
|
+
detections: SegmentedObject[];
|
|
11
|
+
}
|
|
12
|
+
export interface SegmentingPlugin {
|
|
13
|
+
testObjectDetection?(imageData: Buffer, metadata: ImageMetadata, config: Record<string, unknown>): Promise<ObjectDetectionPluginResponse | undefined>;
|
|
14
|
+
segmentImages?(images: SegmentationImage[], config?: Record<string, unknown>): Promise<(SegmentationPluginResponse | undefined)[]>;
|
|
15
|
+
}
|
|
16
|
+
export declare function segmentPicture(plugin: SegmentingPlugin, contract: PluginContract | undefined, picture: Buffer, config: Record<string, unknown>): Promise<SegmentedPicture>;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
2
|
+
if (value !== null && value !== void 0) {
|
|
3
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
+
var dispose, inner;
|
|
5
|
+
if (async) {
|
|
6
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
+
dispose = value[Symbol.asyncDispose];
|
|
8
|
+
}
|
|
9
|
+
if (dispose === void 0) {
|
|
10
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
+
dispose = value[Symbol.dispose];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
16
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
17
|
+
}
|
|
18
|
+
else if (async) {
|
|
19
|
+
env.stack.push({ async: true });
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
24
|
+
return function (env) {
|
|
25
|
+
function fail(e) {
|
|
26
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
27
|
+
env.hasError = true;
|
|
28
|
+
}
|
|
29
|
+
var r, s = 0;
|
|
30
|
+
function next() {
|
|
31
|
+
while (r = env.stack.pop()) {
|
|
32
|
+
try {
|
|
33
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
34
|
+
if (r.dispose) {
|
|
35
|
+
var result = r.dispose.call(r.value);
|
|
36
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
37
|
+
}
|
|
38
|
+
else s |= 1;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
fail(e);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
45
|
+
if (env.hasError) throw env.error;
|
|
46
|
+
}
|
|
47
|
+
return next();
|
|
48
|
+
};
|
|
49
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
50
|
+
var e = new Error(message);
|
|
51
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
|
+
});
|
|
53
|
+
import { hasInterface, PluginInterface } from '@camera.ui/sdk';
|
|
54
|
+
import { Scaler } from 'node-av/api';
|
|
55
|
+
import { iou } from '../camera/decoder/detection-window.js';
|
|
56
|
+
import { withPicture } from '../utils/image.js';
|
|
57
|
+
const LABELS = new Set(['person', 'vehicle', 'animal']);
|
|
58
|
+
const MIN_CONFIDENCE = 0.5;
|
|
59
|
+
const MAX_OBJECTS = 8;
|
|
60
|
+
const NMS_IOU = 0.45;
|
|
61
|
+
const REGION_PADDING = 0.15;
|
|
62
|
+
const REGION_MAX_EDGE = 640;
|
|
63
|
+
const JPEG_QUALITY = 92;
|
|
64
|
+
const WHOLE_PICTURE = { x: 0, y: 0, width: 1, height: 1 };
|
|
65
|
+
export async function segmentPicture(plugin, contract, picture, config) {
|
|
66
|
+
if (!picture?.length)
|
|
67
|
+
throw new Error('A picture is needed');
|
|
68
|
+
const detections = await withPicture(picture, async (frame) => {
|
|
69
|
+
const objects = contract && hasInterface(contract, PluginInterface.ObjectDetection) ? await objectsIn(plugin, picture, frame) : [{ box: WHOLE_PICTURE }];
|
|
70
|
+
return await outline(plugin, frame, objects, config);
|
|
71
|
+
});
|
|
72
|
+
if (!detections)
|
|
73
|
+
throw new Error('The picture could not be read');
|
|
74
|
+
return { detected: detections.length > 0, detections };
|
|
75
|
+
}
|
|
76
|
+
async function objectsIn(plugin, picture, frame) {
|
|
77
|
+
const response = await plugin.testObjectDetection?.(picture, { width: frame.width, height: frame.height }, {});
|
|
78
|
+
const candidates = (response?.detections ?? [])
|
|
79
|
+
.filter((d) => d.box && LABELS.has(d.label.toLowerCase()) && d.confidence >= MIN_CONFIDENCE)
|
|
80
|
+
.map((d) => ({ label: d.label.toLowerCase(), confidence: d.confidence, box: d.box }))
|
|
81
|
+
.sort((a, b) => b.confidence - a.confidence);
|
|
82
|
+
const kept = [];
|
|
83
|
+
for (const candidate of candidates) {
|
|
84
|
+
if (kept.every((k) => k.label !== candidate.label || iou(k.box, candidate.box) <= NMS_IOU))
|
|
85
|
+
kept.push(candidate);
|
|
86
|
+
}
|
|
87
|
+
return kept.slice(0, MAX_OBJECTS);
|
|
88
|
+
}
|
|
89
|
+
async function outline(plugin, frame, objects, config) {
|
|
90
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
91
|
+
try {
|
|
92
|
+
const scaler = __addDisposableResource(env_1, new Scaler(), false);
|
|
93
|
+
const sent = [];
|
|
94
|
+
const images = [];
|
|
95
|
+
for (const object of objects) {
|
|
96
|
+
const region = regionAround(object.box, frame.width, frame.height);
|
|
97
|
+
if (!region)
|
|
98
|
+
continue;
|
|
99
|
+
const scale = Math.min(1, REGION_MAX_EDGE / Math.max(region.width, region.height));
|
|
100
|
+
const resize = { width: Math.max(2, Math.round(region.width * scale) & ~1), height: Math.max(2, Math.round(region.height * scale) & ~1) };
|
|
101
|
+
const image = await scaler.toJpeg(frame, { crop: region, resize, quality: JPEG_QUALITY });
|
|
102
|
+
images.push({ image, box: boxInRegion(object.box, region, frame.width, frame.height) });
|
|
103
|
+
sent.push({ object, region });
|
|
104
|
+
}
|
|
105
|
+
if (!images.length)
|
|
106
|
+
return [];
|
|
107
|
+
const results = (await plugin.segmentImages?.(images, config)) ?? [];
|
|
108
|
+
const outlined = [];
|
|
109
|
+
sent.forEach(({ object, region }, i) => {
|
|
110
|
+
const mask = results[i]?.mask;
|
|
111
|
+
if (mask)
|
|
112
|
+
outlined.push({ ...object, outline: boxInPicture(mask.box, region, frame.width, frame.height) });
|
|
113
|
+
});
|
|
114
|
+
return outlined;
|
|
115
|
+
}
|
|
116
|
+
catch (e_1) {
|
|
117
|
+
env_1.error = e_1;
|
|
118
|
+
env_1.hasError = true;
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
__disposeResources(env_1);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function regionAround(box, width, height) {
|
|
125
|
+
const padX = box.width * width * REGION_PADDING;
|
|
126
|
+
const padY = box.height * height * REGION_PADDING;
|
|
127
|
+
const side = Math.min(Math.max(box.width * width + 2 * padX, box.height * height + 2 * padY), width, height) & ~1;
|
|
128
|
+
if (side < 2)
|
|
129
|
+
return undefined;
|
|
130
|
+
const cx = (box.x + box.width / 2) * width;
|
|
131
|
+
const cy = (box.y + box.height / 2) * height;
|
|
132
|
+
const x = Math.min(Math.max(Math.round(cx - side / 2), 0), width - side) & ~1;
|
|
133
|
+
const y = Math.min(Math.max(Math.round(cy - side / 2), 0), height - side) & ~1;
|
|
134
|
+
return { x, y, width: side, height: side };
|
|
135
|
+
}
|
|
136
|
+
function boxInRegion(box, region, width, height) {
|
|
137
|
+
return {
|
|
138
|
+
x: (box.x * width - region.x) / region.width,
|
|
139
|
+
y: (box.y * height - region.y) / region.height,
|
|
140
|
+
width: (box.width * width) / region.width,
|
|
141
|
+
height: (box.height * height) / region.height,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function boxInPicture(box, region, width, height) {
|
|
145
|
+
return {
|
|
146
|
+
x: (region.x + box.x * region.width) / width,
|
|
147
|
+
y: (region.y + box.y * region.height) / height,
|
|
148
|
+
width: (box.width * region.width) / width,
|
|
149
|
+
height: (box.height * region.height) / height,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=segment-picture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-picture.js","sourceRoot":"","sources":["../../../../src/automations/segment-picture.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,8 @@ import type { Logger } from '@camera.ui/common/logger';
|
|
|
3
3
|
import type { RPCClient } from '@camera.ui/rpc';
|
|
4
4
|
import type { CameraDetectionSettings, CameraFrameWorkerSettings, CameraUiSettings, CameraZones, PtzAutotrackSettings } from '@camera.ui/sdk';
|
|
5
5
|
import type { CoordinatorSensorInfo } from '../../rpc/interfaces/detection.js';
|
|
6
|
-
import type { TrackedClipEmbedding, TrackedFaceDetection } from './event-manager.js';
|
|
6
|
+
import type { TrackedClipEmbedding, TrackedFaceDetection, TrackedPersonEmbedding } from './event-manager.js';
|
|
7
|
+
import type { TraceFaceRead } from './event-trace.js';
|
|
7
8
|
import type { CoordinatorSourceUrl, FrameWorkerPerfSnapshot, ObjectBenchmarkResult } from './types.js';
|
|
8
9
|
export interface DetectionCoordinatorConfig {
|
|
9
10
|
cameraId: string;
|
|
@@ -57,6 +58,7 @@ export declare class DetectionCoordinator {
|
|
|
57
58
|
private trackAnchorBoxes;
|
|
58
59
|
private farewellBoxes;
|
|
59
60
|
private lastTrackedById;
|
|
61
|
+
private faceReads;
|
|
60
62
|
private detectionWindow;
|
|
61
63
|
private mainStreamActive;
|
|
62
64
|
private idleSince;
|
|
@@ -90,7 +92,9 @@ export declare class DetectionCoordinator {
|
|
|
90
92
|
vectorJobStarted(): void;
|
|
91
93
|
vectorJobSettled(): void;
|
|
92
94
|
acceptClipVectors(embeddings: TrackedClipEmbedding[], embeddingModel: string, capturedAt: number): void;
|
|
95
|
+
traceFaceReads(reads: TraceFaceRead[]): void;
|
|
93
96
|
acceptFaceVectors(faces: TrackedFaceDetection[], embeddingModel: string, capturedAt: number): void;
|
|
97
|
+
acceptPersonVectors(persons: TrackedPersonEmbedding[], embeddingModel: string, capturedAt: number): void;
|
|
94
98
|
dispose(): Promise<void>;
|
|
95
99
|
onSensorAdded(sensor: CoordinatorSensorInfo): Promise<void>;
|
|
96
100
|
onSensorRemoved(sensorId: string): Promise<void>;
|
|
@@ -105,7 +109,6 @@ export declare class DetectionCoordinator {
|
|
|
105
109
|
private get cascadeEnabled();
|
|
106
110
|
private get cascadeTimeoutSeconds();
|
|
107
111
|
private get motionResolution();
|
|
108
|
-
private get targetFps();
|
|
109
112
|
private get videoAspectRatio();
|
|
110
113
|
private get mainStreamAvailable();
|
|
111
114
|
private get mainStreamWanted();
|
|
@@ -35,14 +35,15 @@ import { PtzAutotracker } from './ptz/autotracker.js';
|
|
|
35
35
|
import { SecondaryStage } from './secondary-stage.js';
|
|
36
36
|
import { BufferedSource } from './sources/buffered-source.js';
|
|
37
37
|
import { FrameSource } from './sources/frame-source.js';
|
|
38
|
-
import {
|
|
38
|
+
import { trainingValue } from './training-sink.js';
|
|
39
|
+
import { DETECT_TIMEOUT_MS, DETECTOR_METRIC_TYPES, ensureDetectionBoxes, isFullFrameBox, isMovingTrack, isTrainingSubject, MOTION_WIDTH_MAP } from './types.js';
|
|
39
40
|
const TRAINING_FRAME_MAX_WIDTH = 1280;
|
|
40
41
|
const TRAINING_ATTRIBUTE_BONUS = 0.2;
|
|
42
|
+
const TRAINING_SUGGESTION_WEIGHT = 0.5;
|
|
41
43
|
const TRAINING_FRAME_QUALITY = 80;
|
|
42
44
|
const MOMENT_EVENTS = new Set(['objectEntered', 'objectWoke', 'objectRecovered', 'bestShotUpdated']);
|
|
43
45
|
const WITNESS_WINDOW_MS = 3000;
|
|
44
46
|
const HELD_MOMENT_MS = 4000;
|
|
45
|
-
const MOMENT_MOVING_SPEED = 0.05;
|
|
46
47
|
const MOMENT_ATTRIBUTE_MIN_AREA = 600;
|
|
47
48
|
const DEFAULT_CASCADE_TIMEOUT = 10;
|
|
48
49
|
const OBJECT_DWELL_SECONDS = 2;
|
|
@@ -101,6 +102,7 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
101
102
|
trackAnchorBoxes = [];
|
|
102
103
|
farewellBoxes = [];
|
|
103
104
|
lastTrackedById = new Map();
|
|
105
|
+
faceReads = [];
|
|
104
106
|
detectionWindow = new DetectionWindow();
|
|
105
107
|
mainStreamActive = false;
|
|
106
108
|
idleSince = 0;
|
|
@@ -190,7 +192,6 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
190
192
|
proxy: this.proxy,
|
|
191
193
|
cameraId: this.config.cameraId,
|
|
192
194
|
settings: this.config.ptzAutotrack,
|
|
193
|
-
getFps: () => this.targetFps,
|
|
194
195
|
onSuppressionActivated: () => this.handleSuppressionActivated(),
|
|
195
196
|
});
|
|
196
197
|
this.cascadeUnsubscribe = this.cascade.onChange((event) => {
|
|
@@ -367,9 +368,15 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
367
368
|
acceptClipVectors(embeddings, embeddingModel, capturedAt) {
|
|
368
369
|
this.eventManager.acceptClipVectors(embeddings, embeddingModel, capturedAt);
|
|
369
370
|
}
|
|
371
|
+
traceFaceReads(reads) {
|
|
372
|
+
this.faceReads.push(...reads);
|
|
373
|
+
}
|
|
370
374
|
acceptFaceVectors(faces, embeddingModel, capturedAt) {
|
|
371
375
|
this.eventManager.acceptFaceVectors(faces, embeddingModel, capturedAt);
|
|
372
376
|
}
|
|
377
|
+
acceptPersonVectors(persons, embeddingModel, capturedAt) {
|
|
378
|
+
this.eventManager.acceptPersonVectors(persons, embeddingModel, capturedAt);
|
|
379
|
+
}
|
|
373
380
|
async dispose() {
|
|
374
381
|
this.heldMoments.clear();
|
|
375
382
|
await this.stopVideoLoop();
|
|
@@ -509,6 +516,8 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
509
516
|
if (results.thumbnails && results.thumbnails.length > 0) {
|
|
510
517
|
snapshot.thumbnails = results.thumbnails;
|
|
511
518
|
}
|
|
519
|
+
if (results.trainingSuggestions)
|
|
520
|
+
snapshot.trainingSuggestions = results.trainingSuggestions;
|
|
512
521
|
await this.attachTrainingFrame(snapshot, analysis);
|
|
513
522
|
this.eventManager.processResults(snapshot);
|
|
514
523
|
}
|
|
@@ -640,9 +649,6 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
640
649
|
get motionResolution() {
|
|
641
650
|
return this.config.detectionSettings.motion.resolution;
|
|
642
651
|
}
|
|
643
|
-
get targetFps() {
|
|
644
|
-
return this.frameSource.fps;
|
|
645
|
-
}
|
|
646
652
|
get videoAspectRatio() {
|
|
647
653
|
const [w, h] = this.config.interfaceSettings.aspectRatio.split(':').map(Number);
|
|
648
654
|
return w / h;
|
|
@@ -1299,6 +1305,10 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1299
1305
|
trace.rtp = analysis.rtp;
|
|
1300
1306
|
trace.src = analysis.role?.replace('-resolution', '');
|
|
1301
1307
|
trace.attrs = traceAttributes(results);
|
|
1308
|
+
if (this.faceReads.length > 0) {
|
|
1309
|
+
trace.reads = this.faceReads;
|
|
1310
|
+
this.faceReads = [];
|
|
1311
|
+
}
|
|
1302
1312
|
const witness = [...this.witnessSeen].filter(([, at]) => Math.abs(trace.tMs - at) <= WITNESS_WINDOW_MS).map(([label]) => label);
|
|
1303
1313
|
if (witness.length > 0)
|
|
1304
1314
|
trace.witness = witness;
|
|
@@ -1322,6 +1332,7 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1322
1332
|
let objectDetections = [];
|
|
1323
1333
|
let staticDetections = [];
|
|
1324
1334
|
let trainingExtras = [];
|
|
1335
|
+
let trainingSuggestions = [];
|
|
1325
1336
|
const results = { timestamp: t0 };
|
|
1326
1337
|
let trace;
|
|
1327
1338
|
// while the PTZ repositions: motion and object keep running so the
|
|
@@ -1454,10 +1465,11 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1454
1465
|
results.object = { detected: objectDetections.length > 0, detections: visibleTracks };
|
|
1455
1466
|
staticDetections = pipelineResult.staticTracks;
|
|
1456
1467
|
trainingExtras = pipelineResult.trainingExtras;
|
|
1468
|
+
trainingSuggestions = pipelineResult.trainingSuggestions;
|
|
1457
1469
|
if (pipelineResult.crossings.length > 0)
|
|
1458
1470
|
results.lineCrossings = pipelineResult.crossings;
|
|
1459
|
-
// incl. extrapolated tracks,
|
|
1460
|
-
//
|
|
1471
|
+
// incl. extrapolated tracks, they keep the target's id through a
|
|
1472
|
+
// missed detector frame
|
|
1461
1473
|
this.ptzAutotracker.handleObjectDetections(pipelineResult.tracked);
|
|
1462
1474
|
// live tracks anchor the next tick's window; a track that just died
|
|
1463
1475
|
// gets one farewell look at its last position
|
|
@@ -1508,7 +1520,8 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1508
1520
|
return;
|
|
1509
1521
|
if (objectDetections.length > 0) {
|
|
1510
1522
|
const images = this.hqUpgrade ?? analysis;
|
|
1511
|
-
|
|
1523
|
+
const stillPersons = staticDetections.filter((d) => d.label === 'person');
|
|
1524
|
+
await this.runSecondariesAndThumbnails(images, objectDetections, results, stillPersons);
|
|
1512
1525
|
if (!this.loopRunning)
|
|
1513
1526
|
return;
|
|
1514
1527
|
await this.captureAttributeMoment(results, images, t0);
|
|
@@ -1526,6 +1539,9 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1526
1539
|
snapshot.staticObjects = staticDetections;
|
|
1527
1540
|
if (trainingExtras.length > 0)
|
|
1528
1541
|
snapshot.trainingExtras = trainingExtras;
|
|
1542
|
+
const suggestions = [...trainingSuggestions, ...(results.trainingSuggestions ?? [])];
|
|
1543
|
+
if (suggestions.length > 0)
|
|
1544
|
+
snapshot.trainingSuggestions = suggestions;
|
|
1529
1545
|
if (results.thumbnails && results.thumbnails.length > 0) {
|
|
1530
1546
|
snapshot.thumbnails = results.thumbnails;
|
|
1531
1547
|
}
|
|
@@ -1567,13 +1583,13 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1567
1583
|
this.thumbnailer.upgradeEventThumbnailAsync();
|
|
1568
1584
|
}
|
|
1569
1585
|
}
|
|
1570
|
-
async runSecondariesAndThumbnails(analysis, objectDetections, results) {
|
|
1586
|
+
async runSecondariesAndThumbnails(analysis, objectDetections, results, stillPersons = []) {
|
|
1571
1587
|
if (objectDetections.length === 0)
|
|
1572
1588
|
return;
|
|
1573
1589
|
this.perf.objects += objectDetections.length;
|
|
1574
1590
|
this.perf.framesWithObjects++;
|
|
1575
1591
|
const secondaryStart = Date.now();
|
|
1576
|
-
await this.secondaries.detect(analysis.frame, analysis.scaler, objectDetections, results);
|
|
1592
|
+
await this.secondaries.detect(analysis.frame, analysis.scaler, objectDetections, results, stillPersons);
|
|
1577
1593
|
this.perf.secondaryMs += Date.now() - secondaryStart;
|
|
1578
1594
|
try {
|
|
1579
1595
|
const jpegStart = Date.now();
|
|
@@ -1667,26 +1683,30 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1667
1683
|
async attachTrainingFrame(snapshot, analysis) {
|
|
1668
1684
|
if (!this.eventManager.hasActiveEvent() && !this.snapshotWillStartEvent(snapshot))
|
|
1669
1685
|
return;
|
|
1670
|
-
//
|
|
1671
|
-
|
|
1686
|
+
// the sink sums only the boxes the scene memory does not know yet
|
|
1687
|
+
const value = (label, confidence, box) => trainingValue(label, confidence, this.pipeline.threshold(label), box);
|
|
1672
1688
|
const subjects = snapshot.objects
|
|
1673
1689
|
.filter((d) => isTrainingSubject(d))
|
|
1674
|
-
.map((d) => ({ label: d.label, box: d.box, score:
|
|
1675
|
-
// flat bonus: faces and plates are the scarce labels
|
|
1676
|
-
//
|
|
1677
|
-
// an older frame and must not lift this one
|
|
1690
|
+
.map((d) => ({ label: d.label, box: d.box, score: value(d.label, d.confidence, d.box) }));
|
|
1691
|
+
// flat bonus: faces and plates are the scarce labels; fresh only, a
|
|
1692
|
+
// buffered stale result describes an older frame and must not lift this one
|
|
1678
1693
|
const now = Date.now();
|
|
1679
1694
|
const facesFresh = snapshot.facesAt !== undefined && now - snapshot.facesAt <= SECONDARY_FRESH_MS;
|
|
1680
1695
|
const platesFresh = snapshot.platesAt !== undefined && now - snapshot.platesAt <= SECONDARY_FRESH_MS;
|
|
1681
1696
|
for (const face of facesFresh ? snapshot.faces : []) {
|
|
1682
1697
|
if (face.box && !isFullFrameBox(face.box))
|
|
1683
|
-
subjects.push({ label: 'face', box: face.box, score: TRAINING_ATTRIBUTE_BONUS
|
|
1698
|
+
subjects.push({ label: 'face', box: face.box, score: TRAINING_ATTRIBUTE_BONUS });
|
|
1684
1699
|
}
|
|
1685
1700
|
for (const plate of platesFresh ? snapshot.plates : []) {
|
|
1686
1701
|
if (plate.box && !isFullFrameBox(plate.box))
|
|
1687
|
-
subjects.push({ label: 'license_plate', box: plate.box, score: TRAINING_ATTRIBUTE_BONUS
|
|
1702
|
+
subjects.push({ label: 'license_plate', box: plate.box, score: TRAINING_ATTRIBUTE_BONUS });
|
|
1703
|
+
}
|
|
1704
|
+
for (const hint of snapshot.trainingSuggestions ?? []) {
|
|
1705
|
+
if (!isFullFrameBox(hint.box)) {
|
|
1706
|
+
subjects.push({ label: hint.label, box: hint.box, score: TRAINING_SUGGESTION_WEIGHT * value(hint.label, hint.confidence, hint.box), hint: true });
|
|
1707
|
+
}
|
|
1688
1708
|
}
|
|
1689
|
-
if (subjects.
|
|
1709
|
+
if (!subjects.some((s) => !s.hint))
|
|
1690
1710
|
return;
|
|
1691
1711
|
if (!this.eventManager.wantsTrainingFrame(subjects))
|
|
1692
1712
|
return;
|
|
@@ -1697,6 +1717,7 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1697
1717
|
if (jpeg) {
|
|
1698
1718
|
snapshot.trainingFrame = jpeg;
|
|
1699
1719
|
snapshot.trainingSubjects = subjects;
|
|
1720
|
+
snapshot.trainingDetector = this.plugins.get(SensorType.Object)?.pluginId;
|
|
1700
1721
|
}
|
|
1701
1722
|
}
|
|
1702
1723
|
catch (error) {
|
|
@@ -1827,7 +1848,7 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
1827
1848
|
}
|
|
1828
1849
|
async captureMoment(subject, score, trigger, tracked, analysis, at) {
|
|
1829
1850
|
const box = { x: subject.x, y: subject.y, width: subject.width, height: subject.height };
|
|
1830
|
-
const moving = tracked.filter(
|
|
1851
|
+
const moving = tracked.filter(isMovingTrack).map((d) => d.box);
|
|
1831
1852
|
const target = { subject: box, base: unionBox([box, ...moving]), hint: directionOf(subject.velocityX, subject.velocityY) };
|
|
1832
1853
|
const rendered = await this.renderMoment(target, analysis);
|
|
1833
1854
|
if (!rendered)
|
|
@@ -2112,7 +2133,9 @@ let DetectionCoordinator = class DetectionCoordinator {
|
|
|
2112
2133
|
const assist = this.plugins.get(SensorType.ObjectAssist);
|
|
2113
2134
|
try {
|
|
2114
2135
|
const inferStart = Date.now();
|
|
2115
|
-
|
|
2136
|
+
// the plugin delivers from its floor: only boxes above the user threshold
|
|
2137
|
+
// may replace the camera's report
|
|
2138
|
+
const boxed = this.pipeline.aboveThreshold(await this.assistDetections(assist, frame, scaler, reported));
|
|
2116
2139
|
this.perf.assistMs += Date.now() - inferStart;
|
|
2117
2140
|
this.perf.assistCount++;
|
|
2118
2141
|
const reportedLabels = new Set(reported.map((d) => d.label.toLowerCase()));
|