I fed a global bird model foreign audio. It was confidently wrong. Then I fixed it.
Description and use
BirdNET, a global bird sound classifier, incorrectly identified species not present in Chidambaram, India. A local pipeline was built to download the model weights, generate a regional species list from iNaturalist, and filter predictions, yielding accurate local identifications.
Problem
A global bird identification model confidently predicted species that do not exist in the local region, leading to misleading results.
Outcome
The pipeline achieved 45.3% of detections within the regional species pack, compared to 0% for the global model on local audio. Analysis time was under 4 s for 83.8 s of audio after a 1 s model load.
Workflow
- download-model.mjs – fetch BirdNET+ weights and labels
- fetch-pack.mjs – build local species list from iNaturalist within a radius
- convert.mjs – convert .m4a/.mp3/.ogg to 32 kHz mono WAV
- analyze.mjs – run ONNX inference and write detection CSV
- summarize.mjs – score predictions against the local pack and generate docs/overview.md
- case.mjs – generate a case study from detection data
Evidence
BirdNET is a genuinely impressive open-source project. Point it at a recording and it will confidently tell you what you heard.
The model was not confused - it was sure, and wrong.
chidambaram-birdnudge is that button. It runs the same open weights on your own machine, then filters every prediction through a species list built from real observations near you.
The pipeline is five scripts: ...
- Record date: 2026-10-11T10:56:19.138Z