Files
FastDeploy/examples/application/js/package/packages/paddlejs-models/gesture/src/index.ts
chenqianhe f2619b0546 [Other] Refactor js submodule (#415)
* Refactor js submodule

* Remove change-log

* Update ocr module

* Update ocr-detection module

* Update ocr-detection module

* Remove change-log
2022-10-23 14:05:13 +08:00

74 lines
2.1 KiB
TypeScript

/**
* @file gesture model
*/
import { Runner } from '@paddlejs/paddlejs-core';
import '@paddlejs/paddlejs-backend-webgl';
import WarpAffine from './warpAffine';
import DetectProcess from './detectProcess';
import LMProcess from './LMProcess';
import anchor from './anchor_small.txt';
let box = null;
let detectRunner = null as Runner;
let recRunner = null as Runner;
let anchorResults = null;
const detFeedShape = 256;
const canvas = document.createElement('canvas') as HTMLCanvasElement;
initCanvas();
function initCanvas() {
canvas.width = detFeedShape;
canvas.height = detFeedShape;
canvas.style.position = 'absolute';
canvas.style.top = '0';
canvas.style.left = '0';
canvas.style.zIndex = '-1';
canvas.style.opacity = '0';
document.body.appendChild(canvas);
}
export async function load() {
anchorResults = anchor.replace(/\s+/g, ',').split(',').map(item => +item);
detectRunner = new Runner({
modelPath: 'https://paddlejs.bj.bcebos.com/models/fuse/gesture/gesture_det_fuse_activation/model.json',
webglFeedProcess: true
});
const detectInit = detectRunner.init();
recRunner = new Runner({
modelPath: 'https://paddlejs.bj.bcebos.com/models/fuse/gesture/gesture_rec_fuse_activation/model.json'
});
const recInit = recRunner.init();
WarpAffine.init({
width: 224,
height: 224
});
return await Promise.all([detectInit, recInit]);
}
export async function classify(image): Promise<{ box: string | number[][], type: string }> {
canvas.getContext('2d')!.drawImage(image, 0, 0, detFeedShape, detFeedShape);
const res = await detectRunner.predict(image);
const post = new DetectProcess(res, canvas);
const result = {
box: '',
type: ''
};
box = await post.outputBox(anchorResults);
if (box) {
// 手势框选位置
result.box = box;
const feed = await post.outputFeed(recRunner);
const res2 = await recRunner.predictWithFeed(feed);
const lmProcess = new LMProcess(res2);
lmProcess.output();
// 识别结果
result.type = lmProcess.type || '';
}
return result;
}