Skip to content

DeluxeRaph/SeaWatch

Repository files navigation

SeaWatch

Mesh-networked smart buoys that detect and classify vessels using computer vision and relay sightings over LoRa — no AIS, no internet, no cooperation from the target.

Built at the Albacore Maritime Defense Hackathon | March 27-29, 2026 | Philadelphia


The Problem

Maritime domain awareness depends on AIS — a system vessels can simply turn off. Dark ships running without AIS are invisible, enabling smuggling, sanctions evasion, illegal fishing, and hostile operations. In 2025, maritime cyber incidents jumped 103% and 24,000+ vessels were affected by GPS manipulation.

The Solution

Drop a string of SeaWatch buoys across a chokepoint, harbor approach, or contested waterway. Each buoy:

  1. Sees — Raspberry Pi 5 + camera runs YOLOv8 vessel detection and classification, with optional SAHI sliced inference for small and distant targets
  2. Locates — Dual GPS receivers provide position and anti-spoofing cross-checks
  3. Reports — Meshtastic LoRa relays detections, heartbeats, alerts, and direct paired-node messages with no cellular or internet
  4. Self-heals — Mesh auto-routes around failed/jammed nodes, buoys self-assign network roles

Cost per buoy: ~$150. Coverage per chain: ~30 km. No infrastructure required.

Architecture

  [Camera + Pi 5]──USB──[ThinkNode M1 LoRa+GPS]
         │                        │
         │ CV Detection           │ 915MHz LoRa
         │                        │
         ▼                  ══LoRa Mesh══
   {"vessel_class"        │    │    │
   :"container_ship",     Buoy  Buoy  Relay
   "confidence":0.87}        │    │    │
                          ══LoRa Mesh══
                                 │
                          [Base Station]
                          [Live Dashboard]

Key Features

  • 10-class vessel detection — YOLOv8/SAHI classifies: container ship, bulk carrier, tanker, cruise ship, ferry, warship, fishing boat, sailboat, small boat, tug boat
  • Dark ship alerting — Cross-reference CV detections with AIS; flag vessels cameras see but AIS doesn't
  • Anti-tamper detection — Buoy silence patterns reveal intrusion paths; GPS drift detection; noise floor monitoring
  • Self-configuring mesh — Buoys auto-assign ROUTER/CLIENT roles as the network grows
  • Dual GPS anti-spoofing — Two independent GPS receivers per buoy; divergence = spoofing alert
  • Direct ThinkNode payloads — Compact JSON payloads can be sent as direct Meshtastic messages to a paired node
  • Ping / pong link checks — Direct-message ping/pong helpers support paired-node health checks

Hardware (Per Buoy)

Component Purpose Cost
Raspberry Pi 5 (8GB) Edge CV inference $80
Arducam IMX477 + 16mm lens Long-range camera (~1-2km detection) $48
ELECROW ThinkNode M1 LoRa mesh + GPS (Meshtastic) $35
VK-162 USB GPS Redundant GPS (anti-spoof) $12

Quick Start

git clone https://github.com/DeluxeRaph/gpsstopper.git
cd gpsstopper
pip install -e ".[dev]"

# Fastest full demo
seawatch simulate

# Dashboard only (base station mode)
seawatch dashboard --serial-port /dev/ttyACM0

# Full buoy mode (camera + detection + mesh + heartbeats)
seawatch run --buoy-id BUOY-01 --serial-port /dev/ttyACM0 --sahi

Open the dashboard at http://localhost:5000 when running the simulator locally.

Current Runtime

  • seawatch run — Full buoy runtime
  • seawatch dashboard — Base-station dashboard + optional mesh receiver
  • seawatch simulatedemo, random, and interactive modes

Detection Output

Each YOLO/SAHI detection currently carries:

  • vessel_class
  • confidence
  • bbox
  • bbox_area_pct
  • bearing_estimate
  • timestamp

The detection taxonomy is:

  • container_ship
  • bulk_carrier
  • tanker
  • cruise_ship
  • ferry
  • warship
  • fishing_boat
  • sailboat
  • small_boat
  • tug_boat

Mesh Reporting

SeaWatch currently supports two reporting shapes:

  1. SeaWatch mesh protocol
    • DET, HB, ROLE, and ALERT pipe-delimited messages for the SeaWatch mesh/dashboard path
  2. ThinkNode direct payload
    • Compact JSON for paired-node direct messages

Example direct payload:

{"buoy_id":"BUOY-01","ts":1711645221,"lat":39.88,"lon":-75.1,"vessel_class":"container_ship","confidence":0.92,"range_band":"close"}

The direct payload intentionally uses a coarse range_band (close / far) instead of pretending to know exact range in meters from a single bounding box.

Direct Node Messaging

The ThinkNode path supports direct Meshtastic messages to a specific peer node, not just channel broadcast.

That currently includes:

  • direct JSON detection payload sending
  • direct ping / pong helpers

The ping listener accepts PING, Ping, or ping, and replies with:

PONG|<timestamp>

Docs

  • PLAN.md — Full project plan, workstreams, and step-by-step implementation guide
  • SYSTEM_SPEC.md — Current code-derived system spec
  • ROLES.md — Team roles, tech stack, and how to contribute
  • TASKS.md — Granular task board, cloud dev setup, sprint schedule
  • BOM.md — Bill of materials — what we have, what's ordered, what we still need
  • docs/ — Setup guides and reference

Team

Built at the Albacore Maritime Defense Hackathon, 23rd St Armory, Philadelphia

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors