Skip to content

TRAMES 1.0.0 — ALPR-avoiding navigation

Choose a tag to compare

@KaraZajac KaraZajac released this 25 Jul 21:08

Navigation that routes around automated licence-plate readers.

TRAMES takes an ordinary navigation request — an address, a route — and adds one
constraint: prefer paths that no ALPR camera can actually see. Cameras are modelled as
directional wedges, not circles. A reader watching northbound traffic says nothing
about the southbound carriageway, and treating it as a circle makes the router detour
around roads nobody is being read on.

Install

TRAMES-1.0.0-arm64-v8a.apk — 209 MB, Android 7.0+, arm64-v8a only

Verify before installing:

sha256  c586dce9b5dfe566419187cb0833856badb8bb8b0848826a06c038e389d1c0cc

Package org.soulstone.trames — installs alongside OsmAnd rather than replacing it.

⚠️ Read this before you trust the build

This APK is signed with the public Android debug key (CN=Android Debug, the
well-known keystores/debug.keystore, password android).

That key is not secret. Anyone can build a modified APK signed with the identical key,
and Android will accept it as an update to this app. The signature proves nothing about
who built it.

For a tool whose users are specifically trying to avoid being tracked, that is a real
weakness and not a formality. Until a proper release key exists:

  • Verify the SHA-256 above against a build you make yourself, or
  • Build from source: ./setup-resources.sh && cd client && ./trames-build.sh

A properly signed release is the obvious next step and is not done yet.

What works

  • Address search and turn-by-turn navigation (inherited from OsmAnd)
  • ALPR-avoiding route calculation against the public backend
  • Camera map layer, rendered through the GL renderer so markers hold position in 3D
  • Berth selector for avoidance strength
  • Route exposure readout — how many cameras a given route crosses

Routing is served by https://routing.blackflagintel.com, which is live and has the
camera geometry loaded. v1 is online-only; offline ALPR avoidance is planned for v2.

Known limitations

  • The berth slider does not behave consistently between regions. Its usable range is
    roughly 0.3 → 0.01 and the dead zone is density-dependent: a setting that does nothing
    in a sparse area avoids most cameras in a dense one. A density-adaptive mapping is an
    open problem, documented in §7.4 of the paper.
  • arm64-v8a only. No armeabi-v7a or x86_64 build in this release.
  • Camera data is crowdsourced and incomplete in ways that are not random. Absence of
    a camera on the map is not evidence of absence on the pole.
  • The app carries OsmAnd's artwork, which is CC-BY-NC-ND 4.0 and cannot be modified in a
    derivative. Replacing it is outstanding work.

The study

The routing behaviour is backed by a measurement study included in this repository:
17,580 real home–work commutes drawn from Census LEHD LODES across 15 states, each routed
twice against 120,838 mapped camera installations.

  • 74.8% of American commutes pass at least one licence-plate reader
  • 84.6% can be routed to zero exposure, for a median of 1.50 minutes (5.96% overhead)
  • Avoidance is cheapest where cameras are densest — grids offer a parallel street, rural
    routes often do not
  • Demographic gradients that look robust nationally do not survive ranking tracts within
    their own county; mapped camera density varies 3.9× per capita across the states studied

Paper: research/paper/trames.pdf

Two results in it qualify the headline, and are stated there rather than buried: the
avoidance figure degrades to 56.5% if real camera fields of view are 50% wider than the
60 m assumed (§7.3), and the equity findings cannot be separated from variation in who
maps cameras (§5.5, §7.2).

Licensing

client/ derives from OsmAnd and is GPLv3.
Camera data is from OpenStreetMap (ODbL) via Overpass, the corpus surfaced by
DeFlock.