Last Updated or created 2022-12-01
Weird title i know.
I have several ip cameras which monitor movement in and around our home.
I’m using Zoneminder and other home automation systems but i want to scan through a bunch of files uploaded by the security cameras to my secondary fileserver.
So what is interesting?
- Major movement compared to a base image
- Movement compared to a previous uploaded image
- Setting a threshold when to output information (note the 65% mark)
| 76 % | 1438 | SDAlarm_20221129-213515.jpg | 3145 | .......-.......................X..................................................................... | 76 % | 1439 | SDAlarm_20221129-213517.jpg | 3661 | ..............-.....................X................................................................ | 76 % | 1440 | SDAlarm_20221129-213519.jpg | 3739 | ...........-.........................X............................................................... | 77 % | 1441 | SDAlarm_20221129-213521.jpg | 3704 | .....-...............................X...............................................................
Looking at the output we see:
At 76% of the captured images (image 1438) the threshold was above 3000 and the minus gives us the information of the difference between this image and the previous, the X marks the difference between current image and the baseline.
| percent | image number | filename | difference | graphbar
Bash script:
#!/bin/bash threshold=3000 baseline=$( ls SDAlarm*jpg | head -1) previous=$( ls SDAlarm*jpg | head -1) total=$( ls *.jpg |wc -l) echo "Number of files : $total" nr=1 ls *jpg | while read; do graph="....................................................................................................." diff=$(compare -verbose -metric MAE $baseline $REPLY /dev/null 2>&1 | grep all | awk '{ print $2 }' | cut -f1 -d. ) prevdiff=$(compare -verbose -metric MAE $previous $REPLY /dev/null 2>&1 | grep all | awk '{ print $2 }' | cut -f1 -d. ) line=$( echo "100 / $total * $nr" | bc -l | cut -f1 -d.) line=$(( $line + 1)) #echo -n "$line | $nr | $REPLY | " #echo $diff draw1=$(( $diff / 100 + 1)) draw2=$(( $prevdiff / 100 + 1)) graph=$(echo $graph | sed "s/./X/$draw1") graph=$(echo $graph | sed "s/./-/$draw2") if [ $diff -gt $threshold ] ; then printf "| %4s %% | %3s | %30s | %5s | %102s \n" $line $nr $REPLY $diff $graph fi nr=$(( $nr +1 )) previous=$REPLY done
Want to see only difference with previous image?
change:
if [ $diff -gt $threshold ] ; then
into
if [ $prevdiff -gt $threshold ] ; then