Last active
November 16, 2023 22:24
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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