@@ -3,7 +3,6 @@ const { v4: uuidv4 } = require('uuid');
33const axios = require ( 'axios' ) ;
44const mqtt = require ( 'mqtt' ) ;
55const fs = require ( './fs.util' ) ;
6- const { contains } = require ( './helpers.util' ) ;
76const { jwt } = require ( './auth.util' ) ;
87const { AUTH , SERVER , MQTT , FRIGATE , CAMERAS , STORAGE , UI } = require ( '../constants' ) ( ) ;
98const config = require ( '../constants/config' ) ;
@@ -156,47 +155,51 @@ module.exports.subscribe = () => {
156155module . exports . recognize = ( data ) => {
157156 try {
158157 if ( ! MQTT || ! MQTT . HOST ) return ;
159- const { matches, misses, unknown } = data ;
160- const camera = data . camera . toLowerCase ( ) ;
161- const hasUnknown = unknown && Object . keys ( unknown ) . length ;
162-
163- const configData = JSON . parse ( JSON . stringify ( data ) ) ;
164- delete configData . matches ;
165- delete configData . unknown ;
166- delete configData . results ;
158+ const baseData = JSON . parse ( JSON . stringify ( data ) ) ;
159+ const { id, duration, timestamp, attempts, zones, matches, misses, unknowns, counts } =
160+ baseData ;
161+ const camera = baseData . camera . toLowerCase ( ) ;
162+
163+ const payload = {
164+ base : {
165+ id,
166+ duration,
167+ timestamp,
168+ attempts,
169+ camera,
170+ zones,
171+ } ,
172+ } ;
173+ payload . unknown = { ...payload . base , unknown : unknowns [ 0 ] , unknowns } ;
174+ payload . match = { ...payload . base } ;
175+ payload . camera = {
176+ ...payload . base ,
177+ matches,
178+ misses,
179+ unknowns,
180+ counts,
181+ } ;
182+ payload . cameraReset = {
183+ ...payload . camera ,
184+ counts : {
185+ person : 0 ,
186+ match : 0 ,
187+ miss : 0 ,
188+ unknown : 0 ,
189+ } ,
190+ } ;
167191
168192 const messages = [ ] ;
169- const persons = [ ...new Set ( [ ...matches , ...misses ] . map ( ( { name } ) => name ) ) ] ;
170- let personCount = persons . length ? persons . length : hasUnknown ? 1 : 0 ;
171- // check to see if unknown bounding box is contained within or contains any of the match bounding boxes
172- // if false, then add 1 to the person count
173- if ( persons . length && hasUnknown ) {
174- let unknownFoundInMatch = false ;
175- matches . forEach ( ( match ) => {
176- if ( contains ( match . box , unknown . box ) || contains ( unknown . box , match . box ) )
177- unknownFoundInMatch = true ;
178- } ) ;
179-
180- let unknownFoundInMiss = false ;
181- misses . forEach ( ( miss ) => {
182- if ( contains ( miss . box , unknown . box ) || contains ( unknown . box , miss . box ) )
183- unknownFoundInMiss = true ;
184- } ) ;
185- if ( ! unknownFoundInMatch && ! unknownFoundInMiss ) personCount += 1 ;
186- }
187193
188194 messages . push ( {
189195 topic : `${ MQTT . TOPICS . CAMERAS } /${ camera } /person` ,
190- message : personCount . toString ( ) ,
196+ message : counts . person . toString ( ) ,
191197 } ) ;
192198
193- if ( hasUnknown ) {
199+ if ( unknowns . length ) {
194200 messages . push ( {
195201 topic : `${ MQTT . TOPICS . MATCHES } /unknown` ,
196- message : JSON . stringify ( {
197- ...configData ,
198- unknown,
199- } ) ,
202+ message : JSON . stringify ( payload . unknown ) ,
200203 } ) ;
201204
202205 if ( MQTT . TOPICS . HOMEASSISTANT ) {
@@ -215,10 +218,7 @@ module.exports.recognize = (data) => {
215218
216219 messages . push ( {
217220 topic : `${ MQTT . TOPICS . HOMEASSISTANT } /sensor/double-take/unknown/state` ,
218- message : JSON . stringify ( {
219- ...configData ,
220- unknown,
221- } ) ,
221+ message : JSON . stringify ( payload . unknown ) ,
222222 } ) ;
223223 }
224224 }
@@ -230,7 +230,7 @@ module.exports.recognize = (data) => {
230230 messages . push ( {
231231 topic : `${ MQTT . TOPICS . MATCHES } /${ topic } ` ,
232232 message : JSON . stringify ( {
233- ...configData ,
233+ ...payload . match ,
234234 match,
235235 } ) ,
236236 } ) ;
@@ -252,22 +252,17 @@ module.exports.recognize = (data) => {
252252 messages . push ( {
253253 topic : `${ MQTT . TOPICS . HOMEASSISTANT } /sensor/double-take/${ topic } /state` ,
254254 message : JSON . stringify ( {
255- ...configData ,
255+ ...payload . match ,
256256 match,
257257 } ) ,
258258 } ) ;
259259 }
260260 } ) ;
261261
262- if ( matches . length || misses . length || hasUnknown ) {
262+ if ( matches . length || misses . length || unknowns . length ) {
263263 messages . push ( {
264264 topic : `${ MQTT . TOPICS . CAMERAS } /${ camera } ` ,
265- message : JSON . stringify ( {
266- ...configData ,
267- matches,
268- misses,
269- unknown,
270- } ) ,
265+ message : JSON . stringify ( payload . camera ) ,
271266 } ) ;
272267
273268 if ( MQTT . TOPICS . HOMEASSISTANT ) {
@@ -286,13 +281,7 @@ module.exports.recognize = (data) => {
286281
287282 messages . push ( {
288283 topic : `${ MQTT . TOPICS . HOMEASSISTANT } /sensor/double-take/${ camera } /state` ,
289- message : JSON . stringify ( {
290- ...configData ,
291- matches,
292- misses,
293- unknown,
294- personCount,
295- } ) ,
284+ message : JSON . stringify ( payload . camera ) ,
296285 } ) ;
297286 }
298287 }
@@ -305,12 +294,7 @@ module.exports.recognize = (data) => {
305294 if ( MQTT . TOPICS . HOMEASSISTANT ) {
306295 this . publish ( {
307296 topic : `${ MQTT . TOPICS . HOMEASSISTANT } /sensor/double-take/${ camera } /state` ,
308- message : JSON . stringify ( {
309- ...configData ,
310- matches,
311- unknown,
312- personCount : 0 ,
313- } ) ,
297+ message : JSON . stringify ( payload . cameraReset ) ,
314298 } ) ;
315299 }
316300 } , 30000 ) ;
0 commit comments