drone-camera 0.0.0-stage → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +157 -2
  3. package/index.d.ts +51 -0
  4. package/index.d.ts.map +1 -0
  5. package/index.js +20474 -0
  6. package/index.js.map +1 -0
  7. package/index.umd.cjs +1361 -0
  8. package/index.umd.cjs.map +1 -0
  9. package/lib/drone-capture-manifest.d.ts +169 -0
  10. package/lib/drone-capture-manifest.d.ts.map +1 -0
  11. package/lib/drone-capture-panel.d.ts +135 -0
  12. package/lib/drone-capture-panel.d.ts.map +1 -0
  13. package/lib/drone-capture.d.ts +380 -0
  14. package/lib/drone-capture.d.ts.map +1 -0
  15. package/lib/drone-cesium-mission.d.ts +120 -0
  16. package/lib/drone-cesium-mission.d.ts.map +1 -0
  17. package/lib/drone-cesium-rig.d.ts +50 -0
  18. package/lib/drone-cesium-rig.d.ts.map +1 -0
  19. package/lib/drone-cesium.d.ts +519 -0
  20. package/lib/drone-cesium.d.ts.map +1 -0
  21. package/lib/drone-control.d.ts +188 -0
  22. package/lib/drone-control.d.ts.map +1 -0
  23. package/lib/drone-engine.d.ts +70 -0
  24. package/lib/drone-engine.d.ts.map +1 -0
  25. package/lib/drone-exif.d.ts +64 -0
  26. package/lib/drone-exif.d.ts.map +1 -0
  27. package/lib/drone-fly.d.ts +545 -0
  28. package/lib/drone-fly.d.ts.map +1 -0
  29. package/lib/drone-gallery.d.ts +146 -0
  30. package/lib/drone-gallery.d.ts.map +1 -0
  31. package/lib/drone-husky-model.d.ts +22 -0
  32. package/lib/drone-husky-model.d.ts.map +1 -0
  33. package/lib/drone-image-utils.d.ts +67 -0
  34. package/lib/drone-image-utils.d.ts.map +1 -0
  35. package/lib/drone-image-viewer.d.ts +97 -0
  36. package/lib/drone-image-viewer.d.ts.map +1 -0
  37. package/lib/drone-lights.d.ts +194 -0
  38. package/lib/drone-lights.d.ts.map +1 -0
  39. package/lib/drone-minimap.d.ts +155 -0
  40. package/lib/drone-minimap.d.ts.map +1 -0
  41. package/lib/drone-panel.d.ts +265 -0
  42. package/lib/drone-panel.d.ts.map +1 -0
  43. package/lib/drone-panorama-viewer.d.ts +162 -0
  44. package/lib/drone-panorama-viewer.d.ts.map +1 -0
  45. package/lib/drone-panorama.d.ts +242 -0
  46. package/lib/drone-panorama.d.ts.map +1 -0
  47. package/lib/drone-photogrammetry.d.ts +207 -0
  48. package/lib/drone-photogrammetry.d.ts.map +1 -0
  49. package/lib/drone-radar.d.ts +136 -0
  50. package/lib/drone-radar.d.ts.map +1 -0
  51. package/lib/drone-reconstruction-preview.d.ts +84 -0
  52. package/lib/drone-reconstruction-preview.d.ts.map +1 -0
  53. package/lib/drone-rig.d.ts +385 -0
  54. package/lib/drone-rig.d.ts.map +1 -0
  55. package/lib/drone-sim.d.ts +883 -0
  56. package/lib/drone-sim.d.ts.map +1 -0
  57. package/lib/drone-stitch.d.ts +84 -0
  58. package/lib/drone-stitch.d.ts.map +1 -0
  59. package/lib/drone-world.d.ts +194 -0
  60. package/lib/drone-world.d.ts.map +1 -0
  61. package/lib/mission-editor.d.ts +116 -0
  62. package/lib/mission-editor.d.ts.map +1 -0
  63. package/lib/mission-panel.d.ts +173 -0
  64. package/lib/mission-panel.d.ts.map +1 -0
  65. package/package.json +61 -4
