bae705aa97
- 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
126 lines
2.7 KiB
Swift
126 lines
2.7 KiB
Swift
import Foundation
|
|
import CoreLocation
|
|
import CoreMotion
|
|
|
|
/**
|
|
* QUIXZOOM Capture Session
|
|
*
|
|
* Representerar en inspelningssession med all metadata.
|
|
* Varje session får ett unikt uppdrags-ID.
|
|
*/
|
|
struct CaptureSession: Codable, Identifiable {
|
|
let id: String
|
|
let missionId: String
|
|
let startTime: Date
|
|
var endTime: Date?
|
|
var mode: CaptureMode
|
|
var status: SessionStatus
|
|
|
|
// Konfiguration
|
|
var config: SessionConfig
|
|
|
|
// Insamlad data
|
|
var frames: [FrameMetadata]
|
|
var telemetry: [TelemetryData]
|
|
var path: [GPSPoint]
|
|
var instructions: [AIInstruction]
|
|
|
|
// Kvalitet
|
|
var qualityScore: Double
|
|
var reliabilityScore: Double
|
|
|
|
enum CaptureMode: String, Codable {
|
|
case recording // Nivå 1: Basinsamling
|
|
case guided // Nivå 2: AI-guidad
|
|
case mission // Nivå 3: Uppdragsbaserad
|
|
case adaptive // Nivå 4: Adaptiv intelligens
|
|
}
|
|
|
|
enum SessionStatus: String, Codable {
|
|
case preparing
|
|
case recording
|
|
case paused
|
|
case uploading
|
|
case completed
|
|
case failed
|
|
}
|
|
}
|
|
|
|
struct SessionConfig: Codable {
|
|
var videoQuality: VideoQuality
|
|
var telemetryRate: Double // Hz
|
|
var uploadMode: UploadMode
|
|
var missionType: String? // "crosswalks", "streetlights", etc.
|
|
var area: AreaConfig?
|
|
|
|
enum VideoQuality: String, Codable {
|
|
case p720 = "720p"
|
|
case p1080 = "1080p"
|
|
case p4K = "4K"
|
|
}
|
|
|
|
enum UploadMode: String, Codable {
|
|
case realtime // Direktuppladdning
|
|
case buffered // Buffra lokalt, ladda upp vid wifi
|
|
case manual // Manuell uppladdning
|
|
}
|
|
}
|
|
|
|
struct AreaConfig: Codable {
|
|
var name: String
|
|
var bounds: GeoBounds
|
|
var targetObjects: [String]?
|
|
}
|
|
|
|
struct GeoBounds: Codable {
|
|
var minLat: Double
|
|
var maxLat: Double
|
|
var minLng: Double
|
|
var maxLng: Double
|
|
}
|
|
|
|
struct FrameMetadata: Codable {
|
|
let timestamp: Date
|
|
let frameId: String
|
|
let gps: GPSPoint
|
|
let quality: Double
|
|
let fileSize: Int
|
|
}
|
|
|
|
struct TelemetryData: Codable {
|
|
let timestamp: Date
|
|
let gps: GPSPoint
|
|
let imu: IMUData
|
|
let compass: Double
|
|
let altitude: Double
|
|
}
|
|
|
|
struct GPSPoint: Codable {
|
|
let latitude: Double
|
|
let longitude: Double
|
|
let accuracy: Double
|
|
let altitude: Double
|
|
let timestamp: Date
|
|
}
|
|
|
|
struct IMUData: Codable {
|
|
let accelerometer: XYZ
|
|
let gyroscope: XYZ
|
|
let magnetometer: XYZ?
|
|
}
|
|
|
|
struct XYZ: Codable {
|
|
let x: Double
|
|
let y: Double
|
|
let z: Double
|
|
}
|
|
|
|
struct AIInstruction: Codable {
|
|
let timestamp: Date
|
|
let text: String
|
|
let priority: String
|
|
let reason: String
|
|
var completed: Bool
|
|
var completedAt: Date?
|
|
}
|