Last year i made a script for a friend who wanted to detect visually if his garden sprinkler was on or off. A few days ago i saw someone who wanted to see if things where moving in his house. (didn’t trust his landlord i think)
But he only had a dumb/simple/cheap camera .. so it had no motion detection.
I was thinking of my script, and could easily adapt it for this usage.
Most ipcams have somekind of URL/API you can use to capture a image.
Some examples below
# Reolink wget "http://ipnumber/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=randomstring&user=user&password=password" -O image.jpg # Foscam wget "http://ipnumber:88/CGIProxy.fcgi?cmd=snapPicture2&usr=user&pwd=password&cnt=randomstring" -O image.jpg # Edimax wget "http://user:password@ipnumber/jpg/image.jpg" -O image.jpg # Hikvision wget "http://user:password@ipnumber/ISAPI/Streaming/channels/101/picture" -O image.jpg
So using below script i can capture a image, compare it to the previous, and when it’s above a certain threshold sends a email.
#!/bin/bash # Only uses wget and image-magick treshhold=500 fuzzyness=20% # CHANGE WEBCAM THINGY TO OWN URL AND CREDENTIALS wget -q "http://webcamip/cgi-bin/api.cgi?cmd=Snap&channel=0&user=user&password=password" -O previous.jpg while true; do wget -q "http://webcamip/cgi-bin/api.cgi?cmd=Snap&channel=0&user=user&password=password" -O current.jpg value=$(compare -fuzz $fuzzyness previous.jpg current.jpg -metric mae diff.jpg 2>&1 | cut -f1 -d.) if [ $value -gt $treshhold ] ; then echo "ping $treshhold" echo "Something moved" | mail -s "Movement" user@example.com -A diff.jpg fi # Comment below if you want to compare against a base line .. not previous image cat current.jpg > previous.jpg sleep 60 done
Example previous picture
Example current picture
I got mailed with result
Hints tips:
Use crop to detect only a part.
copy current.jpg to a second file
Use painting black a part and compair with different treshhold fuzzyness to get different hotspots.
Below detects RED, use above ide with crop to detect red/green/blue leds
compare -verbose -metric mae 1.jpg 2.jpg /tmp/1.diff
1.jpg JPEG 2560x1920 2560x1920+0+0 8-bit sRGB 248819B 0.050u 0:00.057
2.jpg JPEG 2560x1920 2560x1920+0+0 8-bit sRGB 248949B 0.030u 0:00.137
Image: 1.jpg
Channel distortion: MAE
Channel distortion: MAE
red: 12517.5 (0.191005)
green: 11967.1 (0.182607)
blue: 12492.8 (0.190628)
all: 12325.8 (0.18808)
1.jpg=>/tmp/1.diff JPEG 2560x1920 2560x1920+0+0 8-bit sRGB 1.19495MiB 1.470u 0:00.197