@srsergio/taptapp-ar 1.0.43 โ†’ 1.0.50

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 (47) hide show
  1. package/README.md +42 -45
  2. package/dist/compiler/aframe.js +8 -8
  3. package/dist/compiler/controller.d.ts +50 -76
  4. package/dist/compiler/controller.js +72 -116
  5. package/dist/compiler/detector/detector-lite.js +82 -99
  6. package/dist/compiler/index.js +3 -3
  7. package/dist/compiler/matching/hamming-distance.d.ts +8 -0
  8. package/dist/compiler/matching/hamming-distance.js +35 -16
  9. package/dist/compiler/matching/hierarchical-clustering.d.ts +9 -0
  10. package/dist/compiler/matching/hierarchical-clustering.js +76 -56
  11. package/dist/compiler/matching/matching.js +3 -3
  12. package/dist/compiler/node-worker.js +144 -18
  13. package/dist/compiler/offline-compiler.d.ts +34 -83
  14. package/dist/compiler/offline-compiler.js +92 -96
  15. package/dist/compiler/simple-ar.d.ts +31 -57
  16. package/dist/compiler/simple-ar.js +32 -73
  17. package/dist/compiler/three.d.ts +13 -8
  18. package/dist/compiler/three.js +6 -6
  19. package/dist/compiler/tracker/extract.js +17 -14
  20. package/dist/compiler/utils/images.js +11 -16
  21. package/dist/compiler/utils/lsh-direct.d.ts +12 -0
  22. package/dist/compiler/utils/lsh-direct.js +76 -0
  23. package/dist/compiler/utils/worker-pool.js +10 -1
  24. package/dist/index.d.ts +2 -2
  25. package/dist/index.js +2 -2
  26. package/dist/react/types.d.ts +1 -1
  27. package/dist/react/types.js +1 -1
  28. package/package.json +2 -1
  29. package/src/compiler/aframe.js +8 -8
  30. package/src/compiler/controller.ts +512 -0
  31. package/src/compiler/detector/detector-lite.js +87 -107
  32. package/src/compiler/index.js +3 -3
  33. package/src/compiler/matching/hamming-distance.js +39 -16
  34. package/src/compiler/matching/hierarchical-clustering.js +85 -57
  35. package/src/compiler/matching/matching.js +3 -3
  36. package/src/compiler/node-worker.js +163 -18
  37. package/src/compiler/offline-compiler.ts +513 -0
  38. package/src/compiler/{simple-ar.js โ†’ simple-ar.ts} +64 -91
  39. package/src/compiler/three.js +6 -6
  40. package/src/compiler/tracker/extract.js +18 -15
  41. package/src/compiler/utils/images.js +11 -21
  42. package/src/compiler/utils/lsh-direct.js +86 -0
  43. package/src/compiler/utils/worker-pool.js +9 -1
  44. package/src/index.ts +2 -2
  45. package/src/react/types.ts +2 -2
  46. package/src/compiler/controller.js +0 -554
  47. package/src/compiler/offline-compiler.js +0 -515
package/README.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @srsergio/taptapp-ar
2
2
 
3
+ <p align="center">
4
+ <a href="./docs/technical-paper.pdf">๐Ÿ“„ <b>Technical Paper (PDF)</b></a> &nbsp;|&nbsp;
5
+ <a href="./docs/index.html">๐ŸŒ <b>Official Website</b></a> &nbsp;|&nbsp;
6
+ <a href="./analysis/INDEX.md">๐Ÿ“Š <b>Analysis Report</b></a>
7
+ </p>
8
+
3
9
  ๐Ÿš€ **TapTapp AR** is a high-performance Augmented Reality (AR) toolkit for **Node.js** and **Browser** environments. It provides an ultra-fast offline compiler and a lightweight runtime for image tracking.
4
10
 
5
11
  **100% Pure JavaScript**: This package is now completely independent of **TensorFlow.js** for both compilation and real-time tracking, resulting in massive performance gains and zero-latency initialization.
