@areb0s/ocr-common 1.0.0 → 1.0.1
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/build/models/Detection.js +5 -1
- package/build/models/Detection.js.map +1 -1
- package/build/models/ModelBase.js +15 -9
- package/build/models/ModelBase.js.map +1 -1
- package/build/models/Recognition.js +12 -8
- package/build/models/Recognition.js.map +1 -1
- package/build/types/types.d.ts +1 -1
- package/package.json +7 -2
- package/src/models/Detection.ts +5 -1
- package/src/models/ModelBase.ts +18 -9
- package/src/models/Recognition.ts +15 -8
- package/src/types/types.ts +1 -1
|
@@ -6,7 +6,11 @@ export class Detection extends ModelBase {
|
|
|
6
6
|
static async create({ models, onnxOptions = {}, ...restOptions }) {
|
|
7
7
|
const detectionPath = models?.detectionPath || defaultModels?.detectionPath;
|
|
8
8
|
invariant(detectionPath, 'detectionPath is required');
|
|
9
|
-
const
|
|
9
|
+
const mergedOptions = {
|
|
10
|
+
executionProviders: ['webgpu', 'webgl', 'wasm'],
|
|
11
|
+
...onnxOptions,
|
|
12
|
+
};
|
|
13
|
+
const model = await InferenceSession.create(detectionPath, mergedOptions);
|
|
10
14
|
return new Detection({ model, options: restOptions });
|
|
11
15
|
}
|
|
12
16
|
async run(input, { onnxOptions = {} } = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Detection.js","sourceRoot":"","sources":["../../src/models/Detection.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAEhG,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,MAAM,SAAS,GAAG,EAAE,CAAA;AAEpB,MAAM,OAAO,SAAU,SAAQ,SAAS;IACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,WAAW,EAAsB;QAClF,MAAM,aAAa,GAAG,MAAM,EAAE,aAAa,IAAI,aAAa,EAAE,aAAa,CAAA;QAC3E,SAAS,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"Detection.js","sourceRoot":"","sources":["../../src/models/Detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,19 +15,25 @@ export class ModelBase {
|
|
|
15
15
|
return output;
|
|
16
16
|
}
|
|
17
17
|
#prepareInput(modelData) {
|
|
18
|
-
|
|
18
|
+
// Optimized: avoid copy if already Float32Array
|
|
19
|
+
const input = modelData.data instanceof Float32Array
|
|
20
|
+
? modelData.data
|
|
21
|
+
: Float32Array.from(modelData.data);
|
|
19
22
|
return new Tensor('float32', input, [1, 3, modelData.height, modelData.width]);
|
|
20
23
|
}
|
|
21
24
|
imageToInput(image, { mean = [0, 0, 0], std = [1, 1, 1] }) {
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
const pixelCount = image.data.length / 4;
|
|
26
|
+
// Optimized: use Float32Array directly instead of intermediate arrays
|
|
27
|
+
const newData = new Float32Array(pixelCount * 3);
|
|
28
|
+
// BGR order (model expects BGR)
|
|
29
|
+
const bOffset = 0;
|
|
30
|
+
const gOffset = pixelCount;
|
|
31
|
+
const rOffset = pixelCount * 2;
|
|
32
|
+
for (let i = 0, p = 0; i < image.data.length; i += 4, p++) {
|
|
33
|
+
newData[rOffset + p] = (image.data[i] / 255 - mean[0]) / std[0]; // R
|
|
34
|
+
newData[gOffset + p] = (image.data[i + 1] / 255 - mean[1]) / std[1]; // G
|
|
35
|
+
newData[bOffset + p] = (image.data[i + 2] / 255 - mean[2]) / std[2]; // B
|
|
29
36
|
}
|
|
30
|
-
const newData = [...B, ...G, ...R];
|
|
31
37
|
return {
|
|
32
38
|
data: newData,
|
|
33
39
|
width: image.width,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelBase.js","sourceRoot":"","sources":["../../src/models/ModelBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmD,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAW5F,MAAM,OAAO,SAAS;IACpB,OAAO,CAAkB;IACzB,MAAM,CAAkB;IAExB,YAAY,EAAE,KAAK,EAAE,OAAO,EAA2B;QACrD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EACb,SAAS,EACT,WAAW,GAAG,EAAE,GAC0D;QAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CACnC;YACE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK;SACnC,EACD,WAAW,CACZ,CAAA;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;QAClD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,aAAa,CAAC,SAAoB;QAChC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"ModelBase.js","sourceRoot":"","sources":["../../src/models/ModelBase.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,11 @@ export class Recognition extends ModelBase {
|
|
|
8
8
|
invariant(recognitionPath, 'recognitionPath is required');
|
|
9
9
|
const dictionaryPath = models?.dictionaryPath || defaultModels?.dictionaryPath;
|
|
10
10
|
invariant(dictionaryPath, 'dictionaryPath is required');
|
|
11
|
-
const
|
|
11
|
+
const mergedOptions = {
|
|
12
|
+
executionProviders: ['webgpu', 'webgl', 'wasm'],
|
|
13
|
+
...onnxOptions,
|
|
14
|
+
};
|
|
15
|
+
const model = await InferenceSession.create(recognitionPath, mergedOptions);
|
|
12
16
|
const dictionaryText = await FileUtils.read(dictionaryPath);
|
|
13
17
|
const dictionary = [...dictionaryText.split('\n'), ' '];
|
|
14
18
|
return new Recognition({ model, options: restOptions }, dictionary);
|
|
@@ -36,14 +40,14 @@ export class Recognition extends ModelBase {
|
|
|
36
40
|
});
|
|
37
41
|
return modelData;
|
|
38
42
|
}));
|
|
39
|
-
|
|
43
|
+
// Optimized: run all model inferences in parallel
|
|
40
44
|
// console.time('Recognition')
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const lines =
|
|
46
|
-
allLines.
|
|
45
|
+
const outputs = await Promise.all(modelDatas.map((modelData) => this.runModel({ modelData, onnxOptions })));
|
|
46
|
+
// Decode all outputs (maintains order)
|
|
47
|
+
const allLines = [];
|
|
48
|
+
for (let i = outputs.length - 1; i >= 0; i--) {
|
|
49
|
+
const lines = this.decodeText(outputs[i]);
|
|
50
|
+
allLines.push(...lines);
|
|
47
51
|
}
|
|
48
52
|
// console.timeEnd('Recognition')
|
|
49
53
|
const result = calculateBox({ lines: allLines, lineImages });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Recognition.js","sourceRoot":"","sources":["../../src/models/Recognition.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE5E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,MAAM,OAAO,WAAY,SAAQ,SAAS;IACxC,WAAW,CAAY;IAEvB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,WAAW,EAAsB;QAClF,MAAM,eAAe,GAAG,MAAM,EAAE,eAAe,IAAI,aAAa,EAAE,eAAe,CAAA;QACjF,SAAS,CAAC,eAAe,EAAE,6BAA6B,CAAC,CAAA;QACzD,MAAM,cAAc,GAAG,MAAM,EAAE,cAAc,IAAI,aAAa,EAAE,cAAc,CAAA;QAC9E,SAAS,CAAC,cAAc,EAAE,4BAA4B,CAAC,CAAA;QACvD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"Recognition.js","sourceRoot":"","sources":["../../src/models/Recognition.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE5E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,MAAM,OAAO,WAAY,SAAQ,SAAS;IACxC,WAAW,CAAY;IAEvB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,WAAW,EAAsB;QAClF,MAAM,eAAe,GAAG,MAAM,EAAE,eAAe,IAAI,aAAa,EAAE,eAAe,CAAA;QACjF,SAAS,CAAC,eAAe,EAAE,6BAA6B,CAAC,CAAA;QACzD,MAAM,cAAc,GAAG,MAAM,EAAE,cAAc,IAAI,aAAa,EAAE,cAAc,CAAA;QAC9E,SAAS,CAAC,cAAc,EAAE,4BAA4B,CAAC,CAAA;QACvD,MAAM,aAAa,GAAG;YACpB,kBAAkB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;YAC/C,GAAG,WAAW;SACf,CAAA;QACD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;QAC3E,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC3D,MAAM,UAAU,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;QACvD,OAAO,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,UAAU,CAAC,CAAA;IACrE,CAAC;IAED,YAAY,OAAgC,EAAE,UAAsB;QAClE,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,WAAW,GAAG,UAAU,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,UAAuB,EAAE,EAAE,WAAW,GAAG,EAAE,KAA0D,EAAE;QAC/G,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG;QAClC,mCAAmC;QACnC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE;YACxC,8BAA8B;YAC9B,uBAAuB;YACvB,yDAAyD;YACzD,MAAM,KAAK,GAAG,MAAO,SAAS,CAAC,KAAa,CAAC,MAAM,CAAC;gBAClD,MAAM,EAAE,EAAE;aACX,CAAC,CAAA;YACF,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAC,CAAA;YAC1D,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,aAAa,KAAK,cAAc,CAAC,CAAA;YAExD,qCAAqC;YACrC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;YACzC,yBAAyB;YACzB,wBAAwB;aACzB,CAAC,CAAA;YACF,OAAO,SAAS,CAAA;QAClB,CAAC,CAAC,CACH,CAAA;QAED,kDAAkD;QAClD,8BAA8B;QAC9B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC,CACzE,CAAA;QAED,uCAAuC;QACvC,MAAM,QAAQ,GAAW,EAAE,CAAA;QAC3B,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YACzC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAA;QACzB,CAAC;QACD,iCAAiC;QACjC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAA;QAC5D,OAAO,MAAM,CAAA;IACf,CAAC;IAED,UAAU,CAAC,MAAc;QACvB,MAAM,IAAI,GAAG,MAAM,CAAA;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,IAAI,GAAW,EAAE,CAAA;QACvB,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,MAAM,QAAQ,GAAa,EAAE,CAAA;YAC7B,MAAM,SAAS,GAAa,EAAE,CAAA;YAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;gBAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAiB,CAAA;gBAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAA;gBAChF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;gBACrC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACtB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACvB,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;YAC9D,EAAE,EAAE,CAAA;QACN,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAED,SAAS,MAAM,CAAC,UAAoB,EAAE,SAAmB,EAAE,QAAkB,EAAE,iBAA0B;IACvG,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,CAAA;IACzB,MAAM,QAAQ,GAAG,EAAE,CAAA;IACnB,MAAM,QAAQ,GAAG,EAAE,CAAA;IACnB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QAChD,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC;YACpC,SAAQ;QACV,CAAC;QACD,IAAI,iBAAiB,EAAE,CAAC;YACtB,IAAI,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrD,SAAQ;YACV,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;QAC9B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IACD,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACxB,IAAI,GAAG,GAAG,CAAC,CAAA;QACX,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,GAAG,IAAI,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;QACF,IAAI,GAAG,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAA;IAC9B,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AACvB,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,KAAK,EACL,UAAU,GAIX;IACC,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,MAAM,GAAG,GAAG,UAAU,CAAA;IACtB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QAClD,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YACX,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACb,CAAC;QACD,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IACD,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAA;IAChD,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC5B,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,MAAM,WAAW,GAAW,EAAE,CAAA;IAC9B,MAAM,OAAO,GAAyB,IAAI,GAAG,EAAE,CAAA;IAC/C,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAQ,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAA;QACjC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,YAAY,GAAG,6BAA6B,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAEvE,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,EAAE,CAAA;QAChB,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,SAAQ;YACV,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;YACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACrB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAA;QACnB,CAAC;QACD,IAAI,SAAS,GAAG,SAAS,CAAA;QACzB,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACpF,CAAC;QACD,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM;YACzB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YACrB,GAAG,EAAE,SAAS;SACf,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAgB;IAC9C,IAAI,WAAW,GAAG,CAAC,CAAA;IACnB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,AAAD,EAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAA;QAC9B,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,CAAA;QACtB,WAAW,IAAI,MAAM,CAAA;IACvB,CAAC;IACD,OAAO,WAAW,GAAG,KAAK,CAAC,MAAM,CAAA;AACnC,CAAC;AAED,SAAS,6BAA6B,CAAC,KAAgB;IACrD,MAAM,aAAa,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAA;IACnD,MAAM,MAAM,GAAgB,EAAE,CAAA;IAC9B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,AAAD,EAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAA;QAC9B,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAC9B,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,AAAD,EAAG,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YACzC,MAAM,YAAY,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;YAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,aAAa,GAAG,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;QACF,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAClB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACf,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACf,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE9C,OAAO,MAAM,CAAA;AACf,CAAC"}
|
package/build/types/types.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export type ImageRawData = {
|
|
|
19
19
|
*/
|
|
20
20
|
export type BrowserImageInput = string | ImageRawData | ImageBitmap | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement;
|
|
21
21
|
export type ModelData = {
|
|
22
|
-
data: number[] | Uint8Array;
|
|
22
|
+
data: number[] | Uint8Array | Float32Array;
|
|
23
23
|
width: number;
|
|
24
24
|
height: number;
|
|
25
25
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@areb0s/ocr-common",
|
|
3
3
|
"description": "Fork of @gutenye/ocr-common with ImageBitmap support. Shared OCR library for Browser/Node based on PaddleOCR and ONNX runtime.",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -21,7 +21,12 @@
|
|
|
21
21
|
"default": "./build/backend/splitIntoLineImages.js"
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
|
-
"files": [
|
|
24
|
+
"files": [
|
|
25
|
+
"src",
|
|
26
|
+
"build",
|
|
27
|
+
"tsconfig.json",
|
|
28
|
+
"!**/__tests__"
|
|
29
|
+
],
|
|
25
30
|
"scripts": {
|
|
26
31
|
"build": "npx tsc --project tsconfig.build.json && npx tsc-alias --project tsconfig.build.json",
|
|
27
32
|
"prepublishOnly": "npm run build"
|
package/src/models/Detection.ts
CHANGED
|
@@ -10,7 +10,11 @@ export class Detection extends ModelBase {
|
|
|
10
10
|
static async create({ models, onnxOptions = {}, ...restOptions }: ModelCreateOptions) {
|
|
11
11
|
const detectionPath = models?.detectionPath || defaultModels?.detectionPath
|
|
12
12
|
invariant(detectionPath, 'detectionPath is required')
|
|
13
|
-
const
|
|
13
|
+
const mergedOptions = {
|
|
14
|
+
executionProviders: ['webgpu', 'webgl', 'wasm'],
|
|
15
|
+
...onnxOptions,
|
|
16
|
+
}
|
|
17
|
+
const model = await InferenceSession.create(detectionPath, mergedOptions)
|
|
14
18
|
return new Detection({ model, options: restOptions })
|
|
15
19
|
}
|
|
16
20
|
|
package/src/models/ModelBase.ts
CHANGED
|
@@ -34,20 +34,29 @@ export class ModelBase {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
#prepareInput(modelData: ModelData) {
|
|
37
|
-
|
|
37
|
+
// Optimized: avoid copy if already Float32Array
|
|
38
|
+
const input = modelData.data instanceof Float32Array
|
|
39
|
+
? modelData.data
|
|
40
|
+
: Float32Array.from(modelData.data)
|
|
38
41
|
return new Tensor('float32', input, [1, 3, modelData.height, modelData.width])
|
|
39
42
|
}
|
|
40
43
|
|
|
41
44
|
imageToInput(image: ImageRaw, { mean = [0, 0, 0], std = [1, 1, 1] }: ReshapeOptions): ModelData {
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
const pixelCount = image.data.length / 4
|
|
46
|
+
// Optimized: use Float32Array directly instead of intermediate arrays
|
|
47
|
+
const newData = new Float32Array(pixelCount * 3)
|
|
48
|
+
|
|
49
|
+
// BGR order (model expects BGR)
|
|
50
|
+
const bOffset = 0
|
|
51
|
+
const gOffset = pixelCount
|
|
52
|
+
const rOffset = pixelCount * 2
|
|
53
|
+
|
|
54
|
+
for (let i = 0, p = 0; i < image.data.length; i += 4, p++) {
|
|
55
|
+
newData[rOffset + p] = (image.data[i] / 255 - mean[0]) / std[0] // R
|
|
56
|
+
newData[gOffset + p] = (image.data[i + 1] / 255 - mean[1]) / std[1] // G
|
|
57
|
+
newData[bOffset + p] = (image.data[i + 2] / 255 - mean[2]) / std[2] // B
|
|
49
58
|
}
|
|
50
|
-
|
|
59
|
+
|
|
51
60
|
return {
|
|
52
61
|
data: newData,
|
|
53
62
|
width: image.width,
|
|
@@ -12,7 +12,11 @@ export class Recognition extends ModelBase {
|
|
|
12
12
|
invariant(recognitionPath, 'recognitionPath is required')
|
|
13
13
|
const dictionaryPath = models?.dictionaryPath || defaultModels?.dictionaryPath
|
|
14
14
|
invariant(dictionaryPath, 'dictionaryPath is required')
|
|
15
|
-
const
|
|
15
|
+
const mergedOptions = {
|
|
16
|
+
executionProviders: ['webgpu', 'webgl', 'wasm'],
|
|
17
|
+
...onnxOptions,
|
|
18
|
+
}
|
|
19
|
+
const model = await InferenceSession.create(recognitionPath, mergedOptions)
|
|
16
20
|
const dictionaryText = await FileUtils.read(dictionaryPath)
|
|
17
21
|
const dictionary = [...dictionaryText.split('\n'), ' ']
|
|
18
22
|
return new Recognition({ model, options: restOptions }, dictionary)
|
|
@@ -45,14 +49,17 @@ export class Recognition extends ModelBase {
|
|
|
45
49
|
}),
|
|
46
50
|
)
|
|
47
51
|
|
|
48
|
-
|
|
52
|
+
// Optimized: run all model inferences in parallel
|
|
49
53
|
// console.time('Recognition')
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
const outputs = await Promise.all(
|
|
55
|
+
modelDatas.map((modelData) => this.runModel({ modelData, onnxOptions }))
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
// Decode all outputs (maintains order)
|
|
59
|
+
const allLines: Line[] = []
|
|
60
|
+
for (let i = outputs.length - 1; i >= 0; i--) {
|
|
61
|
+
const lines = this.decodeText(outputs[i])
|
|
62
|
+
allLines.push(...lines)
|
|
56
63
|
}
|
|
57
64
|
// console.timeEnd('Recognition')
|
|
58
65
|
const result = calculateBox({ lines: allLines, lineImages })
|
package/src/types/types.ts
CHANGED