@srsergio/taptapp-ar 1.0.8 → 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.
- package/dist/compiler/controller.d.ts +15 -22
- package/dist/compiler/controller.js +73 -92
- package/dist/compiler/detector/crop-detector.d.ts +20 -51
- package/dist/compiler/detector/crop-detector.js +21 -15
- package/dist/compiler/input-loader.d.ts +15 -17
- package/dist/compiler/input-loader.js +58 -76
- package/dist/compiler/matching/hamming-distance.js +4 -4
- package/dist/compiler/matching/matcher.js +2 -2
- package/dist/compiler/matching/matching.d.ts +2 -16
- package/dist/compiler/matching/matching.js +72 -60
- package/dist/compiler/offline-compiler.d.ts +14 -65
- package/dist/compiler/offline-compiler.js +86 -55
- package/dist/compiler/three.js +0 -4
- package/dist/compiler/tracker/tracker.d.ts +26 -12
- package/dist/compiler/tracker/tracker.js +158 -259
- package/dist/compiler/utils/worker-pool.d.ts +2 -1
- package/dist/compiler/utils/worker-pool.js +4 -8
- package/package.json +1 -1
- package/src/compiler/controller.js +71 -93
- package/src/compiler/detector/crop-detector.js +26 -15
- package/src/compiler/input-loader.js +62 -88
- package/src/compiler/matching/hamming-distance.js +4 -4
- package/src/compiler/matching/hough.js +1 -1
- package/src/compiler/matching/matcher.js +2 -2
- package/src/compiler/matching/matching.js +80 -72
- package/src/compiler/offline-compiler.js +92 -58
- package/src/compiler/three.js +0 -4
- package/src/compiler/tracker/tracker.js +183 -283
- package/src/compiler/utils/worker-pool.js +4 -8
- package/dist/compiler/compiler-base.d.ts +0 -8
- package/dist/compiler/compiler-base.js +0 -179
- package/dist/compiler/compiler.d.ts +0 -9
- package/dist/compiler/compiler.js +0 -24
- package/dist/compiler/compiler.worker.d.ts +0 -1
- package/dist/compiler/compiler.worker.js +0 -28
- package/dist/compiler/detector/detector.d.ts +0 -97
- package/dist/compiler/detector/detector.js +0 -1042
- package/dist/compiler/detector/kernels/cpu/binomialFilter.d.ts +0 -6
- package/dist/compiler/detector/kernels/cpu/binomialFilter.js +0 -50
- package/dist/compiler/detector/kernels/cpu/buildExtremas.d.ts +0 -6
- package/dist/compiler/detector/kernels/cpu/buildExtremas.js +0 -89
- package/dist/compiler/detector/kernels/cpu/computeExtremaAngles.d.ts +0 -7
- package/dist/compiler/detector/kernels/cpu/computeExtremaAngles.js +0 -79
- package/dist/compiler/detector/kernels/cpu/computeExtremaFreak.d.ts +0 -6
- package/dist/compiler/detector/kernels/cpu/computeExtremaFreak.js +0 -68
- package/dist/compiler/detector/kernels/cpu/computeFreakDescriptors.d.ts +0 -6
- package/dist/compiler/detector/kernels/cpu/computeFreakDescriptors.js +0 -57
- package/dist/compiler/detector/kernels/cpu/computeLocalization.d.ts +0 -6
- package/dist/compiler/detector/kernels/cpu/computeLocalization.js +0 -50
- package/dist/compiler/detector/kernels/cpu/computeOrientationHistograms.d.ts +0 -6
- package/dist/compiler/detector/kernels/cpu/computeOrientationHistograms.js +0 -100
- package/dist/compiler/detector/kernels/cpu/downsampleBilinear.d.ts +0 -6
- package/dist/compiler/detector/kernels/cpu/downsampleBilinear.js +0 -29
- package/dist/compiler/detector/kernels/cpu/extremaReduction.d.ts +0 -6
- package/dist/compiler/detector/kernels/cpu/extremaReduction.js +0 -50
- package/dist/compiler/detector/kernels/cpu/fakeShader.d.ts +0 -20
- package/dist/compiler/detector/kernels/cpu/fakeShader.js +0 -80
- package/dist/compiler/detector/kernels/cpu/index.d.ts +0 -1
- package/dist/compiler/detector/kernels/cpu/index.js +0 -25
- package/dist/compiler/detector/kernels/cpu/prune.d.ts +0 -7
- package/dist/compiler/detector/kernels/cpu/prune.js +0 -62
- package/dist/compiler/detector/kernels/cpu/smoothHistograms.d.ts +0 -6
- package/dist/compiler/detector/kernels/cpu/smoothHistograms.js +0 -47
- package/dist/compiler/detector/kernels/cpu/upsampleBilinear.d.ts +0 -6
- package/dist/compiler/detector/kernels/cpu/upsampleBilinear.js +0 -43
- package/dist/compiler/detector/kernels/index.d.ts +0 -1
- package/dist/compiler/detector/kernels/index.js +0 -2
- package/dist/compiler/detector/kernels/webgl/binomialFilter.d.ts +0 -6
- package/dist/compiler/detector/kernels/webgl/binomialFilter.js +0 -67
- package/dist/compiler/detector/kernels/webgl/buildExtremas.d.ts +0 -6
- package/dist/compiler/detector/kernels/webgl/buildExtremas.js +0 -101
- package/dist/compiler/detector/kernels/webgl/computeExtremaAngles.d.ts +0 -6
- package/dist/compiler/detector/kernels/webgl/computeExtremaAngles.js +0 -78
- package/dist/compiler/detector/kernels/webgl/computeExtremaFreak.d.ts +0 -6
- package/dist/compiler/detector/kernels/webgl/computeExtremaFreak.js +0 -86
- package/dist/compiler/detector/kernels/webgl/computeFreakDescriptors.d.ts +0 -6
- package/dist/compiler/detector/kernels/webgl/computeFreakDescriptors.js +0 -52
- package/dist/compiler/detector/kernels/webgl/computeLocalization.d.ts +0 -6
- package/dist/compiler/detector/kernels/webgl/computeLocalization.js +0 -58
- package/dist/compiler/detector/kernels/webgl/computeOrientationHistograms.d.ts +0 -6
- package/dist/compiler/detector/kernels/webgl/computeOrientationHistograms.js +0 -116
- package/dist/compiler/detector/kernels/webgl/downsampleBilinear.d.ts +0 -6
- package/dist/compiler/detector/kernels/webgl/downsampleBilinear.js +0 -46
- package/dist/compiler/detector/kernels/webgl/extremaReduction.d.ts +0 -6
- package/dist/compiler/detector/kernels/webgl/extremaReduction.js +0 -48
- package/dist/compiler/detector/kernels/webgl/index.d.ts +0 -1
- package/dist/compiler/detector/kernels/webgl/index.js +0 -25
- package/dist/compiler/detector/kernels/webgl/smoothHistograms.d.ts +0 -6
- package/dist/compiler/detector/kernels/webgl/smoothHistograms.js +0 -49
- package/dist/compiler/detector/kernels/webgl/upsampleBilinear.d.ts +0 -6
- package/dist/compiler/detector/kernels/webgl/upsampleBilinear.js +0 -56
- package/dist/compiler/tensorflow-setup.d.ts +0 -6
- package/dist/compiler/tensorflow-setup.js +0 -99
- package/src/compiler/compiler-base.js +0 -210
- package/src/compiler/compiler.js +0 -25
- package/src/compiler/compiler.worker.js +0 -30
- package/src/compiler/detector/detector.js +0 -1119
- package/src/compiler/detector/kernels/cpu/binomialFilter.js +0 -58
- package/src/compiler/detector/kernels/cpu/buildExtremas.js +0 -108
- package/src/compiler/detector/kernels/cpu/computeExtremaAngles.js +0 -91
- package/src/compiler/detector/kernels/cpu/computeExtremaFreak.js +0 -92
- package/src/compiler/detector/kernels/cpu/computeFreakDescriptors.js +0 -68
- package/src/compiler/detector/kernels/cpu/computeLocalization.js +0 -67
- package/src/compiler/detector/kernels/cpu/computeOrientationHistograms.js +0 -124
- package/src/compiler/detector/kernels/cpu/downsampleBilinear.js +0 -33
- package/src/compiler/detector/kernels/cpu/extremaReduction.js +0 -53
- package/src/compiler/detector/kernels/cpu/fakeShader.js +0 -88
- package/src/compiler/detector/kernels/cpu/index.js +0 -26
- package/src/compiler/detector/kernels/cpu/prune.js +0 -78
- package/src/compiler/detector/kernels/cpu/smoothHistograms.js +0 -57
- package/src/compiler/detector/kernels/cpu/upsampleBilinear.js +0 -51
- package/src/compiler/detector/kernels/index.js +0 -2
- package/src/compiler/detector/kernels/webgl/binomialFilter.js +0 -72
- package/src/compiler/detector/kernels/webgl/buildExtremas.js +0 -109
- package/src/compiler/detector/kernels/webgl/computeExtremaAngles.js +0 -82
- package/src/compiler/detector/kernels/webgl/computeExtremaFreak.js +0 -105
- package/src/compiler/detector/kernels/webgl/computeFreakDescriptors.js +0 -56
- package/src/compiler/detector/kernels/webgl/computeLocalization.js +0 -70
- package/src/compiler/detector/kernels/webgl/computeOrientationHistograms.js +0 -129
- package/src/compiler/detector/kernels/webgl/downsampleBilinear.js +0 -50
- package/src/compiler/detector/kernels/webgl/extremaReduction.js +0 -50
- package/src/compiler/detector/kernels/webgl/index.js +0 -26
- package/src/compiler/detector/kernels/webgl/smoothHistograms.js +0 -53
- package/src/compiler/detector/kernels/webgl/upsampleBilinear.js +0 -62
- package/src/compiler/tensorflow-setup.js +0 -116
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import { Detector } from "./detector/detector.js";
|
|
2
|
-
import { buildImageList, buildTrackingImageList } from "./image-list.js";
|
|
3
|
-
import { build as hierarchicalClusteringBuild } from "./matching/hierarchical-clustering.js";
|
|
4
|
-
import * as msgpack from "@msgpack/msgpack";
|
|
5
|
-
import { tf } from "./tensorflow-setup.js";
|
|
6
|
-
|
|
7
|
-
// TODO: better compression method. now grey image saved in pixels, which could be larger than original image
|
|
8
|
-
|
|
9
|
-
const CURRENT_VERSION = 2;
|
|
10
|
-
|
|
11
|
-
class CompilerBase {
|
|
12
|
-
constructor() {
|
|
13
|
-
this.data = null;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// input images con formato {width, height, data}
|
|
17
|
-
compileImageTargets(images, progressCallback) {
|
|
18
|
-
return new Promise(async (resolve, reject) => {
|
|
19
|
-
try {
|
|
20
|
-
const targetImages = [];
|
|
21
|
-
for (let i = 0; i < images.length; i++) {
|
|
22
|
-
const img = images[i];
|
|
23
|
-
|
|
24
|
-
if (!img || !img.width || !img.height || !img.data) {
|
|
25
|
-
reject(
|
|
26
|
-
new Error(
|
|
27
|
-
`Imagen inválida en posición ${i}. Debe tener propiedades width, height y data.`,
|
|
28
|
-
),
|
|
29
|
-
);
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Convertir a escala de grises si aún no lo está
|
|
34
|
-
// Buffer alineado para optimización SIMD
|
|
35
|
-
const greyImageData = new Uint8Array(
|
|
36
|
-
new SharedArrayBuffer(Math.ceil((img.width * img.height) / 16) * 16),
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
// Si los datos ya están en escala de grises (1 byte por píxel)
|
|
40
|
-
if (img.data.length === img.width * img.height) {
|
|
41
|
-
greyImageData.set(img.data);
|
|
42
|
-
}
|
|
43
|
-
// Si los datos están en formato RGBA (4 bytes por píxel)
|
|
44
|
-
else if (img.data.length === img.width * img.height * 4) {
|
|
45
|
-
for (let j = 0; j < greyImageData.length; j++) {
|
|
46
|
-
const offset = j * 4;
|
|
47
|
-
greyImageData[j] = Math.floor(
|
|
48
|
-
(img.data[offset] + img.data[offset + 1] + img.data[offset + 2]) / 3,
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
// Si los datos están en otro formato, rechazar
|
|
53
|
-
else {
|
|
54
|
-
reject(new Error(`Formato de datos de imagen no soportado en posición ${i}`));
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const targetImage = {
|
|
59
|
-
data: greyImageData,
|
|
60
|
-
height: img.height,
|
|
61
|
-
width: img.width,
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
targetImages.push(targetImage);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// compute matching data: 50% progress
|
|
68
|
-
let matchingDataList;
|
|
69
|
-
if (this.compileMatch) {
|
|
70
|
-
matchingDataList = await this.compileMatch({
|
|
71
|
-
progressCallback,
|
|
72
|
-
targetImages,
|
|
73
|
-
basePercent: 0,
|
|
74
|
-
});
|
|
75
|
-
} else {
|
|
76
|
-
const percentPerImage = 50.0 / targetImages.length;
|
|
77
|
-
let percent = 0.0;
|
|
78
|
-
const matchingPromises = targetImages.map(async (targetImage, i) => {
|
|
79
|
-
const imageList = buildImageList(targetImage);
|
|
80
|
-
const percentPerAction = percentPerImage / imageList.length;
|
|
81
|
-
|
|
82
|
-
const matchingData = await _extractMatchingFeatures(imageList, () => {
|
|
83
|
-
percent += percentPerAction;
|
|
84
|
-
progressCallback(percent);
|
|
85
|
-
});
|
|
86
|
-
return matchingData;
|
|
87
|
-
});
|
|
88
|
-
matchingDataList = await Promise.all(matchingPromises);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
this.data = [];
|
|
92
|
-
for (let i = 0; i < targetImages.length; i++) {
|
|
93
|
-
this.data.push({
|
|
94
|
-
targetImage: targetImages[i],
|
|
95
|
-
imageList: buildImageList(targetImages[i]),
|
|
96
|
-
matchingData: matchingDataList[i],
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
for (let i = 0; i < targetImages.length; i++) {
|
|
101
|
-
const trackingImageList = buildTrackingImageList(targetImages[i]);
|
|
102
|
-
this.data[i].trackingImageList = trackingImageList;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const trackingDataList = await this.compileTrack({
|
|
106
|
-
progressCallback,
|
|
107
|
-
targetImages,
|
|
108
|
-
basePercent: 50,
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
for (let i = 0; i < targetImages.length; i++) {
|
|
112
|
-
this.data[i].trackingData = trackingDataList[i];
|
|
113
|
-
}
|
|
114
|
-
resolve(this.data);
|
|
115
|
-
} catch (error) {
|
|
116
|
-
reject(error);
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// not exporting imageList because too large. rebuild this using targetImage
|
|
122
|
-
exportData() {
|
|
123
|
-
const dataList = [];
|
|
124
|
-
for (let i = 0; i < this.data.length; i++) {
|
|
125
|
-
dataList.push({
|
|
126
|
-
//targetImage: this.data[i].targetImage,
|
|
127
|
-
targetImage: {
|
|
128
|
-
width: this.data[i].targetImage.width,
|
|
129
|
-
height: this.data[i].targetImage.height,
|
|
130
|
-
},
|
|
131
|
-
trackingData: this.data[i].trackingData,
|
|
132
|
-
matchingData: this.data[i].matchingData,
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
const buffer = msgpack.encode({
|
|
136
|
-
v: CURRENT_VERSION,
|
|
137
|
-
dataList,
|
|
138
|
-
});
|
|
139
|
-
return buffer;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
importData(buffer) {
|
|
143
|
-
const content = msgpack.decode(new Uint8Array(buffer));
|
|
144
|
-
//console.log("import", content);
|
|
145
|
-
|
|
146
|
-
if (!content.v || content.v !== CURRENT_VERSION) {
|
|
147
|
-
console.error("Your compiled .mind might be outdated. Please recompile");
|
|
148
|
-
return [];
|
|
149
|
-
}
|
|
150
|
-
const { dataList } = content;
|
|
151
|
-
this.data = [];
|
|
152
|
-
for (let i = 0; i < dataList.length; i++) {
|
|
153
|
-
this.data.push({
|
|
154
|
-
targetImage: dataList[i].targetImage,
|
|
155
|
-
trackingData: dataList[i].trackingData,
|
|
156
|
-
matchingData: dataList[i].matchingData,
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
return this.data;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
createProcessCanvas() {
|
|
163
|
-
// sub-class implements
|
|
164
|
-
console.warn("missing createProcessCanvas implementation");
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
compileTrack() {
|
|
168
|
-
// sub-class implements
|
|
169
|
-
console.warn("missing compileTrack implementation");
|
|
170
|
-
return Promise.resolve([]);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
const _extractMatchingFeatures = async (imageList, doneCallback) => {
|
|
175
|
-
const keyframes = [];
|
|
176
|
-
for (let i = 0; i < imageList.length; i++) {
|
|
177
|
-
const image = imageList[i];
|
|
178
|
-
// TODO: can improve performance greatly if reuse the same detector. just need to handle resizing the kernel outputs
|
|
179
|
-
const detector = new Detector(image.width, image.height);
|
|
180
|
-
|
|
181
|
-
await tf.nextFrame();
|
|
182
|
-
tf.tidy(() => {
|
|
183
|
-
//const inputT = tf.tensor(image.data, [image.data.length]).reshape([image.height, image.width]);
|
|
184
|
-
const inputT = tf
|
|
185
|
-
.tensor(image.data, [image.data.length], "float32")
|
|
186
|
-
.reshape([image.height, image.width]);
|
|
187
|
-
//const ps = detector.detectImageData(image.data);
|
|
188
|
-
const { featurePoints: ps } = detector.detect(inputT);
|
|
189
|
-
|
|
190
|
-
const maximaPoints = ps.filter((p) => p.maxima);
|
|
191
|
-
const minimaPoints = ps.filter((p) => !p.maxima);
|
|
192
|
-
const maximaPointsCluster = hierarchicalClusteringBuild({ points: maximaPoints });
|
|
193
|
-
const minimaPointsCluster = hierarchicalClusteringBuild({ points: minimaPoints });
|
|
194
|
-
|
|
195
|
-
keyframes.push({
|
|
196
|
-
maximaPoints,
|
|
197
|
-
minimaPoints,
|
|
198
|
-
maximaPointsCluster,
|
|
199
|
-
minimaPointsCluster,
|
|
200
|
-
width: image.width,
|
|
201
|
-
height: image.height,
|
|
202
|
-
scale: image.scale,
|
|
203
|
-
});
|
|
204
|
-
doneCallback(i);
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
return keyframes;
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
export { CompilerBase };
|
package/src/compiler/compiler.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { CompilerBase } from "./compiler-base.js";
|
|
2
|
-
import CompilerWorker from "./compiler.worker.js?worker&inline";
|
|
3
|
-
|
|
4
|
-
export class Compiler extends CompilerBase {
|
|
5
|
-
createProcessCanvas(img) {
|
|
6
|
-
const processCanvas = document.createElement("canvas");
|
|
7
|
-
processCanvas.width = img.width;
|
|
8
|
-
processCanvas.height = img.height;
|
|
9
|
-
return processCanvas;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
compileTrack({ progressCallback, targetImages, basePercent }) {
|
|
13
|
-
return new Promise((resolve) => {
|
|
14
|
-
const worker = new CompilerWorker();
|
|
15
|
-
worker.onmessage = (e) => {
|
|
16
|
-
if (e.data.type === "progress") {
|
|
17
|
-
progressCallback(basePercent + (e.data.percent * basePercent) / 100);
|
|
18
|
-
} else if (e.data.type === "compileDone") {
|
|
19
|
-
resolve(e.data.list);
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
worker.postMessage({ type: "compile", targetImages });
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { extractTrackingFeatures } from "./tracker/extract-utils.js";
|
|
2
|
-
import { buildTrackingImageList } from "./image-list.js";
|
|
3
|
-
|
|
4
|
-
onmessage = (msg) => {
|
|
5
|
-
const { data } = msg;
|
|
6
|
-
if (data.type === "compile") {
|
|
7
|
-
//console.log("worker compile...");
|
|
8
|
-
const { targetImages } = data;
|
|
9
|
-
const percentPerImage = 100.0 / targetImages.length;
|
|
10
|
-
let percent = 0.0;
|
|
11
|
-
const list = [];
|
|
12
|
-
for (let i = 0; i < targetImages.length; i++) {
|
|
13
|
-
const targetImage = targetImages[i];
|
|
14
|
-
const imageList = buildTrackingImageList(targetImage);
|
|
15
|
-
const percentPerAction = percentPerImage / imageList.length;
|
|
16
|
-
|
|
17
|
-
//console.log("compiling tracking...", i);
|
|
18
|
-
const trackingData = extractTrackingFeatures(imageList, () => {
|
|
19
|
-
//console.log("done tracking", i, index);
|
|
20
|
-
percent += percentPerAction;
|
|
21
|
-
postMessage({ type: "progress", percent });
|
|
22
|
-
});
|
|
23
|
-
list.push(trackingData);
|
|
24
|
-
}
|
|
25
|
-
postMessage({
|
|
26
|
-
type: "compileDone",
|
|
27
|
-
list,
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
};
|