Skip to content

Commit 328b94b

Browse files
Merge pull request #225 from JingyuanZhang/master
feat(models&humanseg): support humanseg model using gpu pipeline
2 parents 38307cd + d19df50 commit 328b94b

File tree

12 files changed

+8339
-34
lines changed

12 files changed

+8339
-34
lines changed

packages/paddlejs-models/humanseg/README.md

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import * as humanseg from '@paddlejs-models/humanseg';
1919
await humanseg.load();
2020

2121
// use 288x160 shape model, preheat and predict faster with a little loss of precision
22-
// await humanseg.load(true, true);
22+
// await humanseg.load(true, true);
2323

2424
// get the gray value [2, 398, 224] or [2, 288, 160];
2525
const { data } = await humanseg.getGrayValue(img);
@@ -37,7 +37,38 @@ humanseg.drawHumanSeg(data, canvas2) ;
3737

3838
// draw the mask with background
3939
const canvas3 = document.getElementById('mask') as HTMLCanvasElement;
40-
humanseg.drawMask(data, back_canvas, canvas3);
40+
humanseg.drawMask(data, canvas3, back_canvas);
41+
42+
```
43+
44+
## gpu pipeline
45+
46+
```js
47+
48+
// 引入 humanseg sdk
49+
import * as humanseg from '@paddlejs-models/humanseg/lib/index_gpu';
50+
51+
// load humanseg model, use 398x224 shape model, and preheat
52+
await humanseg.load();
53+
54+
// use 288x160 shape model, preheat and predict faster with a little loss of precision
55+
// await humanseg.load(true, true);
56+
57+
58+
// background canvas
59+
const back_canvas = document.getElementById('background') as HTMLCanvasElement;
60+
61+
// draw human segmentation
62+
const canvas1 = document.getElementById('back') as HTMLCanvasElement;
63+
await humanseg.drawHumanSeg(input, canvas1, back_canvas) ;
64+
65+
// blur background
66+
const canvas2 = document.getElementById('blur') as HTMLCanvasElement;
67+
await humanseg.drawHumanSeg(input, canvas2) ;
68+
69+
// draw the mask with background
70+
const canvas3 = document.getElementById('mask') as HTMLCanvasElement;
71+
await humanseg.drawMask(input, canvas3, back_canvas);
4172

4273
```
4374

packages/paddlejs-models/humanseg/README_cn.md

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import * as humanseg from '@paddlejs-models/humanseg';
1616
await humanseg.load();
1717

1818
// 指定下载更轻量模型, 该模型 shape 288x160,预测过程会更快,但会有少许精度损失
19-
// await humanseg.load(true, true);
19+
// await humanseg.load(true, true);
2020

2121

2222
// 获取分割后的像素 alpha 值,大小为 [2, 398, 224] 或者 [2, 288, 160]
@@ -35,7 +35,38 @@ humanseg.drawHumanSeg(data, canvas2) ;
3535

3636
// 绘制人型遮罩,在新背景上隐藏人像
3737
const canvas3 = document.getElementById('mask') as HTMLCanvasElement;
38-
humanseg.drawMask(data, back_canvas, canvas3);
38+
humanseg.drawMask(data, canvas3, back_canvas);
39+
40+
```
41+
42+
## gpu pipeline
43+
44+
```js
45+
46+
// 引入 humanseg sdk
47+
import * as humanseg from '@paddlejs-models/humanseg/lib/index_gpu';
48+
49+
// 默认下载 398x224 shape 的模型,默认执行预热
50+
await humanseg.load();
51+
52+
// 指定下载更轻量模型, 该模型 shape 288x160,预测过程会更快,但会有少许精度损失
53+
// await humanseg.load(true, true);
54+
55+
56+
// 获取 background canvas
57+
const back_canvas = document.getElementById('background') as HTMLCanvasElement;
58+
59+
// 背景替换, 使用 back_canvas 作为新背景实现背景替换
60+
const canvas1 = document.getElementById('back') as HTMLCanvasElement;
61+
await humanseg.drawHumanSeg(input, canvas1, back_canvas) ;
62+
63+
// 背景虚化
64+
const canvas2 = document.getElementById('blur') as HTMLCanvasElement;
65+
await humanseg.drawHumanSeg(input, canvas2) ;
66+
67+
// 绘制人型遮罩,在新背景上隐藏人像
68+
const canvas3 = document.getElementById('mask') as HTMLCanvasElement;
69+
await humanseg.drawMask(input, canvas3, back_canvas);
3970

4071
```
4172

packages/paddlejs-models/humanseg/demo/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
/**
2+
* @file humanseg model use cpu and gpu mix pipeline
3+
*/
4+
15
import * as humanseg from '../src';
26

37
async function load() {
@@ -31,7 +35,7 @@ async function run(input) {
3135

3236
humanseg.blurBackground(data, blur_canvas);
3337
humanseg.drawHumanSeg(data, back_canvas, background_canvas);
34-
humanseg.drawMask(data, background_canvas, mask_canvas);
38+
humanseg.drawMask(data, mask_canvas, background_canvas);
3539
}
3640

3741
function selectImage(file) {
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
* @file humanseg model use gpu unique pipeline
3+
*/
4+
5+
6+
import * as humanseg from '../src/index_gpu';
7+
8+
async function load() {
9+
await humanseg.load();
10+
document.getElementById('loading')!.style.display = 'none';
11+
const img = document.getElementById('image') as HTMLImageElement;
12+
run(img);
13+
}
14+
15+
load();
16+
const back_canvas = document.getElementById('back') as HTMLCanvasElement;
17+
const blur_canvas = document.getElementById('blur') as HTMLCanvasElement;
18+
const mask_canvas = document.getElementById('mask') as HTMLCanvasElement;
19+
20+
const background_canvas = document.createElement('canvas');
21+
background_canvas.width = back_canvas.width;
22+
background_canvas.height = back_canvas.height;
23+
24+
const img = new Image();
25+
img.src = './bgImgs/001.jpg';
26+
img.onload = () => {
27+
background_canvas.getContext('2d').drawImage(img, 0, 0, background_canvas.width, background_canvas.height);
28+
};
29+
30+
31+
32+
async function run(input) {
33+
await humanseg.blurBackground(input, blur_canvas);
34+
await humanseg.drawHumanSeg(input, back_canvas, background_canvas);
35+
await humanseg.drawMask(input, mask_canvas, background_canvas);
36+
}
37+
38+
function selectImage(file) {
39+
if (!file.files || !file.files[0]) {
40+
return;
41+
}
42+
const reader = new FileReader();
43+
reader.onload = function (evt) {
44+
const img = document.getElementById('image') as HTMLImageElement;
45+
img.src = evt.target.result as any;
46+
img.onload = function () {
47+
run(img);
48+
};
49+
};
50+
reader.readAsDataURL(file.files[0]);
51+
}
52+
53+
// selectImage
54+
document.getElementById('uploadImg').onchange = function () {
55+
selectImage(this);
56+
};
57+

0 commit comments

Comments
 (0)