Michael Zazon

Homelab & networking · Build log

BirdNET near the nature preserve

A cheap mic near a large nature preserve feeds two bird ID models, and the detections show up on screens around the house.

Part 1 · Birds

We live right next to a large nature preserve and birds pass through all the time, so I wanted to know what was actually out there. It started as a fleeting idea and turned into a full end to end thing, all the way from microphone to e-ink displays.

I don’t have a yard feeder, so all of these are birds passing through. I’m using a lapel mic costing less than $15, placed outdoors in a sheltered spot. The mic feeds into BirdNET-Go, which splits the audio stream into 3-second chunks and passes each chunk through two models: Cornell Lab’s BirdNET (trained on ~6,000 species) and Google’s Perch (trained on 14,795 species). The models cross-check each other. Once I had the config sorted, the first evening gave me more than 120 detections across 10 species in about 2 hours. That’s a lot more than I expected for a yard without a feeder.

The second model (Perch) wasn’t getting the audio stream. Everything looked fine in the config, Perch was installed and enabled, but it never got any audio for a day, maybe two. Enabled is not the same as actually listening, so check the logs that both models are hearing things.

This was because there’s one setting in two places: BirdNET-Go maintains a global list of enabled models, and a per-audio-source list of models. I’d added Perch to the global list but not the mic’s list, so it was still only running BirdNET for that stretch of detections. Adding Perch to the mic’s list got both models running on the same audio.

Tip

In BirdNET-Go, models.enabled just says which models are available. The models list on each audio source is what decides which ones actually hear it.

By August, we’d archived about 62,500 detections (about 800/day) and heard 105 species, 5 of which weren’t birds. The katydid was the sixth-most-detected species of all time with about 3,500 detections, earning it the largest tile on the e-ink collage. I originally wanted bugs on the screens, but the katydid made me think otherwise. Bugs are now removed from the displays, but the stats keep every detection.

Aviary’s collage on a phone: field-journal plates of each species with its detection count

Aviary (which I promised to write up in an earlier post) polls BirdNET-Go every minute and stores its own copy of each detection in its own database. I opted for a copy rather than reading directly from BirdNET-Go’s database so that the site keeps working if BirdNET-Go restarts, and because BirdNET-Go prunes old detections, so having a copy is a good long-term archive. For all the screens in the house, the site renders its own page as an image and the device itself only has to display the image. It’s the same approach I used for our family e-ink photo frame.

Mic feeds BirdNET-Go and two models, Aviary renders bird images for two screens USB mic outdoors BirdNET-Go BirdNET + Perch models Aviary site own copy of detections rendered images Pi 1 screen every 3 minutes Color e-ink frame through Pigment

The e-ink frame and the old Pi screen rotate through the birds that have been around, so the data shows up in the house and not just on a dashboard somewhere. It’s a beautiful extension of the nature that surrounds us here at our home.

The color e-ink frame on the wall showing the bird collage, Blue Jay at the center

The old Pi screen is actually an original Raspberry Pi 1, which is too old to run a browser, so I’m rendering a fresh image every 3 minutes. The color e-ink frame is via Pigment, the app from the family photo frame post, with the birds being an extra album I called BirdNET. Aviary borrows from a few earlier projects out there.. the collage and stats ideas from AvianVisitors, the BirdNET-Go API pattern from birdnet_display, and the controller/display split from inky-bird-frame.

The Pigment app’s BirdNET album with seven views: three collages, all-time, journal plate, bird of the moment and weekly digest

The birds on the wall are styled like pages from a field journal. inky-bird-frame comes with a free MIT-licensed catalog of pre-rendered plates, and 59 of my species were already covered, so no new art or paid image tool was needed. Generated art covers display images for 21 more species at a total of $2.20 for the batch.

Note

Aviary is public, so neighbors can see what has been around with a plain link and no app.

I’m pretty happy with how it turned out. Next up is some more art for the birds that don’t have a plate yet and maybe a touchscreen kiosk mode for the smaller 7 inch desk display I have on a Raspberry Pi. The next part of this project is BirdNET listening in the backyard where I dive deeper into the mic and tuning two models to work together.