Files
boc/quixzoom-capture-pipeline/README-ARCHITECTURE.md
T
Bernt bae705aa97 ARCHITECTURE: NFC roadmap, edge AI, audit logging
- Add NFC ePassport roadmap (ICAO 9303, eIDAS)
- Add TensorFlow.js edge face detection (BlazeFace)
- Add structured audit logger (GDPR-compliant)
- Risk scoring support

Part of KYC Apple Native UX v1.1.0
2026-06-29 16:24:48 +00:00

12 KiB

QUIXZOOM Arkitektur — Komplett System

Utvecklingsordning (Eriks prioritering)

1. Object Identity Engine     (deduplicering och objektmatchning)
2. Persistenslager            (PostgreSQL + PostGIS + Neo4j)
3. Observation Engine
4. Evidence Engine
5. Temporal Engine
6. Mission Generator
7. Adaptive AI
8. Developer Visualization
9. GraphQL API

Komponenter

1. Object Identity Engine

Fil: identity-engine/identity.js

Funktion: Avgör om två observationer avser samma fysiska objekt.

Signaler:

  • GPS (med accuracy)
  • Kameravinkel (kompass, pitch, roll)
  • 3D-position
  • Visuell signatur (perceptual hash)
  • Storlek
  • Närliggande objekt (spatial context)
  • Historik
  • Sannolikhetsmodell

Exempel:

const result = await engine.matchObservation(observation);
// Result: MATCHED (confidence: 94.2%)
// Breakdown: { gps: 0.98, visual: 0.85, angle: 0.72, ... }

2. Persistenslager

PostgreSQL + PostGIS

Fil: persistence/postgres-schema.sql

Tabeller:

  • zoomers — Zoomer-profiler
  • areas — Områden med spatiala bounds
  • observations — Observationer med GPS
  • objects — Urban objects
  • evidence — Bevis
  • temporal_records — Historik
  • missions — Uppdrag
  • sensor_logs — Sensor-data
  • events — Event sourcing

Spatiala index:

CREATE INDEX idx_observations_location ON observations USING GIST(location);
CREATE INDEX idx_objects_location ON objects USING GIST(location);

Neo4j

Fil: persistence/neo4j-schema.cypher

Noder: Object, Observation, Evidence, Area, Zoomer, Mission

Relationer:

(:Object)-[:OBSERVED_IN]->(:Observation)
(:Object)-[:SUPPORTED_BY]->(:Evidence)
(:Object)-[:NEAR {distance: 5}]->(:Object)
(:Object)-[:PART_OF]->(:Object)
(:Object)-[:REPLACED_BY]->(:Object)

Event Store

Fil: persistence/event-store.js

Event-flöde:

ObservationCreated
  ↓
ObservationValidated
  ↓
EvidenceAdded
  ↓
ObjectUpdated
  ↓
MissionGenerated
  ↓
LearningQueueUpdated

Fördelar:

  • Hela stadens historik kan spelas upp igen
  • Algoritmer kan förbättras retroaktivt
  • Full audit trail

3. Observation Engine

Fil: urban-knowledge-graph/ukg.js

Tre lager:

  1. Observation Layer — Strukturerade observationer (inte bilder)
  2. Evidence Layer — Ett objekt, hundra bevis
  3. Temporal Layer — Förändring över tid

Exempel:

const observation = {
  id: 'obs_482917',
  object: {
    type: 'street_lamp',
    attributes: {
      material: 'steel',
      height: 7.8,
      paint: 'grey',
      rust: true,
      lean: 4,
      light: 'broken'
    }
  },
  location: { lat: 13.725, lng: 100.555 },
  confidence: 0.94,
  verified: false
};

4. Evidence Engine

Fil: urban-knowledge-graph/ukg.js

Samma gatlykta i hundra videor = ETT objekt:

Street Lamp #1293
├── Video A, Frame 342 (Zoomer 001, reliability: 0.85)
├── Video B, Frame 91 (Zoomer 002, reliability: 0.80)
├── QUIXZOOM Capture (Zoomer 003, reliability: 0.90)
├── Inspector Capture (Municipality, reliability: 0.95)
└── Municipality Capture (Official, reliability: 0.98)

5. Temporal Engine

Fil: urban-knowledge-graph/ukg.js

Förändring över tid:

Datum Händelse Ändringar
2026-06-01 Initial observation
2026-08-12 Tilt detected lean: 0° → 2°
2026-09-20 Corrosion increasing rust: no → yes, light: working → flickering
2026-10-11 Light broken light: flickering → broken
2026-11-02 Replaced status: repaired

6. Mission Generator

Fil: fleet-intelligence/coordinator.js

Uppdragstyper:

  • verify — Verifiera osäker observation
  • explore — Utforska kunskapsgap
  • document — Dokumentera specifikt objekt
  • diversify — Filma vid annan tid/vinkel

