<?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: Joy Mbiya</title>
    <description>The latest articles on DEV Community by Joy Mbiya (@joy_mbiya_8dcbb609c498134).</description>
    <link>https://dev.to/joy_mbiya_8dcbb609c498134</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%2F4172828%2F5afb6ae5-a07f-42ca-b623-c470a64e601c.png</url>
      <title>DEV Community: Joy Mbiya</title>
      <link>https://dev.to/joy_mbiya_8dcbb609c498134</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joy_mbiya_8dcbb609c498134"/>
    <language>en</language>
    <item>
      <title>CanopyOS: Open-Weight Vision for Outdoor Urban Greening Observations</title>
      <dc:creator>Joy Mbiya</dc:creator>
      <pubDate>Sun, 11 Oct 2026 15:35:44 +0000</pubDate>
      <link>https://dev.to/joy_mbiya_8dcbb609c498134/canopyos-open-weight-vision-for-outdoor-urban-greening-observations-8j8</link>
      <guid>https://dev.to/joy_mbiya_8dcbb609c498134/canopyos-open-weight-vision-for-outdoor-urban-greening-observations-8j8</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;
  
  
  Abstract
&lt;/h2&gt;

&lt;p&gt;Urban greening starts with observing real places, yet a photograph can be difficult to discuss systematically. We built &lt;strong&gt;CanopyOS&lt;/strong&gt;, a mobile-first, open-source prototype that turns an outdoor photograph into an inspectable field note. A locally run, open-weight semantic-segmentation model marks vegetation, hard surfaces, buildings, and open ground. Deterministic code then computes image-pixel indicators and an exploratory Green Score, while a bounded decision layer suggests an intervention to investigate on site. Two openly licensed photographs demonstrate the complete workflow. The results establish that the software can produce traceable reports; they do &lt;strong&gt;not&lt;/strong&gt; validate environmental impact, planting feasibility, or model accuracy across real-world sites.&lt;/p&gt;

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

&lt;p&gt;CanopyOS is for residents, student groups, and community teams who want a quick starting point for discussing the greenery around them. The intended interaction begins &lt;strong&gt;outside&lt;/strong&gt;: take a photograph of a street, courtyard, or park; inspect the segmentation; and decide what deserves a closer site visit. The report makes the image's visible surfaces easier to discuss without claiming that a photograph replaces field measurements.&lt;/p&gt;

&lt;p&gt;The application offers camera capture with gallery upload as a backup, an original-image/segmentation comparison, pixel-based indicators, a cautious recommendation, and a private recent-scan history. Users can delete scans and their stored images. The interface is in English and is designed for both phones and desktops.&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%2F4hu4501l3cmo8cmvuc1f.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%2F4hu4501l3cmo8cmvuc1f.png" alt="CanopyOS capture screen with an outdoor photograph" width="390" height="844"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 1. The capture flow. This screenshot uses a credited archival photograph of the National Museum of Lubumbashi; it does not document a current field visit.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It: Research Question and Method
&lt;/h2&gt;

&lt;p&gt;The practical question was: &lt;strong&gt;Can an open-weight vision model support a transparent first-pass observation of an outdoor scene while making the limits of that observation visible?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CanopyOS runs the pinned &lt;a href="https://huggingface.co/nvidia/segformer-b0-finetuned-ade-512-512" rel="noopener noreferrer"&gt;&lt;code&gt;nvidia/segformer-b0-finetuned-ade-512-512&lt;/code&gt;&lt;/a&gt; model locally after its weights are downloaded. Its ADE20K labels are mapped into four reporting groups: vegetation (including trees and grass), hard surfaces (roads and sidewalks), buildings, and open ground. Sky, people, vehicles, and other classes are excluded from the denominator. The report separately shows &lt;strong&gt;classified coverage&lt;/strong&gt;, the fraction of the whole image represented by those four groups.&lt;/p&gt;

&lt;p&gt;For classified image pixels, the exploratory score is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Green Score = round(100 × (0.60 × vegetation_fraction
                         + 0.25 × open_ground_fraction
                         + 0.15 × tree_presence))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;tree_presence&lt;/code&gt; is binary, based on the model's tree or palm pixels; it is not a count of trees or a measure of shade. The formula is a disclosed heuristic, not a calibrated environmental index. A finite decision layer chooses from permitted actions. In the demonstrated default configuration, it uses explicitly labelled deterministic rules. Optional Jev and Gemma integrations exist, but neither was active in the examples below. The application labels its template explanation when Gemma is unavailable; it never presents that text as a live model response.&lt;/p&gt;

&lt;p&gt;The implementation uses Python, FastAPI, PyTorch, HTMX, Tailwind CSS, and SQLite. Uploaded images are re-encoded without EXIF metadata, and scan assets require ownership checks. The current design runs one inference job at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results: Two Reproducible Demonstrations
&lt;/h2&gt;

