This project was inspired by fugleramme by arnegiacomo. A microphone sits by the garden, BirdNET-Go identifies what it hears, and a large color e-ink panel in a picture frame shows the day's birds as old natural history illustrations, each one sized by the bird's real body mass. If you want an e-ink frame, build that one. It is very well documented.
I wanted to make something similar for my wife, who loves birds, but a few things sent me in a different direction. I already had a Raspberry Pi 3 and a 7" Pi touchscreen in a drawer, and current BirdNET-Go now recommends a Pi 4 or newer. Large e-ink panels are expensive, and new Pis are getting up there too. fugleramme's artwork covers Northern European birds, and our feeder in North America mostly gets house finches, mourning doves, and red-winged blackbirds. I also liked the idea of being able to tap a bird to see what it was, how many detections we've had, and when it was observed.
Plate 197's namesake is an Audubon plate featuring a house finch like the ones that visit my bird feeder. They're my favorite!
How it differsBirdNET-Go outgrew the Pi 3, but the BirdNET model itself runs on it without trouble. So instead of the full application, Plate 197 uses a small Python service: it records 3-second clips at 48 kHz, runs them through BirdNET v2.4, writes detections to SQLite, and serves them to a web page shown in Chromium. No audio leaves the house.
BirdNET also has a range model. Give it a latitude, longitude, and week of the year, and it returns the species you could plausibly hear there. Here on the Colorado Front Range that's 138 species out of 6, 522. Limiting the classifier to that list made the biggest difference to accuracy of anything I tried.
The page uses a dark background. E-ink reflects light like paper, so a paper-colored page makes sense there. An LCD gives off light, and a cream-colored screen turns into a lamp in the living room at night. On the dark background, how bright a bird appears depends on how recently it was heard. On the dark background, how bright a bird appears depends on how recently it was last heard. One calling right now is fully lit and one that hasn't been heard since dawn is dimmer. Regulars stay bright, because the clock restarts every time they call again, so the screen reads as who's around. It fills through the day and clears at midnight.
Tap a bird and a panel slides up with its name, when it was last heard, how many times it has been heard today, and when it was first heard today. If it's the first time the bird has ever shown up, or the first time this year (the red-winged blackbirds coming back in spring, for example), a small banner says so, and the bird appears with a red pulse when it arrives.
Audubon and the house finchThe artwork comes from John James Audubon's Birds of America, cut out in photo editing software so we have transparent backgrounds. Audubon painted before most bird names were settled, so you can't find many plates by their modern names. His house finch is the Crimson-fronted Purple-finch, octavo Plate 197, painted from specimens collected on Long's expedition to the Rocky Mountains. So the house finches at our feeder in Colorado are the same population the species was first described from, which is where the project name comes from.
The repo has a table of Audubon's names for common Front Range birds. The junco is a "Snow Bird, " and the flicker you want here is the Red-shafted Woodpecker, since his Golden-winged Woodpecker is the eastern bird. It also has instructions about how you can create the artwork needed for birds in your neck of the woods. The plates are public domain, so it is as easy as pulling down your favorites, cropping, and adding them to the plates directory on your Pi or before you build your image. There's also a command, earshot species --missing, that lists which local birds still need a picture.
This sits on a table with no keyboard or mouse, so I spent a lot of effort making sure it never needs one.
- The microphone is chosen by its name instead of its ALSA device number, which changes when other USB devices are plugged in, and the service finds it again after a reconnect.
- If audio stops arriving, the stream is reopened. A systemd watchdog restarts the service if it hangs entirely.
- Wi-Fi can be set from a text file on the boot partition, and every boot writes a plain-text report there. If something goes wrong, pull the SD card, put it in any laptop, and read the report.
- Logging is kept to warnings only, since constant writes wear out SD cards.
You can build a ready-to-flash image with CustomPiOS, or run an install script on an existing Pi OS Lite 64-bit card.
Build your ownHardware: Raspberry Pi 3 or newer, Raspberry Pi 7" touchscreen, a USB microphone, and a SmartiPi Touch 2.
The Pi gets pretty hot running the earshot service, so I recommend a cooling system if substituting for the SmartiPi Touch 2.
Setting it upThere are two ways to install Plate 197.
Detailed instructions can be found in the README.
Install script. Write Raspberry Pi OS Lite (64-bit) to a card with Raspberry Pi Imager, and set your username, Wi-Fi, and SSH in Imager's settings before writing, since the finished frame has no keyboard. Then SSH in, clone the repo, and run sudo deploy/install.sh. It installs everything, downloads the BirdNET models (about 120 MB, once), turns on the display backlight driver, and sets up three services: one that listens and identifies birds, one that runs the display, and one that dims the screen at night. Reboot and it starts listening.
Ready-to-flash image. If you'd rather build a complete SD card image, distro/build.sh uses CustomPiOS to do it. You can put your location, Wi-Fi details, and artwork in before building, so the card works the first time it's powered on. This is the better choice if you want to make more than one, or build one as a gift for someone else.
The most important settings:
- Location. BirdNET uses your latitude and longitude to decide which birds could plausibly be at your feeder, so set these to somewhere near home.
- Microphone. The service finds the mic by part of its name.
earshot deviceslists the names it can see. The default, "USB, " works for most USB mics.
You can change settings without a keyboard. The card's boot partition has a file called plate197.toml that any laptop can open. Power the Pi down, pull the card, edit the file, and put it back. Wi-Fi can be set there too.
The plates aren't included in the repo. Audubon's paintings are old enough to be public domain, but the scans I used come from a particular collection that asks for credit wherever they're shown, and I didn't want to redistribute someone else's scans. It also works out in practice: every feeder gets different birds, so you'd be cutting out your own anyway.
- Find the plate on Audubon's site. Many plates show several birds, and sometimes more than one species, so choose the figure you want.
- Cut the bird out and remove the background so it's transparent. I did this in Canva.
- Export it at about 300 pixels on the longest side. Full-size scans use too much memory on a Pi 3 and can blank the screen.
- Name the file after BirdNET's name for the bird, not Audubon's, in lowercase with dashes: house-finch.png, not crimson-necked-bull-finch.png. Names for birds have evolved since Audubon's time, so often these will not match. All 6, 522 names are in labels.txt, which comes with the model download and sits at /var/lib/earshot/models/labels.txt on the Pi. You can also use the CLI: earshot species <name> searches for the BirdNET name you need.
- Drop it in the
platesfolder. It appears on screen within a minute, with no restart.
earshot species --missing lists the birds likely near you that don't have a picture yet, and earshot plates --fix shrinks any images that are too large. A bird with no picture isn't drawn, though it's still detected and recorded. Add its plate later and the history is already there, back to the day you plugged the frame in. A few common feeder birds have a simple hand-drawn outline that stands in until you cut one.
Run earshot check over SSH. It tests the microphone, models, database, display, power supply, and temperature, and reports each one on its own line.
If you can't SSH in, every boot writes a plain text report called plate197-report.txt to the boot partition. Pull the card, put it in any laptop, and open it.
- fugleramme by Arne Giacomo, for the original idea and for sizing birds by body mass
- BirdNET v2.4 models, CC BY-NC-SA 4.0, from the K. Lisa Yang Center for Conservation Bioacoustics at the Cornell Lab of Ornithology and Chemnitz University of Technology
- Audubon plates courtesy of the John James Audubon Center at Mill Grove, Montgomery County Audubon Collection, and Zebra Publishing










Comments