@srsergio/taptapp-ar 1.0.9 → 1.0.10

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 (122) hide show
  1. package/dist/compiler/controller.d.ts +15 -22
  2. package/dist/compiler/controller.js +73 -92
  3. package/dist/compiler/detector/crop-detector.d.ts +20 -51
  4. package/dist/compiler/detector/crop-detector.js +21 -15
  5. package/dist/compiler/input-loader.d.ts +15 -17
  6. package/dist/compiler/input-loader.js +58 -76
  7. package/dist/compiler/matching/hamming-distance.js +4 -4
  8. package/dist/compiler/matching/matcher.js +2 -2
  9. package/dist/compiler/matching/matching.d.ts +2 -16
  10. package/dist/compiler/matching/matching.js +72 -60
  11. package/dist/compiler/offline-compiler.d.ts +9 -29
  12. package/dist/compiler/offline-compiler.js +38 -72
  13. package/dist/compiler/three.js +0 -4
  14. package/dist/compiler/tracker/tracker.d.ts +26 -12
  15. package/dist/compiler/tracker/tracker.js +158 -259
  16. package/package.json +1 -1
  17. package/src/compiler/controller.js +71 -93
  18. package/src/compiler/detector/crop-detector.js +26 -15
  19. package/src/compiler/input-loader.js +62 -88
  20. package/src/compiler/matching/hamming-distance.js +4 -4
  21. package/src/compiler/matching/hough.js +1 -1
  22. package/src/compiler/matching/matcher.js +2 -2
  23. package/src/compiler/matching/matching.js +80 -72
  24. package/src/compiler/offline-compiler.js +38 -75
  25. package/src/compiler/three.js +0 -4
  26. package/src/compiler/tracker/tracker.js +183 -283
  27. package/dist/compiler/compiler-base.d.ts +0 -8
  28. package/dist/compiler/compiler-base.js +0 -179
  29. package/dist/compiler/compiler.d.ts +0 -9
  30. package/dist/compiler/compiler.js +0 -24
  31. package/dist/compiler/compiler.worker.d.ts +0 -1
  32. package/dist/compiler/compiler.worker.js +0 -28
  33. package/dist/compiler/detector/detector.d.ts +0 -97
  34. package/dist/compiler/detector/detector.js +0 -1042
  35. package/dist/compiler/detector/kernels/cpu/binomialFilter.d.ts +0 -6
  36. package/dist/compiler/detector/kernels/cpu/binomialFilter.js +0 -50
  37. package/dist/compiler/detector/kernels/cpu/buildExtremas.d.ts +0 -6
  38. package/dist/compiler/detector/kernels/cpu/buildExtremas.js +0 -89
  39. package/dist/compiler/detector/kernels/cpu/computeExtremaAngles.d.ts +0 -7
  40. package/dist/compiler/detector/kernels/cpu/computeExtremaAngles.js +0 -79
  41. package/dist/compiler/detector/kernels/cpu/computeExtremaFreak.d.ts +0 -6
  42. package/dist/compiler/detector/kernels/cpu/computeExtremaFreak.js +0 -68
  43. package/dist/compiler/detector/kernels/cpu/computeFreakDescriptors.d.ts +0 -6
  44. package/dist/compiler/detector/kernels/cpu/computeFreakDescriptors.js +0 -57
  45. package/dist/compiler/detector/kernels/cpu/computeLocalization.d.ts +0 -6
  46. package/dist/compiler/detector/kernels/cpu/computeLocalization.js +0 -50
  47. package/dist/compiler/detector/kernels/cpu/computeOrientationHistograms.d.ts +0 -6
  48. package/dist/compiler/detector/kernels/cpu/computeOrientationHistograms.js +0 -100
  49. package/dist/compiler/detector/kernels/cpu/downsampleBilinear.d.ts +0 -6
  50. package/dist/compiler/detector/kernels/cpu/downsampleBilinear.js +0 -29
  51. package/dist/compiler/detector/kernels/cpu/extremaReduction.d.ts +0 -6
  52. package/dist/compiler/detector/kernels/cpu/extremaReduction.js +0 -50
  53. package/dist/compiler/detector/kernels/cpu/fakeShader.d.ts +0 -20
  54. package/dist/compiler/detector/kernels/cpu/fakeShader.js +0 -80
  55. package/dist/compiler/detector/kernels/cpu/index.d.ts +0 -1
  56. package/dist/compiler/detector/kernels/cpu/index.js +0 -25
  57. package/dist/compiler/detector/kernels/cpu/prune.d.ts +0 -7
  58. package/dist/compiler/detector/kernels/cpu/prune.js +0 -62
  59. package/dist/compiler/detector/kernels/cpu/smoothHistograms.d.ts +0 -6
  60. package/dist/compiler/detector/kernels/cpu/smoothHistograms.js +0 -47
  61. package/dist/compiler/detector/kernels/cpu/upsampleBilinear.d.ts +0 -6
  62. package/dist/compiler/detector/kernels/cpu/upsampleBilinear.js +0 -43
  63. package/dist/compiler/detector/kernels/index.d.ts +0 -1
  64. package/dist/compiler/detector/kernels/index.js +0 -2
  65. package/dist/compiler/detector/kernels/webgl/binomialFilter.d.ts +0 -6
  66. package/dist/compiler/detector/kernels/webgl/binomialFilter.js +0 -67
  67. package/dist/compiler/detector/kernels/webgl/buildExtremas.d.ts +0 -6
  68. package/dist/compiler/detector/kernels/webgl/buildExtremas.js +0 -101
  69. package/dist/compiler/detector/kernels/webgl/computeExtremaAngles.d.ts +0 -6
  70. package/dist/compiler/detector/kernels/webgl/computeExtremaAngles.js +0 -78
  71. package/dist/compiler/detector/kernels/webgl/computeExtremaFreak.d.ts +0 -6
  72. package/dist/compiler/detector/kernels/webgl/computeExtremaFreak.js +0 -86
  73. package/dist/compiler/detector/kernels/webgl/computeFreakDescriptors.d.ts +0 -6
  74. package/dist/compiler/detector/kernels/webgl/computeFreakDescriptors.js +0 -52
  75. package/dist/compiler/detector/kernels/webgl/computeLocalization.d.ts +0 -6
  76. package/dist/compiler/detector/kernels/webgl/computeLocalization.js +0 -58
  77. package/dist/compiler/detector/kernels/webgl/computeOrientationHistograms.d.ts +0 -6
  78. package/dist/compiler/detector/kernels/webgl/computeOrientationHistograms.js +0 -116
  79. package/dist/compiler/detector/kernels/webgl/downsampleBilinear.d.ts +0 -6
  80. package/dist/compiler/detector/kernels/webgl/downsampleBilinear.js +0 -46
  81. package/dist/compiler/detector/kernels/webgl/extremaReduction.d.ts +0 -6
  82. package/dist/compiler/detector/kernels/webgl/extremaReduction.js +0 -48
  83. package/dist/compiler/detector/kernels/webgl/index.d.ts +0 -1
  84. package/dist/compiler/detector/kernels/webgl/index.js +0 -25
  85. package/dist/compiler/detector/kernels/webgl/smoothHistograms.d.ts +0 -6
  86. package/dist/compiler/detector/kernels/webgl/smoothHistograms.js +0 -49
  87. package/dist/compiler/detector/kernels/webgl/upsampleBilinear.d.ts +0 -6
  88. package/dist/compiler/detector/kernels/webgl/upsampleBilinear.js +0 -56
  89. package/dist/compiler/tensorflow-setup.d.ts +0 -6
  90. package/dist/compiler/tensorflow-setup.js +0 -99
  91. package/src/compiler/compiler-base.js +0 -210
  92. package/src/compiler/compiler.js +0 -25
  93. package/src/compiler/compiler.worker.js +0 -30
  94. package/src/compiler/detector/detector.js +0 -1119
  95. package/src/compiler/detector/kernels/cpu/binomialFilter.js +0 -58
  96. package/src/compiler/detector/kernels/cpu/buildExtremas.js +0 -108
  97. package/src/compiler/detector/kernels/cpu/computeExtremaAngles.js +0 -91
  98. package/src/compiler/detector/kernels/cpu/computeExtremaFreak.js +0 -92
  99. package/src/compiler/detector/kernels/cpu/computeFreakDescriptors.js +0 -68
  100. package/src/compiler/detector/kernels/cpu/computeLocalization.js +0 -67
  101. package/src/compiler/detector/kernels/cpu/computeOrientationHistograms.js +0 -124
  102. package/src/compiler/detector/kernels/cpu/downsampleBilinear.js +0 -33
  103. package/src/compiler/detector/kernels/cpu/extremaReduction.js +0 -53
  104. package/src/compiler/detector/kernels/cpu/fakeShader.js +0 -88
  105. package/src/compiler/detector/kernels/cpu/index.js +0 -26
  106. package/src/compiler/detector/kernels/cpu/prune.js +0 -78
  107. package/src/compiler/detector/kernels/cpu/smoothHistograms.js +0 -57
  108. package/src/compiler/detector/kernels/cpu/upsampleBilinear.js +0 -51
  109. package/src/compiler/detector/kernels/index.js +0 -2
  110. package/src/compiler/detector/kernels/webgl/binomialFilter.js +0 -72
  111. package/src/compiler/detector/kernels/webgl/buildExtremas.js +0 -109
  112. package/src/compiler/detector/kernels/webgl/computeExtremaAngles.js +0 -82
  113. package/src/compiler/detector/kernels/webgl/computeExtremaFreak.js +0 -105
  114. package/src/compiler/detector/kernels/webgl/computeFreakDescriptors.js +0 -56
  115. package/src/compiler/detector/kernels/webgl/computeLocalization.js +0 -70
  116. package/src/compiler/detector/kernels/webgl/computeOrientationHistograms.js +0 -129
  117. package/src/compiler/detector/kernels/webgl/downsampleBilinear.js +0 -50
  118. package/src/compiler/detector/kernels/webgl/extremaReduction.js +0 -50
  119. package/src/compiler/detector/kernels/webgl/index.js +0 -26
  120. package/src/compiler/detector/kernels/webgl/smoothHistograms.js +0 -53
  121. package/src/compiler/detector/kernels/webgl/upsampleBilinear.js +0 -62
  122. package/src/compiler/tensorflow-setup.js +0 -116
