- 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
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-profilerareas— Områden med spatiala boundsobservations— Observationer med GPSobjects— Urban objectsevidence— Bevistemporal_records— Historikmissions— Uppdragsensor_logs— Sensor-dataevents— 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:
- Observation Layer — Strukturerade observationer (inte bilder)
- Evidence Layer — Ett objekt, hundra bevis
- 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 observationexplore— Utforska kunskapsgapdocument— Dokumentera specifikt objektdiversify— 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:
- Recording — Basinsamling
- Guided — AI ger instruktioner
- Mission — Specifika uppgifter
- 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
- Deploya PostgreSQL + PostGIS
- Deploya Neo4j
- Integrera Object Identity Engine med UKG
- Bygg backend-API
- Testa med riktig data från Bangkok
LandveX Inc. — Urban Knowledge Graph: Den verkliga hjärnan i QUIXZOOM.