Workflow: Add new observations
Collect and store audio data from recorders
Audio data winds up in several places: a local workstation, redundant backups of yearly directories, and the RAID-0 archive.
- Visit the bioacoustic recorders and rotate SD cards (I do it biweekly, weather permitting)
- Copy/paste recorder files from SD cards to yearly directories on my local workstation.
- Back those files up continuously for 2 years, store older years on at least two external backup drives, store at least one backup set offsite
- Also copy/paste recorder files from SD cards to the corresponding yearly archive volume in the 80 Tbyte RAID array running on the BirdOMatic computer.
Run BirdNET–Analyzer to identify calls
Rerun the analysis of the current-year directory of the bioacoustic audio archive to create a selection.table file of ID/Results for each audio file that hasn’t already been analyzed
- TIP: set field recorder sampling rate to 48k – avoids the need to resample audio, much shorter processing time
- TIP: use the –skip_existing_results option to narrow the analysis to new audio only
- TIP: use the –lat and –lon options to narrow the possible-species list to the location of the recorders
- TIP: use the –threads option to manage the load on the computer
- TIP: use the file and folder naming conventions listed below
- CD into BirdNET-Analyzer script directory
cd /Users/mikeoconnor/Documents/BirdNET-Analyzer\ github/BirdNET-Analyzer
- Launch the Python virtual environment defined during installation
source venv/bin/activate
- Run the script – update paths and GPS coordinates
python3 -m birdnet_analyzer.analyze --threads 8 --lat 44.415947 --lon -91.700659 --skip_existing_results -o /Users/mikeoconnor/Documents/BirdWorkbench/birdnet_analyzer_RUN_FILES/run_files_2025 /Volumes/Bio/Bio\ 2025/From\ Recorders
- Shut down the virtual environment
deactivate
Combine results into a single text file – one row per ID, one combined file per year
Combine the selection.table files to regenerate a run_files_COMBINED_20nn.txt file with all the results for the year
- TIP: use the file and folder naming conventions listed below
- Use the BirdNET_run-file_combinerVN.sh script
- Edit the Directory statements at the top of the script to point to input and output paths (see Naming Conventions below)
- Run the script from the command line
sh /Users/mikeoconnor/Documents/BirdWorkbench/BirdWorkbench_BASH_scripts/BirdNET_run-file_combinerV3.sh
- Note: V3 skips the “params” file generated by newer versions of BirdNET-Analyzer
Convert the merged selection.tables files into an .FST file for the visualizer program.
This refreshes the data table that the R UI loads each time a new session request comes in. A number of columns are calculated from the selection-table data and local weather data is posted for each ID.
- TIP: use the file and folder naming conventions listed below
- Use the rscript combine_birdnet_runs_vN.R script
- Edit the top of the script to add yearly variables and point to input path and output paths
- Run the script from the command line
- e.g.
rscript /Users/mikeoconnor/Documents/BirdWorkbench/BirdWorkbench_R_Scripts/combine_birdnet_runs.R
Refresh the weather database
Weather data comes from a SQLlite database that is completely separate from this project. It’s documented here as a reminder for me and as example of how additional data can be merged with BirdNET-Analyzer data.
- Log into the weather archive machine, navigate to desktop/Valley.wssite file and “show package contents” to locate the weather.db file
- Copy the weather.db file to the weather_snoop_valley_weather folder on the BirdOMatic computer
- Rename it valley.weather.db
Restart the server
This isn’t absolutely required. The updated .FST table should be available to new sessions as soon as it’s written during that last step, but restarting just seems like a good idea to get everything all right and tight.
