{"slug": "bird-walk-an-offline-bird-identifier-that-says-not-sure-birdnet-gemma", "title": "Bird Walk: An Offline Bird Identifier That Says \"Not Sure\" (BirdNET + Gemma)", "summary": "A developer built Bird Walk, an offline bird identifier that runs entirely on a laptop with Wi-Fi disabled, combining BirdNET for audio classification with a local Gemma 1B model for short field notes. The tool filters candidates by location and week to avoid implausible species, raises its confidence cutoff to 0.4, and is designed to answer \"Not sure\" rather than guess; the developer notes it was tested only indoors with phone-speaker playback and has not been field-tested outdoors.", "body_md": "*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass](https://dev.to/challenges/hacktoberfest-week1-2026-10-05)*\n\nBird Walk is a bird identifier that runs entirely on a laptop with the Wi-Fi switched off. You press Enter, put the screen down, and listen to the birds around you for 15 seconds. Then it tells you which bird it heard, how sure it is, and a short field note about that bird.\n\nI live near Attock, Pakistan. Most bird tools assume US or European species lists, so I made location part of the pipeline: the tool only considers birds that are plausible for my area in the current week. It is for anyone who wants to learn the birds around them without needing signal, an account or a subscription.\n\nThe part I care about most is that it is willing to say \"Not sure\". A bird tool that always gives an answer is a tool that lies a lot.\n\n**Honest note:** I built and tested this indoors, playing bird calls from a phone speaker next to the laptop microphone. I did not get to take it on a proper outdoor walk before the deadline. The design is meant for the outdoors (offline, microphone first, short answers), but I have not field-tested it yet.\n\n[https://drive.google.com/file/d/1f2F4F3O4l1yL_EzWlx2Z1Uzzwbxdqumf/view?usp=sharing](https://drive.google.com/file/d/1f2F4F3O4l1yL_EzWlx2Z1Uzzwbxdqumf/view?usp=sharing)\n\n[https://github.com/sundanaeem-systems/bird_walk](https://github.com/sundanaeem-systems/bird_walk)\n\nEverything runs locally:\n\n`sounddevice`).` llama-cpp-python` and writes two sentences about the bird.\n**Gemma made things up.** My first version just told Gemma the bird's name and asked for a description. For one identification it confidently described the bird as \"dark-blue\" with a \"slightly curved beak\". That was simply wrong. A 1B model does not know birds, it guesses.\n\nSo I changed the design. I wrote a small table of local facts for common birds of the area, and Gemma is only allowed to rephrase those facts, at temperature 0. If a bird is not in the table, the tool prints no note at all instead of inventing one. This is the part I like most: the small model does what it is good at (turning facts into friendly words) and not what it is bad at (knowing things).\n\n**It is still not perfect.** The House Crow note above has a second sentence (\"Please observe this fascinating bird closely.\") that is not in my facts. Even with a strict prompt, a 1B model adds filler. A simple fix would be to keep only the first sentence, which I would do next.\n\n**Thresholds needed tuning.** My first offline run reported a Tree Pipit at 26 percent, barely above my 0.25 cutoff, so I raised the cutoff to 0.4. Earlier, with a loose local filter, the tool also reported a Song Thrush at 77 percent, a bird I would not expect near Attock in autumn. Multiplying by local likelihood and tightening the filter made these cases rarer.\n\nAll tests were indoors, with Wi-Fi switched off, using calls played from a phone speaker.\n\n| Run | What I played | What Bird Walk said | Audio confidence | \n|---|---|---|---|\n| 1 | A recording with no clear bird | Not sure | below threshold | \n| 2 | House Sparrow call | House Sparrow | 81 to 95 percent (several runs) | \n| 3 | [fill in] | House Crow | 61% | \n| 4 | [fill in] | Not sure (closest guess Common Myna) | 16% | \n| 5 | [fill in] | Not sure (nothing above threshold) | n/a | \n| 6 | [fill in] | Tree Pipit | 74% | \n\nWhat this tells me: it recognised a clean House Sparrow call reliably, it stayed quiet when it was not sure, and it can still give a confident answer I would want to double check, such as run 6. Confidence is not the same as being right, and playback through a speaker is much cleaner than a real outdoor soundscape, so real-world accuracy will probably be lower than this table suggests.\n\n**Limitations:** the facts table covers only about a dozen common birds; BirdNET can be confidently wrong in noisy places; Gemma 1B sometimes adds filler; voice output is not done; the week number is an approximation; and I have not tested it on a real walk yet.\n\nI built this step by step in a chat with an AI assistant, testing each piece in the terminal as I went.", "url": "https://wpnews.pro/news/bird-walk-an-offline-bird-identifier-that-says-not-sure-birdnet-gemma", "canonical_source": "https://dev.to/sundas_naeem_6f4864a7c69d/bird-walk-an-offline-bird-identifier-that-says-not-sure-birdnet-gemma-42g3", "published_at": "2026-10-11 06:43:42+00:00", "updated_at": "2026-10-11 06:51:44.895106+00:00", "lang": "en", "topics": ["artificial-intelligence", "machine-learning", "ai-tools", "large-language-models", "natural-language-processing"], "entities": ["Bird Walk", "BirdNET", "Gemma", "Attock", "Pakistan", "GitHub", "llama-cpp-python", "sounddevice"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/bird-walk-an-offline-bird-identifier-that-says-not-sure-birdnet-gemma", "markdown": "https://wpnews.pro/news/bird-walk-an-offline-bird-identifier-that-says-not-sure-birdnet-gemma.md", "text": "https://wpnews.pro/news/bird-walk-an-offline-bird-identifier-that-says-not-sure-birdnet-gemma.txt", "jsonld": "https://wpnews.pro/news/bird-walk-an-offline-bird-identifier-that-says-not-sure-birdnet-gemma.jsonld"}}