@@ -0,0 +1,169 @@
1
+ /**
2
+ * CaptureManifest and quality checks for the virtual photogrammetry PoC.
3
+ *
4
+ * The capture service deliberately keeps its browser facing session model
5
+ * (`CaptureSession`) small. This module is the boundary to an offline
6
+ * reconstruction tool: it turns a session into a stable, JSON serialisable
7
+ * manifest and validates the fields that COLMAP (or another tool) needs.
8
+ */
9
+ import type { CaptureSession, CoordinateFrame } from './drone-capture';
10
+ export declare const CAPTURE_MANIFEST_SCHEMA_VERSION: 1;
11
+ export type CaptureStatus = 'success' | 'failed' | 'pending';
12
+ export interface CaptureManifestTransform {
13
+ /** Source coordinate frame used by the image poses. */
14
+ source: string;
15
+ /** Target frame expected by the reconstruction/export pipeline. */
16
+ target: string;
17
+ /** Optional translation in target units: target = rotation * (scale * source) + translation. */
18
+ translation?: [number, number, number];
19
+ /** Optional active rotation, in quaternion [x, y, z, w] order. */
20
+ rotation?: [number, number, number, number];
21
+ /** Optional uniform scale from source units to target units. */
22
+ scale?: number;
23
+ /** Origin used when deriving a local ENU frame. */
24
+ origin?: {
25
+ longitude: number;
26
+ latitude: number;
27
+ altitude: number;
28
+ };
29
+ /** Extra transform parameters supplied by an integration. */
30
+ [key: string]: unknown;
31
+ }
32
+ export interface CaptureManifestCoordinateFrame {
33
+ world: string;
34
+ local: string;
35
+ units: 'meters' | string;
36
+ transform: CaptureManifestTransform;
37
+ }
38
+ export interface CaptureManifestCamera {
39
+ /** COLMAP style camera model, for example PINHOLE or OPENCV. */
40
+ model: string;
41
+ width: number;
42
+ height: number;
43
+ fx?: number;
44
+ fy?: number;
45
+ cx?: number;
46
+ cy?: number;
47
+ horizontalFovDeg?: number;
48
+ verticalFovDeg?: number;
49
+ distortion?: number[];
50
+ /** Projection model as used by the rendering backend. */
51
+ projection?: string;
52
+ /** Zoom value if the backend exposes one. */
53
+ zoom?: number;
54
+ }
55
+ export interface CaptureManifestImage {
56
+ id: string;
57
+ /** Path relative to the capture directory. */
58
+ file: string;
59
+ timestamp: string;
60
+ position?: [number, number, number];
61
+ rotation?: [number, number, number, number];
62
+ /** Explicitly states quaternion order and camera axis convention. */
63
+ rotationConvention: string;
64
+ captureStatus: CaptureStatus;
65
+ source?: string;
66
+ mimeType?: string;
67
+ sizeBytes?: number;
68
+ width?: number;
69
+ height?: number;
70
+ coordinateFrame?: CoordinateFrame | string;
71
+ intrinsics?: CaptureManifestCamera;
72
+ cameraModel?: string;
73
+ engine?: string;
74
+ sceneId?: string;
75
+ sceneVersion?: string;
76
+ /** Optional content hashes or quality probes supplied by a storage layer. */
77
+ contentHash?: string;
78
+ quality?: CaptureImageQuality;
79
+ validation?: {
80
+ status: string;
81
+ messages: string[];
82
+ };
83
+ }
84
+ export interface CaptureImageQuality {
85
+ /** Set by a decoder when the image was successfully opened. */
86
+ decodable?: boolean;
87
+ /** True when all sampled pixels have the same (or almost the same) value. */
88
+ uniform?: boolean;
89
+ /** True when the decoded image is effectively black or white. */
90
+ blank?: boolean;
91
+ /** Optional luma statistics from an image decoder. */
92
+ meanLuma?: number;
93
+ variance?: number;
94
+ }
95
+ export interface CaptureManifest {
96
+ schemaVersion: typeof CAPTURE_MANIFEST_SCHEMA_VERSION;
97
+ captureId: string;
98
+ createdAt: string;
99
+ coordinateFrame: CaptureManifestCoordinateFrame;
100
+ camera: CaptureManifestCamera;
101
+ images: CaptureManifestImage[];
102
+ }
103
+ export interface CaptureManifestOptions {
104
+ captureId?: string;
105
+ createdAt?: string;
106
+ coordinateFrame?: Partial<CaptureManifestCoordinateFrame> & {
107
+ transform?: Partial<CaptureManifestTransform>;
108
+ };
109
+ /** Override the default image path prefix (`images/`). */
110
+ imageDirectory?: string;
111
+ /** Explicit camera model when the source does not expose one. */
112
+ cameraModel?: string;
113
+ /** Explicit projection model, for example perspective. */
114
+ projection?: string;
115
+ }
116
+ export type CaptureValidationSeverity = 'error' | 'warning';
117
+ export interface CaptureValidationIssue {
118
+ code: string;
119
+ message: string;
120
+ severity: CaptureValidationSeverity;
121
+ imageId?: string;
122
+ }
123
+ export interface CaptureValidationReport {
124
+ valid: boolean;
125
+ status: 'valid' | 'warning' | 'invalid';
126
+ imageCount: number;
127
+ checkedImages: number;
128
+ errors: CaptureValidationIssue[];
129
+ warnings: CaptureValidationIssue[];
130
+ issues: CaptureValidationIssue[];
131
+ duplicateImageIds: string[][];
132
+ /** Aliases useful to callers that treat the report as a quality gate. */
133
+ passed: boolean;
134
+ }
135
+ export interface CaptureValidatorOptions {
136
+ /** Require every image to contain a finite camera pose (default true). */
137
+ requirePose?: boolean;
138
+ /** Require a usable global camera model (default true). */
139
+ requireIntrinsics?: boolean;
140
+ /** Check optional blank/uniform probes (default true when present). */
141
+ checkBlankImages?: boolean;
142
+ /** Treat duplicate content hashes/poses as errors (default true). */
143
+ rejectDuplicates?: boolean;
144
+ /** Maximum relative difference allowed for numeric camera parameters. */
145
+ intrinsicsTolerance?: number;
146
+ /** Optional additional image quality probes, keyed by id or file. */
147
+ imageQuality?: Record<string, CaptureImageQuality | undefined>;
148
+ }
149
+ /** Build a JSON serialisable manifest from an existing capture session. */
150
+ export declare function buildCaptureManifest(session: CaptureSession, options?: CaptureManifestOptions): CaptureManifest;
151
+ /** Compatibility aliases for callers that prefer a verb based name. */
152
+ export declare const captureSessionToManifest: typeof buildCaptureManifest;
153
+ export declare const createCaptureManifest: typeof buildCaptureManifest;
154
+ export declare function serializeCaptureManifest(manifest: CaptureManifest, space?: number): string;
155
+ export declare function parseCaptureManifest(value: string | CaptureManifest): CaptureManifest;
156
+ /** Validate the manifest before handing it to an offline reconstruction task. */
157
+ export declare function validateCaptureManifest(manifest: CaptureManifest, options?: CaptureValidatorOptions): CaptureValidationReport;
158
+ /** Validate a browser capture session without requiring the caller to build a manifest first. */
159
+ export declare function validateCaptureSession(session: CaptureSession, options?: CaptureValidatorOptions, manifestOptions?: CaptureManifestOptions): CaptureValidationReport;
160
+ /** Object oriented facade for applications that keep validators as services. */
161
+ export declare class CaptureValidator {
162
+ readonly options: CaptureValidatorOptions;
163
+ constructor(options?: CaptureValidatorOptions);
164
+ validate(manifest: CaptureManifest): CaptureValidationReport;
165
+ validate(session: CaptureSession, manifestOptions?: CaptureManifestOptions): CaptureValidationReport;
166
+ static validate(manifest: CaptureManifest, options?: CaptureValidatorOptions): CaptureValidationReport;
167
+ static validate(session: CaptureSession, options?: CaptureValidatorOptions, manifestOptions?: CaptureManifestOptions): CaptureValidationReport;
168
+ }
169
+ //# sourceMappingURL=drone-capture-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drone-capture-manifest.d.ts","sourceRoot":"","sources":["../../src/lib/drone-camera/drone-capture-manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * 影像采集面板(原生 DOM):采集会话 / 虚拟采集 / 真实照片导入 / 导出 —— 只放**动作**。
3
+ *
4
+ * 与 drone-panel / mission-panel / drone-minimap 是同一套范式:只用 DOM + CSS,
5
+ * 不引任何 UI 框架,库整体保持与框架无关(Vue / React / 裸页面通用)。
6
+ *
7
+ * 面板自身不持有采集状态 —— 状态全在 `CaptureService` 里(影像集、会话、自动采集句柄),
8
+ * 面板只是它的一个视图:订阅 `service.subscribe()` 后在**局部**刷新计数,
9
+ * 不整体重绘骨架(否则会打断正在输入的间隔 / 距离框)。
10
+ *
11
+ * 三处刻意的设计:
12
+ * - 面板按会话的 `source` 分别展示「虚拟采集」与「真实导入」两套入口 —— 两类影像的采集动作
13
+ * 本来就不是一回事(一个是快门,一个是文件),混在一起只会让人误操作;
14
+ * - 「自动采集」走的是服务里 200ms 心跳上的时间 / 距离双触发,面板只负责把开关与参数递进去;
15
+ * - **影像的浏览与合成不在这里**。面板只有 300 多像素宽,缩略图 + 统计 + 详情 + 导出全塞进来
16
+ * 既看不清全局又要滚半天。所以「影像集」整体交给 `DroneGallery` 弹窗(按组合分组、
17
+ * 每组一键合成、点缩略图看大图),面板只留一个入口按钮。弹窗住在 `document.body` 上、
18
+ * 不在面板里 —— 面板带 `backdrop-filter`,会改 `fixed` 后代的定位基准。
19
+ */
20
+ import { CaptureService } from './drone-capture';
21
+ import type { CaptureExportFormat, CaptureSession, CaptureSessionOptions, VirtualCaptureProvider } from './drone-capture';
22
+ import type { DroneImageViewerOptions } from './drone-image-viewer';
23
+ import type { DroneGalleryOptions } from './drone-gallery';
24
+ /** 面板停靠位置(与 DroneControlPanel 同一组取值) */
25
+ export type DroneCapturePanelPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
26
+ /** DroneCapturePanel 构造选项 */
27
+ export interface DroneCapturePanelOptions {
28
+ /** 挂载容器;缺省挂到 document.body(此时用 fixed 定位) */
29
+ container?: HTMLElement | null;
30
+ /** 停靠位置,默认 'bottom-left'(three 页左上/右上/底部中央已被别的面板占用) */
31
+ position?: DroneCapturePanelPosition;
32
+ /**
33
+ * 停靠微调(像素)。用 margin 实现,不覆盖 position 的定位规则 ——
34
+ * 演示页里底部左右角已经被 HUD 摇杆占住,面板整体上抬一段就能错开。
35
+ */
36
+ offset?: {
37
+ x?: number;
38
+ y?: number;
39
+ };
40
+ /** 面板标题,默认「影像采集」 */
41
+ title?: string;
42
+ /** 是否注入自带样式,默认 true */
43
+ injectStyles?: boolean;
44
+ /** 初始是否可见,默认 true */
45
+ visible?: boolean;
46
+ /** 已有采集服务(多面板共享一个会话列表时传入);缺省按 host 新建一个 */
47
+ service?: CaptureService;
48
+ /** 挂载时若一个会话都没有,是否自动建一个虚拟采集会话,默认 true */
49
+ autoCreateSession?: boolean;
50
+ /**
51
+ * 新建会话时套用的默认参数(场景标识 / 地理参考原点 / 自动采集间隔)。
52
+ * 宿主知道自己跑在哪个场景里,把这些填上,采到的影像才带得上场景版本与经纬度。
53
+ */
54
+ sessionDefaults?: Partial<CaptureSessionOptions>;
55
+ /** 导出时是否顺手触发浏览器下载,默认 true */
56
+ downloadOnExport?: boolean;
57
+ /**
58
+ * 是否启用大图查看器(影像集弹窗点缩略图时打开),默认 true。
59
+ * 弹窗挂在 `document.body` 上(不是面板内部,原因见 drone-image-viewer 模块头),
60
+ * 层级 / 下载按钮 / 翻页回调等细项走 `viewerOptions`。
61
+ */
62
+ viewer?: boolean;
63
+ /** 弹窗查看器的细项(层级 / 是否提供下载 / 关闭与翻页回调) */
64
+ viewerOptions?: DroneImageViewerOptions;
65
+ /**
66
+ * 是否启用影像集弹窗(面板上的「打开影像集」按钮),默认 true。
67
+ * 影像的浏览 / 分组 / 一键合成都在它里面(见 drone-gallery);`false` 则面板不提供该入口。
68
+ */
69
+ gallery?: boolean;
70
+ /** 影像集弹窗的细项(层级 / 合成器 / 关闭与合成回调) */
71
+ galleryOptions?: DroneGalleryOptions;
72
+ }
73
+ /**
74
+ * 影像采集面板。
75
+ *
76
+ * ```ts
77
+ * const panel = new DroneCapturePanel(fly, { container: viewportEl, position: 'bottom-left' })
78
+ * // 卸载:panel.destroy()
79
+ * ```
80
+ */
81
+ export declare class DroneCapturePanel {
82
+ /** 采集服务(面板的视图数据源;宿主可直接用它编程式采集 / 导出) */
83
+ readonly service: CaptureService;
84
+ private readonly host;
85
+ private readonly root;
86
+ private readonly refs;
87
+ private readonly options;
88
+ /** 大图查看器(影像集弹窗点缩略图时打开);`viewer` / `gallery` 关掉时为 null */
89
+ private viewer;
90
+ /** 影像集弹窗(浏览 / 分组 / 一键合成);`options.gallery === false` 时为 null */
91
+ private gallery;
92
+ private unsubscribe;
93
+ private sessionSignature;
94
+ private noteTimer;
95
+ private destroyed;
96
+ /** 构造采集面板:模式/张数/开始按钮 + 会话相册入口 */
97
+ constructor(host: VirtualCaptureProvider, options?: DroneCapturePanelOptions);
98
+ /** 新建会话参数 = 宿主给的默认值(场景标识 / 地理原点)+ 界面上的来源与名称 */
99
+ private newSessionOptions;
100
+ /** 当前展示的会话 */
101
+ get session(): CaptureSession | null;
102
+ /** 显示 / 隐藏 */
103
+ setVisible(visible: boolean): void;
104
+ /**
105
+ * 打开大图查看器。`imageId` 缺省用当前选中的那张(再缺省 = 最后一张)。
106
+ * 宿主若想在自己的界面上挂个「查看」按钮,调这里即可 —— 与点缩略图是同一条路径。
107
+ */
108
+ openViewer(imageId?: string): void;
109
+ /** 关闭大图查看器(没打开时是空操作) */
110
+ closeViewer(): void;
111
+ /** 打开影像集弹窗(浏览 / 分组 / 一键合成);`gallery: false` 时是空操作 */
112
+ openGallery(sessionId?: string): void;
113
+ /** 关闭影像集弹窗(连同它里面的大图查看器) */
114
+ closeGallery(): void;
115
+ /** 手动同步一次(宿主改了服务状态后可主动调用) */
116
+ sync(): void;
117
+ /**
118
+ * 面板底部的一行提示(参数不合法、导入进行中……)。
119
+ * 影像集搬进弹窗后,面板没有详情区了,这些"一次性反馈"需要个落脚处;
120
+ * 给个几秒后自动消失,免得过时的话一直挂在那儿。
121
+ */
122
+ setNote(text: string, warn?: boolean): void;
123
+ private syncSessionOptions;
124
+ private readonly onClick;
125
+ private handleAction;
126
+ private readonly onChange;
127
+ private onFiles;
128
+ /** 导出当前会话清单(JSON 完整存档 / CSV 表格) */
129
+ exportSession(session: CaptureSession, format: CaptureExportFormat): string;
130
+ /** 拆除面板 DOM 与轮询 */
131
+ destroy(): void;
132
+ private query;
133
+ private template;
134
+ }
135
+ //# sourceMappingURL=drone-capture-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drone-capture-panel.d.ts","sourceRoot":"","sources":["../../src/lib/drone-camera/drone-capture-panel.ts"],"names":[],"mappings":"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"}