@@ -96,69 +96,38 @@ export class OfflineCompiler {
96
96
  }
97
97
  targetImages.push({
98
98
  data: greyImageData,
99
- height: img.height,
100
99
  width: img.width,
100
+ height: img.height,
101
101
  });
102
102
  }
103
- // Fase 1: Matching (50%)
104
- console.time("⏱️ Fase Matching");
105
- const matchingDataList = await this._compileMatch(targetImages, (percent) => {
106
- progressCallback(percent * 0.5);
103
+ // Compilar Match y Track por separado
104
+ const matchingDataList = await this._compileMatch(targetImages, (p) => {
105
+ progressCallback(p * 0.7); // 70% Match
107
106
  });
108
- console.timeEnd("⏱️ Fase Matching");
109
- // Fase 2: Tracking (50%)
110
- console.time("⏱️ Fase Tracking");
111
- const trackingDataList = await this._compileTrack(targetImages, (percent) => {
112
- progressCallback(50 + percent * 0.5);
107
+ const trackingDataList = await this._compileTrack(targetImages, (p) => {
108
+ progressCallback(70 + p * 0.3); // 30% Track
113
109
  });
114
- console.timeEnd("⏱️ Fase Tracking");
115
- // Compilar resultado
116
- this.data = targetImages.map((targetImage, i) => ({
117
- targetImage: { width: targetImage.width, height: targetImage.height },
118
- trackingData: trackingDataList[i],
110
+ this.data = targetImages.map((img, i) => ({
111
+ targetImage: img,
119
112
  matchingData: matchingDataList[i],
113
+ trackingData: trackingDataList[i],
120
114
  }));
121
115
  console.timeEnd("⏱️ Compilación total");
122
116
  return this.data;
123
117
  }
124
- /**
125
- * Compila datos de matching usando DetectorLite (JS puro)
126
- */
127
118
  async _compileMatch(targetImages, progressCallback) {
128
119
  const percentPerImage = 100 / targetImages.length;
129
120
  let currentPercent = 0;
130
121
  // Use workers if available
131
122
  if (this.workerPool) {
132
- const promises = targetImages.map((targetImage, index) => {
133
- return this.workerPool.runTask({
134
- type: 'match',
135
- targetImage,
136
- percentPerImage,
137
- basePercent: index * percentPerImage,
138
- onProgress: (percent) => {
139
- // Basic aggregation: this assumes naive progress updates.
140
- // Ideally we should track exact progress per image.
141
- // For now, simpler to just let the main thread loop handle overall progress callback?
142
- // No, workers are async. We need to aggregate.
143
- // Actually, the main loop below is serial.
144
- // If we use workers, we run them in parallel.
145
- }
146
- });
147
- });
148
- // Progress handling for parallel workers is tricky without a shared state manager.
149
- // Simplified approach: each worker reports its absolute progress contribution?
150
- // No, worker reports 'percent' which is base + local.
151
- // We can use a shared loadedPercent variable.
152
- let totalPercent = 0;
153
123
  const progressMap = new Float32Array(targetImages.length);
154
124
  const wrappedPromises = targetImages.map((targetImage, index) => {
155
125
  return this.workerPool.runTask({
156
126
  type: 'match',
157
127
  targetImage,
158
- percentPerImage, // Not really needed for logic but worker expects it
159
- basePercent: 0, // Worker will report 0-percentPerImage roughly
128
+ percentPerImage,
129
+ basePercent: 0,
160
130
  onProgress: (p) => {
161
- // This 'p' from worker is "base + local". If we passed base=0, it's just local (0 to percentPerImage)
162
131
  progressMap[index] = p;
163
132
  const sum = progressMap.reduce((a, b) => a + b, 0);
164
133
  progressCallback(sum);
@@ -197,9 +166,6 @@ export class OfflineCompiler {
197
166
  }
198
167
  return results;
199
168
  }
200
- /**
201
- * Compila datos de tracking usando extractTrackingFeatures (JS puro)
202
- */
203
169
  async _compileTrack(targetImages, progressCallback) {
204
170
  const percentPerImage = 100 / targetImages.length;
205
171
  let currentPercent = 0;
@@ -234,38 +200,22 @@ export class OfflineCompiler {
234
200
  }
235
201
  return results;
236
202
  }
237
- /**
238
- * Método público para compilar tracking (compatibilidad con API anterior)
239
- * @param {Object} options - Opciones de compilación
240
- * @param {Function} options.progressCallback - Callback de progreso
241
- * @param {Array} options.targetImages - Lista de imágenes objetivo
242
- * @param {number} options.basePercent - Porcentaje base
243
- * @returns {Promise<Array>} Datos de tracking
244
- */
245
203
  async compileTrack({ progressCallback, targetImages, basePercent = 0 }) {
246
204
  return this._compileTrack(targetImages, (percent) => {
247
205
  progressCallback(basePercent + percent * (100 - basePercent) / 100);
248
206
  });
249
207
  }
250
- /**
251
- * Método público para compilar matching (compatibilidad con API anterior)
252
- */
253
208
  async compileMatch({ progressCallback, targetImages, basePercent = 0 }) {
254
209
  return this._compileMatch(targetImages, (percent) => {
255
210
  progressCallback(basePercent + percent * (50 - basePercent) / 100);
256
211
  });
257
212
  }
258
- /**
259
- * Exporta datos compilados en formato binario columnar optimizado
260
- */
261
213
  exportData() {
262
214
  if (!this.data) {
263
215
  throw new Error("No hay datos compilados para exportar");
264
216
  }
265
217
  const dataList = this.data.map((item) => {
266
- // Optimizamos MatchingData convirtiéndolo a formato columnar
267
218
  const matchingData = item.matchingData.map((kf) => this._packKeyframe(kf));
268
- // Optimizamos TrackingData (Zero-copy layout)
269
219
  const trackingData = item.trackingData.map((td) => {
270
220
  const count = td.points.length;
271
221
  const px = new Float32Array(count);
@@ -295,8 +245,7 @@ export class OfflineCompiler {
295
245
  return msgpack.encode({
296
246
  v: CURRENT_VERSION,
297
247
  dataList,
298
- // eslint-disable-next-line
299
- }); // eslint-disable-line
248
+ });
300
249
  }
301
250
  _packKeyframe(kf) {
302
251
  return {
@@ -312,17 +261,20 @@ export class OfflineCompiler {
312
261
  const x = new Float32Array(count);
313
262
  const y = new Float32Array(count);
314
263
  const angle = new Float32Array(count);
264
+ const scale = new Float32Array(count);
315
265
  const descriptors = new Uint8Array(count * 84); // 84 bytes per point (FREAK)
316
266
  for (let i = 0; i < count; i++) {
317
267
  x[i] = points[i].x;
318
268
  y[i] = points[i].y;
319
269
  angle[i] = points[i].angle;
270
+ scale[i] = points[i].scale;
320
271
  descriptors.set(points[i].descriptors, i * 84);
321
272
  }
322
273
  return {
323
274
  x,
324
275
  y,
325
276
  a: angle,
277
+ s: scale,
326
278
  d: descriptors,
327
279
  t: this._compactTree(tree.rootNode),
328
280
  };
@@ -333,18 +285,34 @@ export class OfflineCompiler {
333
285
  }
334
286
  return [0, node.centerPointIndex || 0, node.children.map((c) => this._compactTree(c))];
335
287
  }
336
- /**
337
- * Importa datos - Mantiene el formato columnar para máximo rendimiento (Zero-copy)
338
- */
339
288
  importData(buffer) {
340
289
  const content = msgpack.decode(new Uint8Array(buffer));
341
290
  if (!content.v || content.v !== CURRENT_VERSION) {
342
291
  console.error("Incompatible .mind version. Required: " + CURRENT_VERSION);
343
292
  return [];
344
293
  }
345
- // Ya no de-columnarizamos aquí. Los motores (Tracker/Matcher)
346
- // ahora están optimizados para leer directamente de los buffers.
347
- this.data = content.dataList;
294
+ // Restore Float32Arrays from Uint8Arrays returned by msgpack
295
+ const dataList = content.dataList;
296
+ for (let i = 0; i < dataList.length; i++) {
297
+ const item = dataList[i];
298
+ for (const kf of item.matchingData) {
299
+ for (const col of [kf.max, kf.min]) {
300
+ if (col.x instanceof Uint8Array) {
301
+ col.x = new Float32Array(col.x.buffer.slice(col.x.byteOffset, col.x.byteOffset + col.x.byteLength));
302
+ }
303
+ if (col.y instanceof Uint8Array) {
304
+ col.y = new Float32Array(col.y.buffer.slice(col.y.byteOffset, col.y.byteOffset + col.y.byteLength));
305
+ }
306
+ if (col.a instanceof Uint8Array) {
307
+ col.a = new Float32Array(col.a.buffer.slice(col.a.byteOffset, col.a.byteOffset + col.a.byteLength));
308
+ }
309
+ if (col.s instanceof Uint8Array) {
310
+ col.s = new Float32Array(col.s.buffer.slice(col.s.byteOffset, col.s.byteOffset + col.s.byteLength));
311
+ }
312
+ }
313
+ }
314
+ }
315
+ this.data = dataList;
348
316
  return this.data;
349
317
  }
350
318
  _unpackKeyframe(kf) {
@@ -366,6 +334,7 @@ export class OfflineCompiler {
366
334
  x: col.x[i],
367
335
  y: col.y[i],
368
336
  angle: col.a[i],
337
+ scale: col.s ? col.s[i] : 1.0,
369
338
  descriptors: col.d.slice(i * 84, (i + 1) * 84),
370
339
  });
371
340
  }
@@ -386,9 +355,6 @@ export class OfflineCompiler {
386
355
  children: node[2].map((c) => this._expandTree(c)),
387
356
  };
388
357
  }
389
- /**
390
- * Destruye el pool de workers
391
- */
392
358
  async destroy() {
393
359
  if (this.workerPool) {
394
360
  await this.workerPool.destroy();
@@ -1,6 +1,4 @@
1
1
  import { Matrix4, Vector3, Quaternion, Scene, WebGLRenderer, PerspectiveCamera, Group, sRGBEncoding, } from "three";
2
- import * as tf from "@tensorflow/tfjs";
3
- //import { CSS3DRenderer } from '../libs/CSS3DRenderer.js';
4
2
  import { CSS3DRenderer } from "three/addons/renderers/CSS3DRenderer.js";
5
3
  import { Controller } from "./controller.js";
6
4
  import { UI } from "../ui/ui.js";
@@ -304,5 +302,3 @@ if (!window.MINDAR.IMAGE) {
304
302
  window.MINDAR.IMAGE = {};
305
303
  }
306
304
  window.MINDAR.IMAGE.MindARThree = MindARThree;
307
- //window.MINDAR.IMAGE.THREE = THREE;
308
- window.MINDAR.IMAGE.tf = tf;
@@ -1,16 +1,24 @@
1
1
  export class Tracker {
2
- constructor(markerDimensions: any, trackingDataList: any, projectionTransform: any, debugMode?: boolean);
2
+ constructor(markerDimensions: any, trackingDataList: any, projectionTransform: any, inputWidth: any, inputHeight: any, debugMode?: boolean);
3
3
  markerDimensions: any;
4
4
  trackingDataList: any;
5
5
  projectionTransform: any;
6
+ inputWidth: any;
7
+ inputHeight: any;
6
8
  debugMode: boolean;
7
9
  trackingKeyframeList: any[];
8
- featurePointsListT: any[];
9
- imagePixelsListT: any[];
10
- imagePropertiesListT: any[];
11
- kernelCaches: {};
12
- dummyRun(inputT: any): void;
13
- track(inputImageT: any, lastModelViewTransform: any, targetIndex: any): {
10
+ prebuiltData: {
11
+ px: Float32Array<any>;
12
+ py: Float32Array<any>;
13
+ data: Uint8Array<any>;
14
+ width: any;
15
+ height: any;
16
+ scale: any;
17
+ projectedImage: Float32Array<ArrayBuffer>;
18
+ }[];
19
+ templateBuffer: Float32Array<ArrayBuffer>;
20
+ dummyRun(inputData: any): void;
21
+ track(inputData: any, lastModelViewTransform: any, targetIndex: any): {
14
22
  worldCoords: {
15
23
  x: number;
16
24
  y: number;
@@ -22,9 +30,15 @@ export class Tracker {
22
30
  }[];
23
31
  debugExtra: {};
24
32
  };
25
- _computeMatching(featurePointsT: any, imagePixelsT: any, imagePropertiesT: any, projectedImageT: any): any;
26
- _computeProjection(modelViewProjectionTransformT: any, inputImageT: any, targetIndex: any): any;
27
- _buildAdjustedModelViewTransform(modelViewProjectionTransform: any): any;
28
- _prebuild(trackingFrame: any, maxCount: any): any;
29
- _compileAndRun(program: any, inputs: any): any;
33
+ /**
34
+ * Pure JS implementation of NCC matching
35
+ */
36
+ _computeMatching(prebuilt: any, projectedImage: any): {
37
+ matchingPoints: number[][];
38
+ sim: Float32Array<any>;
39
+ };
40
+ /**
41
+ * Pure JS implementation of Bilinear Warping
42
+ */
43
+ _computeProjection(M: any, inputData: any, prebuilt: any): void;
30
44
  }