Merge pull request #246 from mcguirepr89/Nachtzuster_improvements_to_birdnet_analysis
Nachtzuster improvements to birdnet analysis
This commit is contained in:
+47
-198
@@ -91,32 +91,16 @@ run_analysis() {
|
||||
fi
|
||||
|
||||
for i in "${files[@]}";do
|
||||
[ ! -f ${1}/${i} ] && continue
|
||||
echo "${1}/${i}" > $HOME/BirdNET-Pi/analyzing_now.txt
|
||||
[ -z ${RECORDING_LENGTH} ] && RECORDING_LENGTH=15
|
||||
[ ${RECORDING_LENGTH} == "60" ] && RECORDING_LENGTH=01:00
|
||||
FILE_LENGTH="$(ffmpeg -i ${1}/${i} 2>&1 | awk -F. '/Duration/ {print $1}' | cut -d':' -f3-4)"
|
||||
[ -z $FILE_LENGTH ] && sleep 1 && continue
|
||||
echo "RECORDING_LENGTH set to ${RECORDING_LENGTH}"
|
||||
a=0
|
||||
if [ "${RECORDING_LENGTH}" == "01:00" ];then
|
||||
until [ "$(ffmpeg -i ${1}/${i} 2>&1 | awk -F. '/Duration/ {print $1}' | cut -d':' -f3-4)" == "${RECORDING_LENGTH}" ];do
|
||||
sleep 1
|
||||
[ $a -ge 60 ] && rm -f ${1}/${i} && break
|
||||
a=$((a+1))
|
||||
done
|
||||
elif [ "${RECORDING_LENGTH}" -lt 10 ];then
|
||||
until [ "$(ffmpeg -i ${1}/${i} 2>&1 | awk -F. '/Duration/ {print $1}' | cut -d':' -f3-4)" == "00:0${RECORDING_LENGTH}" ];do
|
||||
sleep 1
|
||||
[ $a -ge ${RECORDING_LENGTH} ] && rm -f ${1}/${i} && break
|
||||
a=$((a+1))
|
||||
done
|
||||
else
|
||||
until [ "$(ffmpeg -i ${1}/${i} 2>&1 | awk -F. '/Duration/ {print $1}' | cut -d':' -f3-4)" == "00:${RECORDING_LENGTH}" ];do
|
||||
sleep 1
|
||||
[ $a -ge ${RECORDING_LENGTH} ] && rm -f ${1}/${i} && break
|
||||
a=$((a+1))
|
||||
done
|
||||
fi
|
||||
until [ -z "$(lsof -t ${1}/${i})" ];do
|
||||
sleep 2
|
||||
[ $a -ge ${RECORDING_LENGTH} ] && rm -f ${1}/${i} && break
|
||||
a=$((a+2))
|
||||
done
|
||||
|
||||
if ! grep 5050 <(netstat -tulpn 2>&1) &> /dev/null 2>&1;then
|
||||
echo "Waiting for socket"
|
||||
@@ -124,183 +108,48 @@ run_analysis() {
|
||||
sleep 1
|
||||
done
|
||||
fi
|
||||
if [ -f ${1}/${i} ] && [ ! -f ${INCLUDE_LIST} ] && [ ! -f ${EXCLUDE_LIST} ] && [ -z $BIRDWEATHER_ID ];then
|
||||
echo "analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}""
|
||||
analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}"
|
||||
elif [ -f ${1}/${i} ] && [ -f ${INCLUDELIST} ] && [ ! -f ${EXCLUDE_LIST} ] && [ -z $BIRDWEATHER_ID ];then
|
||||
echo "analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
--include_list "${INCLUDE_LIST}""
|
||||
analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
--include_list "${INCLUDE_LIST}"
|
||||
elif [ -f ${1}/${i} ] && [ ! -f ${INCLUDE_LIST} ] && [ -f ${EXCLUDE_LIST} ] && [ -z $BIRDWEATHER_ID ];then
|
||||
echo "analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
--exclude_list "${EXCLUDE_LIST}""
|
||||
analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
--exclude_list "${EXCLUDE_LIST}"
|
||||
elif [ -f ${1}/${i} ] && [ -f ${INCLUDE_LIST} ] && [ -f ${EXCLUDE_LIST} ] && [ -z $BIRDWEATHER_ID ];then
|
||||
echo "analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
--include_list "${INCLUDE_LIST}" \
|
||||
--exclude_list "${EXCLUDE_LIST}""
|
||||
analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
--include_list "${INCLUDE_LIST}" \
|
||||
--exclude_list "${EXCLUDE_LIST}"
|
||||
elif [ -f ${1}/${i} ] && [ ! -f ${INCLUDE_LIST} ] && [ ! -f ${EXCLUDE_LIST} ] && [ ! -z $BIRDWEATHER_ID ];then
|
||||
echo "analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
--birdweather_id "IN_USE""
|
||||
analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
--birdweather_id "${BIRDWEATHER_ID}"
|
||||
elif [ -f ${1}/${i} ] && [ -f ${INCLUDE_LIST} ] && [ ! -f ${EXCLUDE_LIST} ] && [ ! -z $BIRDWEATHER_ID ];then
|
||||
echo "analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
--include_list "${INCLUDE_LIST}" \
|
||||
--birdweather_id "IN_USE""
|
||||
analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
--include_list "${INCLUDE_LIST}" \
|
||||
--birdweather_id "${BIRDWEATHER_ID}"
|
||||
elif [ -f ${1}/${i} ] && [ ! -f ${INCLUDE_LIST} ] && [ -f ${EXCLUDE_LIST} ] && [ ! -z $BIRDWEATHER_ID ];then
|
||||
echo "analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
--exclude_list "${EXCLUDE_LIST}" \
|
||||
--birdweather_id "IN_USE""
|
||||
analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
--exclude_list "${EXCLUDE_LIST}" \
|
||||
--birdweather_id "${BIRDWEATHER_ID}"
|
||||
elif [ -f ${1}/${i} ] && [ -f ${INCLUDE_LIST} ] && [ -f ${EXCLUDE_LIST} ] && [ ! -z $BIRDWEATHER_ID ];then
|
||||
echo "analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
--include_list "${INCLUDE_LIST}" \
|
||||
--exclude_list "${EXCLUDE_LIST}" \
|
||||
--birdweather_id "IN_USE""
|
||||
analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
--include_list "${INCLUDE_LIST}" \
|
||||
--exclude_list "${EXCLUDE_LIST}" \
|
||||
--birdweather_id "${BIRDWEATHER_ID}"
|
||||
# prepare optional parameters for analyse.py
|
||||
if [ -f ${INCLUDE_LIST} ]; then
|
||||
INCLUDEPARAM="--include_list \"${INCLUDE_LIST}\""
|
||||
else
|
||||
INCLUDEPARAM=""
|
||||
fi
|
||||
if [ -f ${EXCLUDE_LIST} ]; then
|
||||
EXCLUDEPARAM="--include_list \"${EXCLUDE_LIST}\""
|
||||
else
|
||||
EXCLUDEPARAM=""
|
||||
fi
|
||||
if [ ! -z $BIRDWEATHER_ID ]; then
|
||||
BIRDWEATHER_ID_PARAM="--birdweather_id \"${BIRDWEATHER_ID}\""
|
||||
BIRDWEATHER_ID_LOG="--birdweather_id \"IN_USE\""
|
||||
else
|
||||
BIRDWEATHER_ID_PARAM=""
|
||||
BIRDWEATHER_ID_LOG=""
|
||||
fi
|
||||
echo analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
${INCLUDEPARAM} \
|
||||
${EXCLUDEPARAM} \
|
||||
${BIRDWEATHER_ID_LOG}
|
||||
analyze.py \
|
||||
--i "${1}/${i}" \
|
||||
--o "${1}/${i}.csv" \
|
||||
--lat "${LATITUDE}" \
|
||||
--lon "${LONGITUDE}" \
|
||||
--week "${WEEK}" \
|
||||
--overlap "${OVERLAP}" \
|
||||
--sensitivity "${SENSITIVITY}" \
|
||||
--min_conf "${CONFIDENCE}" \
|
||||
${INCLUDEPARAM} \
|
||||
${EXCLUDEPARAM} \
|
||||
${BIRDWEATHER_ID_PARAM}
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ install_depends() {
|
||||
apt install -qqy caddy ftpd sqlite3 php-sqlite3 alsa-utils \
|
||||
pulseaudio avahi-utils sox libsox-fmt-mp3 php php-fpm php-curl php-xml \
|
||||
php-zip icecast2 swig ffmpeg wget unzip curl cmake make bc libjpeg-dev \
|
||||
zlib1g-dev python3-dev python3-pip python3-venv
|
||||
zlib1g-dev python3-dev python3-pip python3-venv lsof
|
||||
}
|
||||
|
||||
|
||||
|
||||
Executable
+31
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env bash
|
||||
OLDIFS=$IFS
|
||||
IFS=\|
|
||||
most_recent_results=($(sqlite3 ~/BirdNET-Pi/scripts/birds.db \
|
||||
'SELECT Com_Name, Time, Date FROM detections
|
||||
ORDER BY Date DESC, Time DESC
|
||||
LIMIT 1'))
|
||||
today=$(date +%F)
|
||||
yesterday=$(date --date="yesterday" +%F)
|
||||
two_days_ago=$(date --date="2 days ago" +%F)
|
||||
|
||||
echo -n The most recent detection was
|
||||
|
||||
if [[ "${most_recent_results[0]}" =~ ^[AEIOU].* ]];then
|
||||
echo -n " an ${most_recent_results[0]} at "
|
||||
else
|
||||
echo -n " a ${most_recent_results[0]} at "
|
||||
fi
|
||||
most_recent_results[1]=$(date --date="${most_recent_results[1]}" +%l:%M%p)
|
||||
echo -n ${most_recent_results[1]}
|
||||
if [[ ${most_recent_results[2]} == $today ]];then
|
||||
echo " today."
|
||||
elif [[ ${most_recent_results[2]} == $yesterday ]];then
|
||||
echo " yesterday."
|
||||
elif [[ ${most_recent_results[2]} == $two_days_ago ]];then
|
||||
echo " two days ago."
|
||||
else
|
||||
echo " on ${most_recent_results[2]}."
|
||||
fi
|
||||
|
||||
IFS=$OLDIFS
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
# Update BirdNET-Pi
|
||||
# Update BirdNET-Pi's Git Repo
|
||||
source /etc/birdnet/birdnet.conf
|
||||
trap 'exit 1' SIGINT SIGHUP
|
||||
USER=$(awk -F: '/1000/ {print $1}' /etc/passwd)
|
||||
@@ -11,13 +11,7 @@ sudo -u${USER} git -C $my_dir pull -f
|
||||
sudo systemctl daemon-reload
|
||||
sudo -u${USER} git -C $my_dir stash pop
|
||||
sudo ln -sf $my_dir/* /usr/local/bin/
|
||||
if ! grep python3 <(head -n1 $my_dir/analyze.py);then
|
||||
echo "Ensure all python scripts use the virtual environment"
|
||||
sed -si "1 i\\#\!$HOME/BirdNET-Pi/birdnet/bin/python3" $my_dir/*.py
|
||||
fi
|
||||
if ! grep PRIVACY_MODE /etc/birdnet/birdnet.conf;then
|
||||
sudo -u${USER} echo "PRIVACY_MODE=off" >> /etc/birdnet/birdnet.conf
|
||||
fi
|
||||
if ! grep RTSP_STREAM /etc/birdnet/birdnet.conf;then
|
||||
sudo -u${USER} echo "RTSP_STREAM=" >> /etc/birdnet/birdnet.conf
|
||||
fi
|
||||
|
||||
# The script below handles changes to the host system
|
||||
# Any additions to the updater should be placed in that file.
|
||||
sudo $my_dir/update_birdnet_snippets.sh
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
# Update BirdNET-Pi
|
||||
source /etc/birdnet/birdnet.conf
|
||||
trap 'exit 1' SIGINT SIGHUP
|
||||
USER=$(awk -F: '/1000/ {print $1}' /etc/passwd)
|
||||
HOME=$(awk -F: '/1000/ {print $6}' /etc/passwd)
|
||||
my_dir=$HOME/BirdNET-Pi/scripts
|
||||
if ! grep python3 <(head -n1 $my_dir/analyze.py) &>/dev/null;then
|
||||
echo "Ensure all python scripts use the virtual environment"
|
||||
sudo -u$USER sed -si "1 i\\#\!$HOME/BirdNET-Pi/birdnet/bin/python3" $my_dir/*.py
|
||||
fi
|
||||
if ! grep PRIVACY_MODE /etc/birdnet/birdnet.conf &>/dev/null;then
|
||||
sudo -u$USER echo "PRIVACY_MODE=off" >> /etc/birdnet/birdnet.conf
|
||||
fi
|
||||
if ! which lsof &>/dev/null;then
|
||||
sudo apt update && sudo apt -y install lsof
|
||||
fi
|
||||
Reference in New Issue
Block a user