Skip to content

Instantly share code, notes, and snippets.

@kiwi-cam
Last active November 16, 2023 22:24
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kiwi-cam/f3107620e720547a869e031e2f6fa859 to your computer and use it in GitHub Desktop.
Save kiwi-cam/f3107620e720547a869e031e2f6fa859 to your computer and use it in GitHub Desktop.
Using WyzeCam Hacks (https://github.com/HclX/WyzeHacks) with Azure Vision API and rclone for Uploads
#!/bin/bash
####### Configuration #####
# Azure Setup: https://docs.microsoft.com/en-us/azure/cognitive-services/cognitive-services-apis-create-account?tabs=multiservice%2Cwindows
AzureSubscriptionKey=""
AzureEndpoint=""
# IFTTT Setup: https://ifttt.com/maker_webhooks
IFTTTKey=""
IFTTTEventName=""
# Homebridge FFMPEG Setup
HomebridgeServer="127.0.0.1"
HomebridgePort="8080"
#Storage Root:
WyzeNFSRoot="/media"
#Camera Names/Macs:
Camera1Name="Driveway Cam"
Camera1Mac="2CAA8EXXXXXX"
Camera2Name="Front Lawn Cam"
Camera2Mac="2CAA8EXXXXXX"
Camera3Name=""
Camera3Mac=""
Camera4Name=""
Camera4Mac=""
####### Processing #####
for f in $(find $WyzeNFSRoot -name '*.jpg' -not -name 'latest-*.jpg')
do
FileName=$(basename $f)
FileDateTime=$(date -r $f)
if [[ $f == *"${Camera1Mac}"* ]]; then
CameraID=1
CameraName="${Camera1Name}"
elif [[ $f == *"${Camera2Mac}"* ]]; then
CameraID=2
CameraName="${Camera2Name}"
elif [[ $f == *"${Camera3Mac}"* ]]; then
CameraID=3
CameraName="${Camera3Name}"
elif [[ $f == *"${Camera4Mac}"* ]]; then
CameraID=4
CameraName="${Camera4Name}"
else
CameraName="Unknown"
fi
cp -rf $f $WyzeNFSRoot/latest-$CameraID.jpg
if [[ -f /var/tmp/persondetection.state ]]; then
#Process Images
# Visual AI
response=$(curl -X POST "${AzureEndpoint}/vision/v2.0/analyze?visualFeatures=Objects&language=en" -H "Ocp-Apim-Subscription-Key: ${AzureSubscriptionKey}" -H "Content-Type: application/octet-stream" --data-binary @$f)
if [[ $response == *"person"* ]]; then
echo "Alert: Person found in ${FileName}: ${response}"
logger -p 6 --tag=camera "Alert: Person found in ${FileName}: ${response}"
rclone --config /usr/lib/rclone/rclone.conf moveto $f "SecurityCam:/notification.jpg"
if [[ ! -z "$IFTTTEventName" ]]; then
#Trigger an alert via IFTTT
curl -X POST -H "Content-Type: application/json" "https://maker.ifttt.com/trigger/${IFTTTEventName}/with/key/${IFTTTKey}" -d '{"value1":"'"${CameraName}"'","value2":"'"${FileDateTime}"'"}'
fi
if [[ ! -z "$HomebridgeServer" ]]; then
#Trigger Homebridge FFMPEG Motion Alert
curl -X POST "http://${HomebridgeServer}:${HomebridgePort}/motion?${CameraName//[ ]/%20}"
fi
else
logger -p 6 --tag=camera "Info: No person found in ${FileName}: ${response}"
echo "Info: No person found in ${FileName}: ${response}"
rm -rf $f
fi
sleep 2
else
logger -p 6 --tag=camera "Info: Person Detection disabled, removing ${f}"
echo "Info: Person Detection disabled, removing ${f}"
rm -rf $f
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment