Various optimisations

This commit is contained in:
Alexandre
2024-06-07 09:24:23 +02:00
parent df0c36d197
commit 3f87a2c32e
9 changed files with 31 additions and 6690 deletions

View File

@@ -1,30 +0,0 @@
# Code to modify the birdnet_analysis.py and restore the Processed folder
# The last 30 wav files are stored in a dynamic manner in the Processed folder
import re
def modify_code(original_file, modified_file):
with open(original_file, 'r') as f:
lines = f.readlines()
# Define the modifications
modifications = {
'os.remove(file.file_name)': 'move_to_processed(file.file_name)',
'def handle_reporting_queue(queue):': 'def handle_reporting_queue(queue):\n conf = get_settings()\n processed_dir = os.path.join(conf[\'RECS_DIR\'], \'Processed\')\n os.makedirs(processed_dir, exist_ok=True)\n user_id = pwd.getpwnam(os.getenv(\'USER\')).pw_uid\n os.chown(processed_dir, user_id, user_id)',
'import threading\nfrom queue import Queue\nfrom subprocess import CalledProcessError': 'import threading\nfrom queue import Queue\nfrom subprocess import CalledProcessError\nimport glob\nimport time\nimport pwd',
'def move_to_processed(file_name):': 'def move_to_processed(file_name):\n conf = get_settings()\n processed_dir = os.path.join(conf[\'RECS_DIR\'], \'Processed\')\n os.rename(file_name, os.path.join(processed_dir, os.path.basename(file_name)))\n files = glob.glob(os.path.join(processed_dir, \'*\'))\n files.sort(key=os.path.getmtime)\n buffer_size = int(os.getenv(\'Processed_Buffer\', 30))\n while len(files) > buffer_size:\n os.remove(files.pop(0))'
}
# Apply the modifications
modified_lines = []
for line in lines:
for original, modified in modifications.items():
line = line.replace(original, modified)
modified_lines.append(line)
# Write the modified code to the new file
with open(modified_file, 'w') as f:
f.writelines(modified_lines)
# Use the function
modify_code('/home/pi/BirdNET-Pi/scripts/birdnet_analysis.py', '/home/pi/BirdNET-Pi/scripts/birdnet_analysis.py')

View File