&lt;p&gt;We ran the application with two openly licensed outdoor photographs. These are &lt;strong&gt;functional case studies&lt;/strong&gt;, not a statistical evaluation or a field survey.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Demonstration image&lt;/th&gt;
&lt;th&gt;Classified coverage&lt;/th&gt;
&lt;th&gt;Exploratory Green Score&lt;/th&gt;
&lt;th&gt;Reported outcome&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;National Museum of Lubumbashi&lt;/td&gt;
&lt;td&gt;44.7%&lt;/td&gt;
&lt;td&gt;31/100&lt;/td&gt;
&lt;td&gt;Investigate a green wall after a site survey&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cupertino public park&lt;/td&gt;
&lt;td&gt;Report available in the gallery&lt;/td&gt;
&lt;td&gt;68/100&lt;/td&gt;
&lt;td&gt;Preserve existing greenery&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For the museum photograph, 26.0% of the &lt;strong&gt;classified pixels&lt;/strong&gt; were vegetation and 72.8% were buildings. These percentages describe the image, not the site's land area or present condition. The photograph was taken in 2007. The park photograph was taken in 2015. Both were processed by the real segmentation pipeline; the decision and explanation fallbacks are visible in the reports.&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%2Fqlmo8vl9gwgnb9s7vvp2.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%2Fqlmo8vl9gwgnb9s7vvp2.png" alt="CanopyOS report showing the museum photograph, segmentation overlay, indicators, and recommendation" width="800" height="1242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 2. Actual application report for the museum demonstration image. Image credit: &lt;a href="https://commons.wikimedia.org/wiki/File:Lubumbashi_Museum.jpg" rel="noopener noreferrer"&gt;Mike Rosenberg, CC BY 2.0&lt;/a&gt;; the photograph was resized and re-encoded for this demonstration.&lt;/em&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%2F9b6nyn47bmk6fduff4ur.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%2F9b6nyn47bmk6fduff4ur.png" alt="CanopyOS report for a tree-filled public park" width="800" height="1242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 3. Actual application report for the park demonstration image. Image credit: &lt;a href="https://commons.wikimedia.org/wiki/File:Trees_along_walkway_in_public_park_in_Cupertino,_California.JPG" rel="noopener noreferrer"&gt;Tomwsulcer, CC0&lt;/a&gt;; the photograph was resized and re-encoded for this demonstration.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The software validation record reports 30 passing Python unit/API tests and 12 passing Playwright desktop/mobile tests. Those browser tests use a named vision test double; the two case studies above use the real model. This distinction matters: passing software tests does not establish semantic-segmentation accuracy or good urban-planning advice.&lt;/p&gt;

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

&lt;p&gt;The &lt;a href="https://github.com/joeylukoji/CanopyOS/blob/main/docs/demo-gallery.md" rel="noopener noreferrer"&gt;desktop and mobile product gallery&lt;/a&gt; shows capture, both reports, and private history. The repository includes the two licensed demonstration images and &lt;a href="https://github.com/joeylukoji/CanopyOS#run-locally-windows-powershell" rel="noopener noreferrer"&gt;local setup instructions&lt;/a&gt;, so the workflow can be repeated. The first scan requires downloading model weights; later inference runs locally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A short video of the working upload-to-report flow or a verified public deployment must be added here before this article is submitted to the challenge.&lt;/strong&gt; The challenge requires a demo in one of those forms; the screenshot gallery alone is supporting evidence.&lt;/p&gt;

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

&lt;p&gt;Source code, setup instructions, architecture, validation notes, and the MIT license: &lt;strong&gt;&lt;a href="https://github.com/joeylukoji/CanopyOS" rel="noopener noreferrer"&gt;github.com/joeylukoji/CanopyOS&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open Innovation Matters
&lt;/h2&gt;

&lt;p&gt;The core image analysis runs with inspectable model weights rather than a proprietary vision endpoint. That lets a community group reproduce the same pipeline, examine the category mapping and score formula, and adapt them to local needs. Inference can run on a local computer after the initial weight download; the demonstrated path does not require sending photographs to a hosted AI provider. The optional hosted decision and explanation services are separated from this core and their absence is visible to the user.&lt;/p&gt;

&lt;p&gt;This openness is especially useful for a citizen-science tool: the output should invite scrutiny. Someone can challenge a mislabeled sidewalk, inspect the overlay, or change a heuristic rather than accept an unexplained green number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations and Next Study
&lt;/h2&gt;

&lt;p&gt;A single camera view misses depth, seasonality, ownership, soil conditions, access, and maintenance constraints. Pixel proportions are not measured surface area. Open ground is not automatically plantable, and tree presence is not shade. No temperature, carbon, biodiversity, or energy benefit has been measured. The two archival images do not represent current conditions in Lubumbashi or Cupertino.&lt;/p&gt;

&lt;p&gt;The next evaluation is to photograph multiple &lt;strong&gt;current outdoor locations with permission&lt;/strong&gt;, manually review their masks and recommendations, and record failure cases. A physical-phone camera test over HTTPS, live optional-provider tests, and public-host performance checks also remain pending. Until then, CanopyOS should be treated as a reproducible observation prototype and a prompt for real-world investigation, not an environmental assessment instrument.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/joeylukoji/CanopyOS/blob/main/docs/validation.md" rel="noopener noreferrer"&gt;CanopyOS source code and validation record&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://huggingface.co/nvidia/segformer-b0-finetuned-ade-512-512" rel="noopener noreferrer"&gt;SegFormer B0 ADE20K model card&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/joeylukoji/CanopyOS/blob/main/docs/demo-gallery.md" rel="noopener noreferrer"&gt;Demonstration gallery and photograph credits&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

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