Birding Despite Disability

Obsessions Don't Care About Limitations

An Automated Bird Recognition System Using The Raspberry Pi

I have a Raspberry Pi that I’ve been tinkering with for years, learning its personality while looking for a useful, novel application for it. I can now report that it is employed full-time in a worthy undertaking: as an automated listening and analysis station for bird vocalizations, using the BirdNET-Pi program.

This idea had been in my head for a while, and years ago I even started coding up my own python scripts that would take snippets of audio and calculate their correlations to a set of known waveforms (analyzing digital signals is what I did during my career in the magnetic recording industry). But my code for birds didn’t function very well, certainly nothing like today’s BirdNet or Merlin systems, which employ extensively trained neural networks.

Merlin is great in the field, while BirdNET is helpful at home where it is easier to upload WAV files whenever I find something curious in my recordings. But as they stand, these applications are not automated. What would be helpful is a system that constantly monitors an audio stream, anayzes it, and summarizes the results. Even better if it can save the good bits, too. That is where the Raspberry Pi comes in, because it can be made into a dedicated listening device that runs the BirdNET engine on the fly, using BirdNET-Pi.

A Pi, a power supply, a microphone (which can connect via USB) and a birdy outdoor place to locate the system are all you need. The Pi connects to you local network using its built-in wifi capability. The real-time results are available on a page that you can access from any browser on your network. It summarizes what it has heard, and allows you to play audio snippets, verify spectrograms, and peruse displays of the statistics.

Main BirdNET-Pi screen. More on the specific results below

This video provides a guide to the setup process, which is quite simple.

I put my Rev 1.0 of this system together with what I had on hand. I then rudely introduced it to its new home in our lovely Minnesota climate: it was about -7 F during its first morning outside. No need to connect the cooling fan in its case for now…

The unit I have is Pi Model B with a1.5GHz 64-bit quad-core CPU and 4GB RAM. Specifically, I bought this kit for about $130, which included the Pi and a few goodies that made it easy to use out of the box: a power supply, heat sinks, micro SD card, and a case with a fan. This kit is no longer available on Amazon, but plenty of others are.

One also needs a USB keyboard and mouse, plus a monitor. Depending on what you do with the Pi, these three items may not be needed once your system is up and running. To run BirdNet-Pi they are not necessary beyond the initial setup (although you will still need to access the Pi’s desktop on occasion: see below).

For my first go at this, I decided to use the only USB microphone that I had on hand: a cheap desktop job that I’ve used for Zoom calls. I don’t like using it for BirdNET-Pi, as it claims to have some kind of “noise-reduction” that is not described in any technical way. Whatever passive or active processing it is employing to improve the sound of the human voice is potentially introducing distortion to the digitized bird calls. So I’m looking for a good omnidirectional microphone to replace it soon, something amenable to outdoor use.

The only new item I bought was a weatherproof box to house the unit, so I can leave it outdoors. The one nice thing about the desktop microphone is the gooseneck, which allows it to use one of the cabling holes on the box.

Case, microphone, Pi, power adapter

I mentioned that a mouse, keyboard, and screen are not necessary once the unit is up and running, but there is at least one occasion when one needs to get at the Pi’s desktop: to shut it down. Disconnecting the power directly is potentially damaging for the Pi, and the best practice is to shut down via the drop down menu — there is no ON/OFF switch. I dealt with this by using the built-in VNC server that can be enabled on the Pi, together with a free VNC viewer app on my Android phone. This way I can access everything on the Pi without even going outside, and power it down safely when necessary.

VNC control of Pi desktop using Android phone

I’ve only been running a few days but so far it is performing well. Most of the identifications are spot on, and there are always some obviously wrong ones but these are expected in some cases. For example, the screen capture above, with the bar graph of species detected, includes Carolina Chickadee, which is nowhere to be found around here. This mis-ID is not unusual, given its similarity to the Black-capped vocalizations. It is not a problem to rectify this, because under the Tools menu, one can customize the species lists and prevent the reporting of specific species which you expect are being incorrectly identified.

Spectrogram results

Another way to use this device is to share it with the world, which you can do with BirdWeather. I’ve added my Pi to the map, which allows one to see what is being reported in real time from stations around the world.

I’m keeping the unit, for now, near or under our deck. It is easy to keep it powered here. But my goal is to make this rig more robust, with a truly weatherproof, low-noise microphone, and eventually connect it to a modest solar panel and backup battery.

I’ve also thought about adding a dedicated ADC board, such as this hat, but I’m not sure that a USB-based device isn’t just as good. More research to do…

The modest cost and minimal effort has already paid off for me, as today it correctly identified an uncommon visitor to our yard: a Cooper’s Hawk. How cool is that?

Noisy! I need a better microphone… but there’s the Cooper’s!

Rev 2.0 up and running.

Leave a Reply

%d bloggers like this: