-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
posedetector.js
98 lines (81 loc) · 2.71 KB
/
posedetector.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*
* Instantiating the ml object with some settings
* settings:
* - media: provide the mediaId of the video element in the markup
* - canvas: provide the canvasId of the canvas element in the markup
* - filter: set to true if you want to extract the body image from the background
* - hideVideo: hides the video
* - brain: {...} defines the Neural Network settings
*/
var myMl = new MlCore();
/*
* Using Neural Networks to train recognizing body poses
* Neural Network Methods
* - @constructor: define the brain by specifying number of inputs, outputs, debug mode and the type of task
* - @addData: adds sample data for training the brain
* - @addImage: adds sample image data for training the brain
* - @train: trains the model and upon results automatically starts classifiying
* - @classify: classifies the detections
* - @normalizeData: normalizes the data (to be used when continuous data and not discrete)
* - @save: saves the model
* - @load: loads the saved model
*
*/
let dataButton;
let dataLabel;
let trainButton;
let saveButton;
let loadButton;
let classificationP;
let listElement;
let listItem;
let message = 'waiting to train model';
let appResources = env.home + 'public/' + env.appName + '/resources/models/';
myMl.detect((myMl) => {
myMl.drawKeypoints(myMl);
});
function setup() {
myMl.toP5(myMl);
// Add status text
listElement = createElement('ul');
listElement.parent('infobar');
listElement.id('status');
classificationP = createElement('li', message);
classificationP.id('message');
classificationP.parent('status');
// ml UI
listElement = createElement('ul');
listElement.parent('infobar');
listElement.id('mlUI');
// add select to mlUI
dataLabel = createSelect();
dataLabel.option('Crouch');
dataLabel.option('Stand');
listItem = createElement('li')
listItem.child(dataLabel);
listItem.parent('mlUI');
// add add data button
listItem = createElement('li');
listItem.parent('mlUI');
dataButton = createButton('add example');
listItem.child(dataButton);
dataButton.mousePressed(() => myMl.addData(myMl, dataLabel.value()));
// add train button
trainButton = createButton('train');
trainButton.parent('apps');
trainButton.mousePressed(() => myMl.train(myMl, { epochs: 25}));
// add a save button
saveButton = createButton('save model');
saveButton.parent('apps');
saveButton.mousePressed(() => myMl.save('model', console.log('saved')));
// add a load button
loadButton = createButton('load model');
loadButton.parent('apps');
loadButton.mousePressed(() => myMl.load(appResources + 'model.json', () => {
console.log('loaded');
myMl.classify(myMl);
}));
}
function draw() {
classificationP.html(myMl.brain && myMl.brain.results? myMl.brain.results : message);
}