Exempel:

// Zoomer A dokumenterar Sukhumvit
// Zoomer B verifierar misstänkt skada
// Zoomer C filma nattetid
// Zoomer D annan kameravinkel

7. Adaptive AI

Fil: app/guided-capture.js, app/active-learning.js

Fyra nivåer:

  1. Recording — Basinsamling
  2. Guided — AI ger instruktioner
  3. Mission — Specifika uppgifter
  4. Adaptive — AI planerar nästa observation

Nivå 5 — Fleet Intelligence:

  • Optimerar hela flottan
  • Tilldelar uppdrag baserat på position
  • Balanserar täckning

8. Developer Visualization

Fil: visualization/dev-dashboard.html

Vy:

  • Alla observerade objekt
  • Kunskapsgap
  • Osäkra observationer
  • Väntande verifieringar
  • Aktiva Zoomers
  • AI:s rekommenderade nästa uppdrag

9. GraphQL API (senare)

Planerat:

type Object {
  id: ID!
  type: String!
  location: GeoPoint!
  attributes: JSON
  observations: [Observation!]!
  evidence: [Evidence!]!
  temporal: [TemporalRecord!]!
  relations: [Relation!]!
}

query {
  objects(area: "bangkok", type: "street_lamp") {
    id
    location
    confidence
    verificationStatus
  }
}

Dataflöde

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   iOS App   │────▶│  WebSocket  │────▶│   Backend   │
│  (Capture)  │     │   Server    │     │  (Node.js)  │
└─────────────┘     └─────────────┘     └──────┬──────┘
                                               │
                    ┌──────────────────────────┘
                    │
                    ▼
┌─────────────────────────────────────────────────────────┐
│              URBAN KNOWLEDGE GRAPH                       │
├─────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │
│  │ Observation │  │  Evidence   │  │  Temporal   │     │
│  │   Layer     │  │   Layer     │  │   Layer     │     │
│  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘     │
│         │                │                │             │
│         └────────────────┼────────────────┘             │
│                          │                              │
│                    ┌─────┴─────┐                        │
│                    │  Object   │                        │
│                    │  Entity   │                        │
│                    └─────┬─────┘                        │
│                          │                              │
│         ┌────────────────┼────────────────┐             │
│         ▼                ▼                ▼             │
│    ┌─────────┐     ┌─────────┐     ┌─────────┐        │
│    │PostgreSQL│     │  Neo4j  │     │  Event  │        │
│    │+PostGIS │     │ (Graph) │     │  Store  │        │
│    └─────────┘     └─────────┘     └─────────┘        │
└─────────────────────────────────────────────────────────┘
                          │
                          ▼
┌─────────────────────────────────────────────────────────┐
│                    AI & ANALYTICS                        │
├─────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │
│  │   Object    │  │   Active    │  │   Fleet     │     │
│  │  Identity   │  │  Learning   │  │Coordinator │     │
│  │   Engine    │  │             │  │             │     │
│  └─────────────┘  └─────────────┘  └─────────────┘     │
└─────────────────────────────────────────────────────────┘
                          │
                          ▼
┌─────────────────────────────────────────────────────────┐
│                    VISUALISERING                         │
├─────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │
│  │   Dev       │  │   Admin     │  │   GraphQL   │     │
│  │ Dashboard   │  │   Panel     │  │    API      │     │
│  └─────────────┘  └─────────────┘  └─────────────┘     │
└─────────────────────────────────────────────────────────┘

Filstruktur

quixzoom-capture-pipeline/
├── identity-engine/
│   └── identity.js              # Object Identity Engine
├── persistence/
│   ├── event-store.js           # Event Sourcing
│   ├── postgres-schema.sql      # PostgreSQL + PostGIS
│   └── neo4j-schema.cypher      # Neo4j Graph
├── urban-knowledge-graph/
│   ├── ukg.js                   # Urban Knowledge Graph
│   └── README-UKG.md
├── fleet-intelligence/
│   └── coordinator.js           # Fleet Coordinator
├── value-score/
│   └── calculator.js            # Data Value Score
├── app/
│   ├── guided-capture.js        # 4-nivå insamling
│   └── active-learning.js       # Information gain
├── websocket/
│   └── server.js                # WebSocket Server
├── ios/
│   └── QuixZoomCapture/         # iOS App (Swift)
├── visualization/
│   └── dev-dashboard.html       # Developer Dashboard
└── README-ARCHITECTURE.md       # Denna fil

Nästa steg

  1. Deploya PostgreSQL + PostGIS
  2. Deploya Neo4j
  3. Integrera Object Identity Engine med UKG
  4. Bygg backend-API
  5. Testa med riktig data från Bangkok

LandveX Inc. — Urban Knowledge Graph: Den verkliga hjärnan i QUIXZOOM.