@@ -8,11 +14,14 @@
8
14
 
9
15
  ## ๐ŸŒŸ Key Features
10
16
 
11
- - ๐Ÿ–ผ๏ธ **Hyper-Fast Compiler**: Pure JavaScript compiler that generates `.mind` files in **< 0.9s per image**.
17
+ - ๐Ÿ–ผ๏ธ **Hyper-Fast Compiler**: Pure JavaScript compiler that generates `.taar` files in **< 3s**.
12
18
  - โšก **No TensorFlow Dependency**: No TFJS at all. Works natively in any JS environment (Node, Browser, Workers).
13
- - ๐Ÿš€ **Protocol V5.1 (Moonshot LSH)**: 128-bit Locality Sensitive Hashing (LSH) for descriptors, resulting in **5-10x smaller metadata** and ultra-fast binary matching.
14
- - ๐Ÿงต **High-Precision Tracking**: Now using **Float32** coordinate precision for rock-solid tracking stability, even in low-light or extreme angles.
19
+ - ๐Ÿš€ **Protocol V7 (Moonshot)**:
20
+ - **4-bit Packed Tracking Data**: Grayscale images are compressed to 4-bit depth, slashing file size.
21
+ - **64-bit LSH Descriptors**: Optimized Locality Sensitive Hashing for descriptors.
22
+ - ๐Ÿงต **High-Precision Tracking**: Now using **Float32** coordinate precision for rock-solid tracking stability.
15
23
  - ๐Ÿ“ฆ **Framework Agnostic**: Includes wrappers for **A-Frame**, **Three.js**, and a raw **Controller** for custom engines.
24
+ - ๐Ÿ“‰ **Ultra-Compact Files**: Output `.taar` files are **~50KB** (vs ~380KB+ previously).
16
25
 
17
26
  ---
18
27
 
@@ -24,14 +33,14 @@ npm install @srsergio/taptapp-ar
24
33
 
25
34
  ---
26
35
 
27
- ## ๐Ÿ“Š Industry-Leading Benchmarks (v5.1 Moonshot)
36
+ ## ๐Ÿ“Š Industry-Leading Benchmarks (v7 Moonshot)
28
37
 
29
- | Metric | Official MindAR | TapTapp AR V5.1 | Improvement |
38
+ | Metric | Official MindAR | TapTapp AR V7 | Improvement |
30
39
  | :--- | :--- | :--- | :--- |
31
- | **Compilation Time** | ~23.50s | **~0.89s** | ๐Ÿš€ **26x Faster** |
32
- | **Output Size (.mind)** | ~770 KB | **~137 KB** | ๐Ÿ“‰ **82.2% Smaller** |
33
- | **Descriptor Format** | 84-byte Float | **128-bit LSH** | ๐Ÿง  **81% Data Saving** |
34
- | **Matching Engine** | Iterative Math | **Popcount XOR** | โšก **10x Faster Math** |
40
+ | **Compilation Time** | ~23.50s | **~2.61s** | ๐Ÿš€ **~9x Faster** |
41
+ | **Output Size (.taar)** | ~770 KB | **~50 KB** | ๐Ÿ“‰ **93% Smaller** |
42
+ | **Descriptor Format** | 84-byte Float | **64-bit LSH** | ๐Ÿง  **Massive Data Saving** |
43
+ | **Tracking Data** | 8-bit Gray | **4-bit Packed** | ๐Ÿ“ฆ **50% Data Saving** |
35
44
  | **Dependency Size** | ~20MB (TFJS) | **< 100KB** | ๐Ÿ“ฆ **99% Smaller Bundle** |
36
45
 
37
46
  ---
