Skip to content

Commit e3f52f9

Browse files
Merge pull request #396 from changy1105/master
chore(paddlejs-core): fix Memory leak #387
2 parents 1555bcb + ea197a7 commit e3f52f9

File tree

10 files changed

+81
-47
lines changed

10 files changed

+81
-47
lines changed

packages/paddlejs-backend-webgl/src/backend.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ export default class WebGLBackend extends PaddlejsBackend {
139139
this.program = program;
140140
this.render(opData, isRendered, index, isPacked);
141141
});
142-
142+
opData.tensorData = null;
143143
if (query) {
144144
this.queryList.push({ name: opData.name, query, count: 1 });
145145
query = queryProcess.endQuery(this.gl, this.glVersion, query);

packages/paddlejs-core/src/commons/utils.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,26 @@ export function traverseVars(vars, callback) {
106106
Object.keys(vars).forEach(key => {
107107
callback(vars[key]);
108108
});
109-
}
109+
}
110+
111+
/**
112+
* delete useless data
113+
* @param {Object} model
114+
*/
115+
export function delUselessData(model) {
116+
model.ops = null;
117+
if (model.vars instanceof Array) {
118+
for (let i = 0; i < model.vars.length; i++) {
119+
if (model.vars[i].data) {
120+
delete model.vars[i].data;
121+
}
122+
}
123+
return;
124+
}
125+
for (const name in model.vars) {
126+
if (model.vars[name].data) {
127+
delete model.vars[name].data;
128+
}
129+
}
130+
}
131+

packages/paddlejs-core/src/runner.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ import { Model, RunnerConfig, ModelOp, InputFeed, ModelVar, GraphType, FeedShape
44
import OpData from './opFactory/opDataBuilder';
55
import Tensor from './opFactory/tensor';
66
import { GLOBALS } from './globals';
7-
import { getGlobalInterface, findVarByKey, AddItemToVars } from './commons/utils';
7+
import {
8+
getGlobalInterface,
9+
findVarByKey,
10+
AddItemToVars,
11+
delUselessData
12+
} from './commons/utils';
813
import MediaProcessor from './mediaProcessor';
914
import env from './env';
1015

@@ -111,6 +116,7 @@ export default class Runner {
111116
op.opData = opData;
112117
}
113118
});
119+
delUselessData(this.model);
114120
}
115121

116122
async preheat() {

packages/paddlejs-mediapipe/opencv/README.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,20 @@ Opencv3.4 contains most of the commonly used APIs, supporting cv.boxPoints api.
1111

1212
# opencv_ocr.js
1313

14-
Encapsulate the opencv API used by ocr module.
14+
Encapsulate the opencv API used by ocr module, Containing the following api:
15+
```javascript
16+
[
17+
'findContours',
18+
'minAreaRect',
19+
'boxPoints',
20+
'fillPoly',
21+
'getPerspectiveTransform',
22+
'warpPerspective',
23+
'getRotationMatrix2D',
24+
'warpAffine',
25+
'resize'
26+
]
27+
```
1528

1629
# modules
1730
OpenCV modules:

packages/paddlejs-mediapipe/opencv/README_cn.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,20 @@ opencv3.4版本,包含大多数常用api,增加 cv.boxPoints api。
1111

1212
# opencv_ocr.js
1313

14-
封装ocr模块所用到的opencv api。
14+
封装ocr模块所用到的opencv api,含有如下api:
15+
```javascript
16+
[
17+
'findContours',
18+
'minAreaRect',
19+
'boxPoints',
20+
'fillPoly',
21+
'getPerspectiveTransform',
22+
'warpPerspective',
23+
'getRotationMatrix2D',
24+
'warpAffine',
25+
'resize'
26+
]
27+
```
1528

1629
# 模块
1730

packages/paddlejs-mediapipe/opencv/library/opencv_ocr.js

Lines changed: 4 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/paddlejs-mediapipe/opencv/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"name": "@paddlejs-mediapipe/opencv",
3-
"version": "0.0.3",
3+
"version": "0.0.4",
44
"description": "lightweight opencv.js",
55
"main": "library/",
66
"scripts": {
77
"test": "echo \"Error: no test specified\" && exit 1"
88
},
99
"keywords": [
10-
"opencv", "blur", "core"
10+
"opencv", "blur", "core", "ocr"
1111
],
1212
"author": "",
1313
"license": "ISC"

packages/paddlejs-models/ocr/package-lock.json

Lines changed: 13 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/paddlejs-models/ocr/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"author": "",
1111
"license": "ISC",
1212
"dependencies": {
13-
"@paddlejs-mediapipe/opencv": "0.0.3",
13+
"@paddlejs-mediapipe/opencv": "0.0.4",
1414
"@paddlejs/paddlejs-backend-webgl": "^1.1.15",
1515
"@paddlejs/paddlejs-core": "^2.1.15"
1616
},

packages/paddlejs-models/ocr/src/index.ts

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* @file ocr_rec model
33
*/
44

5-
import { Runner, Transformer, env } from '@paddlejs/paddlejs-core';
5+
import { Runner, env } from '@paddlejs/paddlejs-core';
66
import '@paddlejs/paddlejs-backend-webgl';
77
import DBProcess from './dbPostprocess';
88
import RecProcess from './recPostprocess';
@@ -28,22 +28,6 @@ const canvas_rec = document.createElement('canvas') as HTMLCanvasElement;
2828
let detectRunner = null as Runner;
2929
let recRunner = null as Runner;
3030

31-
class OptModel extends Transformer {
32-
constructor() {
33-
super('OptModel');
34-
}
35-
36-
transform(...args: any) {
37-
const [ops] = args;
38-
for (let opIndex = 0; opIndex < ops.length; opIndex++) {
39-
const op = ops[opIndex];
40-
if (op.type === 'pool2d' && op.attrs.pooling_type === 'avg') {
41-
op.type += '_avg';
42-
}
43-
}
44-
}
45-
}
46-
4731
initCanvas(canvas_det);
4832
initCanvas(canvas_rec);
4933

@@ -75,10 +59,7 @@ export async function init(detCustomModel = null, recCustomModel = null) {
7559
mean: [0.5, 0.5, 0.5],
7660
std: [0.5, 0.5, 0.5],
7761
bgr: true,
78-
webglFeedProcess: true,
79-
plugins: {
80-
preTransforms: [new OptModel()]
81-
}
62+
webglFeedProcess: true
8263
});
8364
const recInit = recRunner.init();
8465

0 commit comments

Comments
 (0)