<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shreyas</title>
    <description>The latest articles on DEV Community by Shreyas (@kilqwe).</description>
    <link>https://dev.to/kilqwe</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4164147%2F846dcca2-ba45-4ff8-8508-cfb1a20d512d.png</url>
      <title>DEV Community: Shreyas</title>
      <link>https://dev.to/kilqwe</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kilqwe"/>
    <language>en</language>
    <item>
      <title>Trail Echo: An Offline Bird Logger Built on BirdNET</title>
      <dc:creator>Shreyas</dc:creator>
      <pubDate>Mon, 12 Oct 2026 06:03:19 +0000</pubDate>
      <link>https://dev.to/kilqwe/trail-echo-an-offline-bird-logger-built-on-birdnet-inh</link>
      <guid>https://dev.to/kilqwe/trail-echo-an-offline-bird-logger-built-on-birdnet-inh</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Trail Echo is an offline bird logger. It listens in 60-second chunks, identifies species with the open BirdNET model, throws away chunks where nothing was heard, and gives you a dashboard of every bird you passed once you're back.&lt;/p&gt;

&lt;p&gt;The touch-grass idea: the screen is for &lt;em&gt;afterwards&lt;/em&gt;. During a walk, the device sits in a bag or pocket and listens, so you can look up at the trees instead of down at an identification app. At the end of the walk you get a species list and a timeline of when each bird was heard. It's for casual walkers and city dwellers who hear birds all the time and never learned their names.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current status:&lt;/strong&gt; the live logger is tested with system-audio capture on PC and microphone. Also tested with microphones on phone that connects to the same pipeline after media type conversions (from .m4a to .wav); field audio to be recorded on a phone and run through the same pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ldaeitrekjb4cuaz4az.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ldaeitrekjb4cuaz4az.png" alt=" " width="782" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffuw6rklf7aksd4l57o5e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffuw6rklf7aksd4l57o5e.png" alt=" " width="799" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frs1prx84ej9h1hmzwd3j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frs1prx84ej9h1hmzwd3j.png" alt=" " width="800" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmj1uok3b1leajyyfz0h3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmj1uok3b1leajyyfz0h3.png" alt=" " width="799" height="228"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/kilqwe" rel="noopener noreferrer"&gt;
        kilqwe
      &lt;/a&gt; / &lt;a href="https://github.com/kilqwe/hacktoberfest-week-1" rel="noopener noreferrer"&gt;
        hacktoberfest-week-1
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Offline bird logger built on BirdNET. Hacktoberfest 2026, Week 1: Touch Grass.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Trail Echo&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Offline bird logger built on &lt;a href="https://github.com/birdnet-team/BirdNET-Analyzer" rel="noopener noreferrer"&gt;BirdNET&lt;/a&gt;
It listens in 60-second chunks, identifies species locally, discards chunks with
no detections, and shows everything heard in a Streamlit dashboard.&lt;/p&gt;
&lt;p&gt;Built for Hacktoberfest 2026, Week 1: Touch Grass. The idea is to leave the
device in your pocket during a walk and look at the results afterwards.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;capture audio → BirdNET analysis → CSV per chunk → Streamlit dashboard&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chunks with no detections are deleted automatically (audio and CSV), so
storage only grows when something is heard.&lt;/li&gt;
&lt;li&gt;All inference runs locally. No audio leaves your machine.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Status&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Tested: The microphone successfully captures the sound of the birds (captured using xeno-canto and youtube).
Using BirdNET-Analyzer the app can successfully identify the bird species with confidence of &amp;gt;95%
Not yet tested: outdoor field recording on a real walk.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;python -m venv .venv
.venv&lt;span class="pl-cce"&gt;\S&lt;/span&gt;cripts&lt;span class="pl-cce"&gt;\a&lt;/span&gt;ctivate          &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/kilqwe/hacktoberfest-week-1" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open model:&lt;/strong&gt; BirdNET (TensorFlow, Cornell Lab of Ornithology and Chemnitz University of Technology), run locally through &lt;code&gt;birdnet-analyzer&lt;/code&gt;. The species list it loaded had 6,522 species.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capture:&lt;/strong&gt; &lt;code&gt;sounddevice&lt;/code&gt; for microphones and WASAPI loopback via
&lt;code&gt;PyAudioWPatch&lt;/code&gt;; &lt;code&gt;soundfile&lt;/code&gt; writes the chunks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pipeline:&lt;/strong&gt; record a chunk, call BirdNET, read the CSV, delete the audio and CSV if there are no detections.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard:&lt;/strong&gt; Streamlit and pandas: species table, detections per minute, raw log.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What broke along the way:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BirdNET failed silently because I hid subprocess errors, so the script printed success while writing nothing.&lt;/li&gt;
&lt;li&gt;The laptop mic was near-silent, and audio enhancements gated sustained sounds like chirping after about a second.&lt;/li&gt;
&lt;li&gt;Some device paths returned garbage values in the billions, so I added level checks.&lt;/li&gt;
&lt;li&gt;Storage: 60 s of WAV is about 5 MB, so chunks with no detections are deleted automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;A bird logger hears everything around you, including conversations on the trail. Because BirdNET's weights are public, inference runs entirely on my own machine:&lt;br&gt;
no audio leaves the device, nothing needs a signal on a hillside, and there are no per-request fees for hours of recording. I could also read the pipeline and tune it (confidence threshold, chunk length, and later location and week filters) instead of waiting for an API to expose those options. A closed cloud API would have meant uploading hours of ambient audio. One caveat: BirdNET's model is licensed CC BY-NC-SA, so this is a non-commercial project.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