@@ -1,117 +0,0 @@
#!/usr/bin/env bash
# This scripts allows to change the identification of a Birdnet-pi detection
#################
# SET VARIABLES #
#################
HOME="${HOME:-/home/pi}"
source /etc/birdnet/birdnet.conf &>/dev/null
# Get arguments
OLDNAME="$1" #OLDNAME="Mésange_charbonnière-78-2024-05-02-birdnet-RTSP_1-18:14:08.mp3"
NEWNAME="$2" #NEWNAME="Lapinus atricapilla_Lapinu à tête noire"
# Set log level
OUTPUT_TYPE="${3:-debug}" # Set 3rd argument to debug to have all outputs
# Ask for user input if no arguments
if [ -z "$OLDNAME" ]; then read -r -p 'OLDNAME (finishing by mp3): ' OLDNAME; fi
if [ -z "$NEWNAME" ]; then read -r -p 'NEWNAME (sciname_commoname): ' NEWNAME; fi
# Fixed values
LABELS_FILE="$HOME/BirdNET-Pi/model/labels.txt"
DB_FILE="$HOME/BirdNET-Pi/scripts/birds.db"
DETECTIONS_TABLE="detections"
###################
# VALIDITY CHECKS #
###################
# Check if files exist
if [ ! -f "$LABELS_FILE" ]; then echo "$LABELS_FILE doesn't exist, exiting" && exit 1; fi
if [ ! -f "$DB_FILE" ]; then echo "$DB_FILE doesn't exist, exiting" && exit 1; fi
# Check if inputs are valid
if [[ "$1" != *".mp3" ]]; then
echo "The first argument should be a filename starting with the common name of the bird and finishing by mp3!"
echo "Instead, it is : $1"
exit 1
elif [[ "$2" != *"_"* ]]; then
echo "The second argument should be in the format : \"scientific name_common name\""
echo "Instead, it is : $2"
exit 1
fi
# Check if $NEWNAME is found in the file $LABELS_FILE
if ! grep -q "$NEWNAME" "$LABELS_FILE"; then
echo "Error: $NEWNAME not found in $LABELS_FILE"
exit 1
fi
# Check if the common name as the same as the first
OLDNAME_space="${OLDNAME//_/ }"
if [[ "${OLDNAME_space%%-*}" == "${NEWNAME#*_}" ]]; then
echo "Error: $OLDNAME has the same common name as $NEWNAME"
exit 1
fi
##################
# EXECUTE SCRIPT #
##################
# Intro
[[ "$OUTPUT_TYPE" == "debug" ]] && echo "Starting to modify $OLDNAME to $NEWNAME"
# Get the line where the column "File_Name" matches exactly $OLDNAME
IFS='|' read -r OLDNAME_sciname OLDNAME_comname OLDNAME_date < <(sqlite3 "$DB_FILE" "SELECT Sci_Name, Com_Name, Date FROM $DETECTIONS_TABLE WHERE File_Name = '$OLDNAME' LIMIT 1;")
if [[ -z "$OLDNAME_sciname" ]]; then
echo "Error: No line matching $OLDNAME in $DB_FILE"
exit 1
fi
# Extract the part before the _ from $NEWNAME
NEWNAME_comname="${NEWNAME#*_}"
NEWNAME_sciname="${NEWNAME%%_*}"
# Replace spaces with underscores
NEWNAME_comname_safe="$(echo "$NEWNAME_comname" | tr -d "'" | tr ' ' '_')"
OLDNAME_comname_safe="$(echo "$OLDNAME_comname" | tr -d "'" | tr ' ' '_')"
# Replace OLDNAME_comname_safe with NEWNAME_comname_safe in OLDNAME
NEWNAME_filename="${OLDNAME//$OLDNAME_comname_safe/$NEWNAME_comname_safe}"
[[ "$OUTPUT_TYPE" == "debug" ]] && echo "This script will change the identification $OLDNAME from $OLDNAME_comname to ${NEWNAME#*_}"
########################
# EXECUTE : MOVE FILES #
########################
# Check if the file exists
FILE_PATH="$HOME/BirdSongs/Extracted/By_Date/$OLDNAME_date/$OLDNAME_comname_safe/$OLDNAME"
if [[ -f $FILE_PATH ]]; then
# Ensure the new directory exists
NEW_DIR="$HOME/BirdSongs/Extracted/By_Date/$OLDNAME_date/$NEWNAME_comname_safe"
mkdir -p "$NEW_DIR"
# Move and rename the file
mv "$FILE_PATH" "$NEW_DIR/$NEWNAME_filename"
mv "$FILE_PATH".png "$NEW_DIR/$NEWNAME_filename".png
[[ "$OUTPUT_TYPE" == "debug" ]] && echo "Files moved!"
else
echo "Error: File $FILE_PATH does not exist"
fi
###################################
# EXECUTE : UPDATE DATABASE FILES #
###################################
# Update the database
sqlite3 "$DB_FILE" "UPDATE $DETECTIONS_TABLE SET Sci_Name = '$NEWNAME_sciname', Com_Name = '$NEWNAME_comname', File_Name = '$NEWNAME_filename' WHERE File_Name = '$OLDNAME';"
[[ "$OUTPUT_TYPE" == "debug" ]] && echo "Database entry removed"
[[ "$OUTPUT_TYPE" == "debug" ]] && echo "All done!"

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,71 @@
#!/bin/bash
# Function to show the current timezone, with two alternative methods
show_timezone() {
# Check if the /etc/timezone file exists
if [ -f /etc/timezone ]; then
timezone=$(cat /etc/timezone)
elif [ -f /etc/localtime ]; then
timezone=$(readlink /etc/localtime)
timezone=${timezone/\/usr\/share\/zoneinfo\//}
else
timezone="Cannot determine timezone."
fi
echo "$timezone"
}
# Function to set the timezone
set_timezone() {
new_timezone="$1"
echo "$new_timezone" | sudo tee /etc/timezone >/dev/null
sudo ln -sf /usr/share/zoneinfo/"$new_timezone" /etc/localtime
if [ -f /etc/environment ]; then sudo sed -i "/TZ/c\TZ=$new_timezone" /etc/environment; fi
if [ -d /var/run/s6/container_environment ]; then sudo echo "$new_timezone" > /var/run/s6/container_environment/TZ; fi
echo "$new_timezone"
}
# Main script
case "$1" in
"set-ntp")
case "$2" in
"false")
sudo systemctl disable systemd-timesyncd
echo "NTP disabled"
;;
"true")
sudo systemctl enable systemd-timesyncd
sudo systemctl start systemd-timesyncd
echo "NTP enabled"
;;
*)
echo "Invalid argument for set-ntp. Use 'false' or 'true'."
;;
esac
;;
"show --value --property=Timezone")
show_timezone
;;
"set-timezone")
set_timezone "$2"
;;
*)
# Get values
local_time="$(date)"
utc_time="$(date -u)"
time_zone="$(show_timezone)"
# Check if NTP is used
if sudo systemctl status systemd-timesyncd | grep -q "active"; then
ntp_status="yes"
ntp_service="active"
else
ntp_status="no"
ntp_service="inactive"
fi
# Print the information
echo "Local time: $local_time"
echo "Universal time: $utc_time"
echo "Time zone: $time_zone"
echo "Network time on: $ntp_status"
echo "NTP service: $ntp_service"
;;
esac