@@ -42,17 +51,17 @@ The latest version has been rigorously tested with an adaptive stress test (`rob
42
51
 
43
52
  | Metric | Result | Description |
44
53
  | :--- | :--- | :--- |
45
- | **Pass Rate** | **96.3%** | 208/216 Tests passed across all conditions. |
54
+ | **Pass Rate** | **96.3%** | High success rate across resolutions. |
46
55
  | **Drift Tolerance** | **< 15%** | Validated geometrically against ground truth metadata. |
47
- | **Tracking Precision** | **Float32** | Full 32-bit precision for optical flow tracking (no compression artifacts). |
56
+ | **Tracking Precision** | **Float32** | Full 32-bit precision for optical flow tracking. |
48
57
  | **Detection Time** | **~21ms** | Ultra-fast initial detection on standard CPU. |
49
- | **Total Pipeline** | **~64ms** | Complete loop (Detect + Match + Track + Validate) on single core. |
58
+ | **Total Pipeline** | **~64ms** | Complete loop (Detect + Match + Track + Validate). |
50
59
 
51
60
  ---
52
61
 
53
62
  ## ๐Ÿ–ผ๏ธ Compiler Usage (Node.js & Web)
54
63
 
55
- The compiler is designed to run in workers (Node.js or Browser) for maximum performance.
64
+ The compiler is optimized to run in workers for maximum performance.
56
65
 
57
66
  ```javascript
58
67
  import { OfflineCompiler } from '@srsergio/taptapp-ar';
@@ -60,12 +69,13 @@ import { OfflineCompiler } from '@srsergio/taptapp-ar';
60
69
  const compiler = new OfflineCompiler();
61
70
 
62
71
  // Compile target image (provide grayscale pixel data)
72
+ // Input: { width, height, data: Uint8Array }
63
73
  await compiler.compileImageTargets(
64
74
  [{ width, height, data: grayscaleUint8Array }],
65
75
  (progress) => console.log(`Compiling: ${progress}%`)
66
76
  );
67
77
 
68
- // Export to high-efficiency binary format
78
+ // Export to high-efficiency binary format (Protocol V7)
69
79
  const binaryBuffer = compiler.exportData();
70
80
  ```
71
81
 
@@ -80,9 +90,9 @@ The easiest way to use TapTapp AR in a web app:
80
90
  <script src="https://aframe.io/releases/1.5.0/aframe.min.js"></script>
81
91
  <script src="path/to/@srsergio/taptapp-ar/dist/index.js"></script>
82
92
 
83
- <a-scene mindar-image="imageTargetSrc: ./targets.mind;">
93
+ <a-scene taar-image="imageTargetSrc: ./targets.taar;">
84
94
  <a-camera position="0 0 0" look-controls="enabled: false"></a-camera>
85
- <a-entity mindar-image-target="targetIndex: 0">
95
+ <a-entity taar-image-target="targetIndex: 0">
86
96
  <a-plane position="0 0 0" height="0.552" width="1"></a-plane>
87
97
  </a-entity>
88
98
  </a-scene>
@@ -92,19 +102,19 @@ The easiest way to use TapTapp AR in a web app:
92
102
  For custom Three.js applications:
93
103
 
94
104
  ```javascript
95
- import { MindARThree } from '@srsergio/taptapp-ar';
105
+ import { TaarThree } from '@srsergio/taptapp-ar';
96
106
 
97
- const mindarThree = new MindARThree({
107
+ const taarThree = new TaarThree({
98
108
  container: document.querySelector("#container"),
99
- imageTargetSrc: './targets.mind',
109
+ imageTargetSrc: './targets.taar',
100
110
  });
101
111
 
102
- const {renderer, scene, camera} = mindarThree;
112
+ const {renderer, scene, camera} = taarThree;
103
113
 
104
- const anchor = mindarThree.addAnchor(0);
114
+ const anchor = taarThree.addAnchor(0);
105
115
  // Add your 3D models to anchor.group
106
116
 
107
- await mindarThree.start();
117
+ await taarThree.start();
108
118
  renderer.setAnimationLoop(() => {
109
119
  renderer.render(scene, camera);
110
120
  });
@@ -150,10 +160,10 @@ const controller = new Controller({
150
160
  });
151
161
 
152
162
  // Single target
153
- await controller.addImageTargets('./targets.mind');
163
+ await controller.addImageTargets('./targets.taar');
154
164
 
155
- // OR multiple targets from different .mind files
156
- await controller.addImageTargets(['./target1.mind', './target2.mind', './target3.mind']);
165
+ // OR multiple targets from different .taar files
166
+ await controller.addImageTargets(['./target1.taar', './target2.taar', './target3.taar']);
157
167
  controller.processVideo(videoElement); // Starts the internal RAF loop
158
168
  ```
159
169
 
@@ -162,7 +172,7 @@ Use this for "Snap and Detect" features without a continuous video loop:
162
172
 
163
173
  ```javascript
164
174
  const controller = new Controller({ inputWidth: 1024, inputHeight: 1024 });
165
- await controller.addImageTargets('./targets.mind');
175
+ await controller.addImageTargets('./targets.taar');
166
176
 
167
177
  // 1. Detect features in a static image
168
178
  const { featurePoints } = await controller.detect(canvasElement);
@@ -183,7 +193,7 @@ import { SimpleAR } from '@srsergio/taptapp-ar';
183
193
 
184
194
  const ar = new SimpleAR({
185
195
  container: document.getElementById('ar-container'),
186
- targetSrc: './my-target.mind', // Single URL or array: ['./a.mind', './b.mind']
196
+ targetSrc: './my-target.taar', // Single URL or array: ['./a.taar', './b.taar']
187
197
  overlay: document.getElementById('my-overlay'),
188
198
  onFound: ({ targetIndex }) => console.log(`Target ${targetIndex} detected! ๐ŸŽฏ`),
189
199
  onLost: ({ targetIndex }) => console.log(`Target ${targetIndex} lost ๐Ÿ‘‹`)
@@ -207,7 +217,7 @@ ar.stop();
207
217
 
208
218
  const ar = new SimpleAR({
209
219
  container: document.getElementById('ar-container'),
210
- targetSrc: './targets.mind',
220
+ targetSrc: './targets.taar',
211
221
  overlay: document.getElementById('my-overlay'),
212
222
  });
213
223
 
@@ -219,7 +229,7 @@ ar.stop();
219
229
  | Option | Required | Description |
220
230
  | :--- | :--- | :--- |
221
231
  | `container` | โœ… | DOM element where video + overlay render |
222
- | `targetSrc` | โœ… | URL to your `.mind` file |
232
+ | `targetSrc` | โœ… | URL to your `.taar` file |
223
233
  | `overlay` | โœ… | DOM element to position on the target |
224
234
  | `onFound` | โŒ | Callback when target is detected |
225
235
  | `onLost` | โŒ | Callback when target is lost |
@@ -228,26 +238,13 @@ ar.stop();
228
238
 
229
239
  ---
230
240
 
231
- #### ๐Ÿ› ๏ธ Life-cycle Management
232
- Properly management is crucial to avoid memory leaks:
233
-
234
- ```javascript
235
- // Stop the video loop
236
- controller.stopProcessVideo();
237
-
238
- // Clean up workers and internal buffers
239
- controller.dispose();
240
- ```
241
-
242
- ---
243
-
244
- ## ๐Ÿ—๏ธ Protocol V5.1 (Moonshot LSH Format)
241
+ ## ๐Ÿ—๏ธ Protocol V7 (Moonshot Packed Format)
245
242
  TapTapp AR uses a proprietary **Moonshot Vision Codec** that is significantly more efficient than standard AR formats.
246
243
 
247
- - **128-bit LSH Fingerprinting**: Each feature point is compressed from 84 bytes to 16 bytes using Locality Sensitive Hashing.
244
+ - **4-bit Packed Tracking Data**: Image data used for optical flow is compressed to 4-bit depth.
245
+ - **64-bit LSH Fingerprinting**: Feature descriptors are compressed to just 8 bytes using LSH.
248
246
  - **Binary Matching Engine**: Uses hardware-accelerated population count (`popcount`) and `XOR` for near-instant point matching.
249
247
  - **Zero-Copy Restoration**: Binary buffers are mapped directly to TypedArrays (Uint32 for descriptors, Float32 for tracking coordinates).
250
- - **Cache Locality**: Performance is optimized for modern CPUs by keeping coordinates and descriptors adjacent in memory.
251
248
 
252
249
  ---
253
250
 
@@ -1,5 +1,5 @@
1
1
  import { Controller, UI } from "./index.js";
2
- AFRAME.registerSystem("mindar-image-system", {
2
+ AFRAME.registerSystem("taar-image-system", {
3
3
  container: null,
4
4
  video: null,
5
5
  processingImage: false,
@@ -174,8 +174,8 @@ AFRAME.registerSystem("mindar-image-system", {
174
174
  this.video.style.height = vh + "px";
175
175
  },
176
176
  });
177
- AFRAME.registerComponent("mindar-image", {
178
- dependencies: ["mindar-image-system"],
177
+ AFRAME.registerComponent("taar-image", {
178
+ dependencies: ["taar-image-system"],
179
179
  schema: {
180
180
  imageTargetSrc: { type: "string" },
181
181
  maxTrack: { type: "int", default: 1 },
@@ -190,7 +190,7 @@ AFRAME.registerComponent("mindar-image", {
190
190
  uiError: { type: "string", default: "yes" },
191
191
  },
192
192
  init: function () {
193
- const arSystem = this.el.sceneEl.systems["mindar-image-system"];
193
+ const arSystem = this.el.sceneEl.systems["taar-image-system"];
194
194
  arSystem.setup({
195
195
  imageTargetSrc: this.data.imageTargetSrc,
196
196
  maxTrack: this.data.maxTrack,
@@ -214,14 +214,14 @@ AFRAME.registerComponent("mindar-image", {
214
214
  arSystem.stop();
215
215
  },
216
216
  });
217
- AFRAME.registerComponent("mindar-image-target", {
218
- dependencies: ["mindar-image-system"],
217
+ AFRAME.registerComponent("taar-image-target", {
218
+ dependencies: ["taar-image-system"],
219
219
  schema: {
220
220
  targetIndex: { type: "number" },
221
221
  },
222
222
  postMatrix: null, // rescale the anchor to make width of 1 unit = physical width of card
223
223
  init: function () {
224
- const arSystem = this.el.sceneEl.systems["mindar-image-system"];
224
+ const arSystem = this.el.sceneEl.systems["taar-image-system"];
225
225
  arSystem.registerAnchor(this, this.data.targetIndex);
226
226
  this.invisibleMatrix = new AFRAME.THREE.Matrix4().set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
227
227
  const root = this.el.object3D;
@@ -267,6 +267,6 @@ then A-Frame will process the webpage *before* the system and components get reg
267
267
  Resulting in a blank page. This happens because module loading is deferred.
268
268
  */
269
269
  /* if(needsDOMRefresh){
270
- console.log("mindar-face-aframe::Refreshing DOM...")
270
+ console.log("taar-face-aframe::Refreshing DOM...")
271
271
  document.body.innerHTML=document.body.innerHTML;
272
272
  } */
@@ -1,18 +1,21 @@
1
- export class Controller {
2
- constructor({ inputWidth, inputHeight, onUpdate, debugMode, maxTrack, warmupTolerance, missTolerance, filterMinCF, filterBeta, worker, }: {
3
- inputWidth: any;
4
- inputHeight: any;
5
- onUpdate?: null | undefined;
6
- debugMode?: boolean | undefined;
7
- maxTrack?: number | undefined;
8
- warmupTolerance?: null | undefined;
9
- missTolerance?: null | undefined;
10
- filterMinCF?: null | undefined;
11
- filterBeta?: null | undefined;
12
- worker?: null | undefined;
13
- });
14
- inputWidth: any;
15
- inputHeight: any;
1
+ import { Tracker } from "./tracker/tracker.js";
2
+ import { CropDetector } from "./detector/crop-detector.js";
3
+ import { InputLoader } from "./input-loader.js";
4
+ export interface ControllerOptions {
5
+ inputWidth: number;
6
+ inputHeight: number;
7
+ onUpdate?: ((data: any) => void) | null;
8
+ debugMode?: boolean;
9
+ maxTrack?: number;
10
+ warmupTolerance?: number | null;
11
+ missTolerance?: number | null;
12
+ filterMinCF?: number | null;
13
+ filterBeta?: number | null;
14
+ worker?: any;
15
+ }
16
+ declare class Controller {
17
+ inputWidth: number;
18
+ inputHeight: number;
16
19
  maxTrack: number;
17
20
  filterMinCF: number;
18
21
  filterBeta: number;
@@ -20,8 +23,8 @@ export class Controller {
20
23
  missTolerance: number;
21
24
  cropDetector: CropDetector;
22
25
  inputLoader: InputLoader;
23
- markerDimensions: any[][] | null;
24
- onUpdate: any;
26
+ markerDimensions: any[] | null;
27
+ onUpdate: ((data: any) => void) | null;
25
28
  debugMode: boolean;
26
29
  processingVideo: boolean;
27
30
  interestedTargetIndex: number;
@@ -29,48 +32,40 @@ export class Controller {
29
32
  worker: any;
30
33
  projectionTransform: number[][];
31
34
  projectionMatrix: number[];
35
+ tracker: Tracker | null;
36
+ matchingDataList: any;
37
+ workerMatchDone: ((data: any) => void) | null;
38
+ workerTrackDone: ((data: any) => void) | null;
39
+ mainThreadMatcher: any;
40
+ mainThreadEstimator: any;
41
+ constructor({ inputWidth, inputHeight, onUpdate, debugMode, maxTrack, warmupTolerance, missTolerance, filterMinCF, filterBeta, worker, }: ControllerOptions);
32
42
  _setupWorkerListener(): void;
33
43
  _ensureWorker(): void;
34
- /**
35
- * Load image targets from one or multiple .mind files
36
- * @param {string|string[]} fileURLs - Single URL or array of URLs to .mind files
37
- * @returns {Promise<{dimensions, matchingDataList, trackingDataList}>}
38
- */
39
44
  addImageTargets(fileURLs: string | string[]): Promise<{
40
- dimensions: any;
41
- matchingDataList: any;
42
- trackingDataList: any;
45
+ dimensions: any[];
46
+ matchingDataList: any[];
47
+ trackingDataList: any[];
43
48
  }>;
44
- /**
45
- * Load image targets from multiple ArrayBuffers
46
- * @param {ArrayBuffer[]} buffers - Array of .mind file buffers
47
- */
48
49
  addImageTargetsFromBuffers(buffers: ArrayBuffer[]): {
49
- dimensions: any[][];
50
+ dimensions: any[];
50
51
  matchingDataList: any[];
51
52
  trackingDataList: any[];
52
53
  };
53
- tracker: Tracker | undefined;
54
- matchingDataList: any[] | undefined;
55
- /**
56
- * Load image targets from a single ArrayBuffer (backward compatible)
57
- * @param {ArrayBuffer} buffer - Single .mind file buffer
58
- */
59
54
  addImageTargetsFromBuffer(buffer: ArrayBuffer): {
60
- dimensions: any[][];
55
+ dimensions: any[];
61
56
  matchingDataList: any[];
62
57
  trackingDataList: any[];
63
58
  };
64
59
  dispose(): void;
65
60
  dummyRun(input: any): void;
66
61
  getProjectionMatrix(): number[];
67
- getRotatedZ90Matrix(m: any): any[];
68
- getWorldMatrix(modelViewTransform: any, targetIndex: any): any[];
69
- _detectAndMatch(inputData: any, targetIndexes: any): Promise<{
62
+ getRotatedZ90Matrix(m: number[]): number[];
63
+ getWorldMatrix(modelViewTransform: number[][], targetIndex: number): number[];
64
+ _detectAndMatch(inputData: any, targetIndexes: number[]): Promise<{
70
65
  targetIndex: any;
71
66
  modelViewTransform: any;
72
67
  }>;
73
- _trackAndUpdate(inputData: any, lastModelViewTransform: any, targetIndex: any): Promise<any>;
68
+ _trackAndUpdate(inputData: any, lastModelViewTransform: number[][], targetIndex: number): Promise<any>;
74
69
  processVideo(input: any): void;
75
70
  stopProcessVideo(): void;
76
71
  detect(input: any): Promise<{
@@ -81,14 +76,14 @@ export class Controller {
81
76
  projectedImage?: undefined;
82
77
  };
83
78
  }>;
84
- match(featurePoints: any, targetIndex: any): Promise<{
79
+ match(featurePoints: any, targetIndex: number): Promise<{
85
80
  targetIndex: any;
86
81
  modelViewTransform: any;
87
82
  screenCoords: any;
88
83
  worldCoords: any;
89
84
  debugExtra: any;
90
85
  }>;
91
- track(input: any, modelViewTransform: any, targetIndex: any): Promise<{
86
+ track(input: any, modelViewTransform: number[][], targetIndex: number): Promise<{
92
87
  worldCoords: {
93
88
  x: number;
94
89
  y: number;
@@ -100,39 +95,18 @@ export class Controller {
100
95
  }[];
101
96
  debugExtra: {};
102
97
  }>;
103
- trackUpdate(modelViewTransform: any, trackFeatures: any): Promise<any>;
104
- _workerMatch(featurePoints: any, targetIndexes: any): Promise<any>;
105
- workerMatchDone: ((data: any) => void) | undefined;
106
- _matchOnMainThread(featurePoints: any, targetIndexes: any): Promise<{
98
+ trackUpdate(modelViewTransform: number[][], trackFeatures: any): Promise<any>;
99
+ _workerMatch(featurePoints: any, targetIndexes: number[]): Promise<any>;
100
+ _matchOnMainThread(featurePoints: any, targetIndexes: number[]): Promise<{
107
101
  targetIndex: number;
108
- modelViewTransform: number[][] | null;
109
- screenCoords: {
110
- x: any;
111
- y: any;
112
- }[] | null | undefined;
113
- worldCoords: {
114
- x: number;
115
- y: number;
116
- z: number;
117
- }[] | null | undefined;
118
- debugExtra: {
119
- frames: never[];
120
- } | null;
102
+ modelViewTransform: any;
103
+ screenCoords: any;
104
+ worldCoords: any;
105
+ debugExtra: any;
121
106
  }>;
122
- mainThreadMatcher: import("./matching/matcher.js").Matcher | undefined;
123
- mainThreadEstimator: import("./estimation/estimator.js").Estimator | undefined;
124
- _workerTrackUpdate(modelViewTransform: any, trackingFeatures: any): Promise<any>;
125
- workerTrackDone: ((data: any) => void) | undefined;
126
- _trackUpdateOnMainThread(modelViewTransform: any, trackingFeatures: any): Promise<never[][] | null>;
127
- _glModelViewMatrix(modelViewTransform: any, targetIndex: any): any[];
128
- _glProjectionMatrix({ projectionTransform, width, height, near, far }: {
129
- projectionTransform: any;
130
- width: any;
131
- height: any;
132
- near: any;
133
- far: any;
134
- }): number[];
107
+ _workerTrackUpdate(modelViewTransform: number[][], trackingFeatures: any): Promise<any>;
108
+ _trackUpdateOnMainThread(modelViewTransform: number[][], trackingFeatures: any): Promise<any>;
109
+ _glModelViewMatrix(modelViewTransform: number[][], targetIndex: number): number[];
110
+ _glProjectionMatrix({ projectionTransform, width, height, near, far }: any): number[];
135
111
  }
136
- import { CropDetector } from "./detector/crop-detector.js";
137
- import { InputLoader } from "./input-loader.js";
138
- import { Tracker } from "./tracker/tracker.js";
112
+ export { Controller };