Skip to content

Commit 64e07de

Browse files
committed
Initial commit
0 parents  commit 64e07de

20 files changed

+609
-0
lines changed

.gitattributes

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Auto detect text files and perform LF normalization
2+
* text=auto

.vscode/launch.json

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
// Use IntelliSense to learn about possible attributes.
3+
// Hover to view descriptions of existing attributes.
4+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"type": "node",
9+
"request": "launch",
10+
"name": "Launch Program",
11+
"skipFiles": [
12+
"<node_internals>/**"
13+
],
14+
"program": "${file}"
15+
}
16+
]
17+
}

about.html

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<script src="https://cdn.jsdelivr.net/npm/typed.js@2.0.11"></script>
7+
<link rel="stylesheet" href="https://unpkg.com/blocks.css/dist/blocks.min.css" />
8+
<title>About yogAI</title>
9+
<link rel="stylesheet" href="style.css">
10+
</head>
11+
<body>
12+
<div><h1 class= "fixed block" style="width:700px; margin-bottom: 40px; padding:20px; font-size: 100px">About yogAI.</h1></div>
13+
<p class= "fixed block" style="margin-bottom: 40px; padding:20px; font-size: 24px">Hi you! Welcome to yogAI, developed in 2020 by Cristina Maillo. <br><br> I'd first like to thank my . <br>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget orci pretium, placerat ante vitae, finibus ligula. Nulla ac dignissim lacus. Vestibulum lobortis leo lorem. Pellentesque et finibus leo, eu scelerisque metus. Etiam id nulla ac sapien posuere laoreet eget non nibh. Mauris eleifend nunc aliquet nunc ultricies, at scelerisque lectus auctor. Quisque ultrices, purus a dictum scelerisque, urna orci hendrerit est, at vestibulum dolor turpis porttitor odio. Morbi quis lectus sit amet tellus accumsan ultricies in non velit. Sed eget tellus ac ante cursus venenatis. Fusce placerat tristique velit, non tincidunt nisl rutrum nec.</p>
14+
<div><a href="landingPage.html" style="width: 150px"><button class="block" style="width: 150px; height: 60px; font-size: 30px;">🏠 Back</button></a></div>
15+
16+
</body>
17+
<footer>&copy; Copyright & Stuff 2020. By Cristina Maillo. Made With ❤️ & 💧. Please stay home. </footer>
18+
</html>

basic4.json

+1
Large diffs are not rendered by default.

dataCollection.js

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
let video;
2+
let poseNet;
3+
let pose;
4+
let skeleton;
5+
6+
let yogi;
7+
let poseLabel = "";
8+
let targetPose;
9+
let state = "waiting";
10+
11+
function keyPressed() {
12+
if (key == 's') {
13+
yogi.saveData();
14+
} else {
15+
targetPose = key;
16+
console.log(targetPose);
17+
setTimeout(function() {
18+
console.log('collecting');
19+
state = 'collecting';
20+
setTimeout(function() {
21+
console.log('not collecting');
22+
state = 'waiting';
23+
}, 5000);
24+
}, 5000);
25+
}
26+
}
27+
28+
function setup() {
29+
createCanvas(640, 480);
30+
video = createCapture(VIDEO);
31+
video.hide();
32+
poseNet = ml5.poseNet(video, modelLoaded);
33+
poseNet.on('pose', gotPoses);
34+
35+
let options = {
36+
inputs: 34,
37+
outputs: 4,
38+
task: "classification",
39+
debug: true
40+
}
41+
yogi = ml5.neuralNetwork(options);
42+
}
43+
44+
function gotPoses(poses) {
45+
if (poses.length > 0) {
46+
pose = poses[0].pose;
47+
skeleton = poses[0].skeleton;
48+
if (state == 'collecting') {
49+
let inputs = [];
50+
for (let i = 0; i < pose.keypoints.length; i++) {
51+
let x = pose.keypoints[i].position.x;
52+
let y = pose.keypoints[i].position.y;
53+
inputs.push(x);
54+
inputs.push(y);
55+
}
56+
let target = [targetPose];
57+
yogi.addData(inputs, target);
58+
}}}
59+
60+
function modelLoaded() {
61+
console.log('poseNet ready');
62+
}
63+
64+
function draw() {
65+
translate(video.width, 0);
66+
scale(-1,1);
67+
image(video, 0, 0, video.width, video.height);
68+
69+
if (pose) {
70+
for (let i = 0; i < skeleton.length; i++) {
71+
let a = skeleton[i][0];
72+
let b = skeleton[i][1];
73+
strokeWeight(8);
74+
stroke(244, 194, 194);
75+
line(a.position.x, a.position.y, b.position.x, b.position.y);
76+
}
77+
}
78+
79+
}

github.svg

+3
Loading

index.html

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Welcome to yogAI</title>
7+
<link rel="stylesheet" href="style.css">
8+
<link rel="stylesheet" href="https://unpkg.com/blocks.css/dist/blocks.min.css" />
9+
</head>
10+
<body>
11+
<h1 class="fixed block" style="width:28%; text-align:center; padding-left:20px; padding-right: 350px; margin-bottom: 20px">Hello,</h1>
12+
<h1 class="fixed block" style="width:1200px; margin-bottom: 50px; padding-left:20px"> welcome to yogAI.</h1>
13+
14+
<div><a href="instructions.html" style="width: 120px"><li class="block" style="width: 120px; height: 60px; font-size: 30px;">💡Test</li></a></div>
15+
<div><a href="instructions.html" style="width: 150px"><li class="block" style="width: 150px; height: 60px; font-size: 30px;">📖Learn</li></a></div>
16+
<div><a href="https://github.com/cris-maillo/yogAI" target="_blank" style="width: 180px"><li class="block" style="width: 180px; height: 60px; font-size: 30px;"><img src="github.svg" alt="GitHub logo" width="30" height="30" style="margin-top:3px"> Git Hub</li></a></div>
17+
<div><a href="about.html" style="width: 210px"><li class="block" style="width: 210px; height: 60px; font-size: 30px;">😊About Me</li></a></div>
18+
19+
20+
21+
</body>
22+
<footer>&copy; Copyright & Stuff 2020. By Cristina Maillo. Made With ❤️ & 💧. Please stay home. </footer>
23+
</html>

instructions.html

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Instructions</title>
7+
<link rel="stylesheet" href="style.css">
8+
<link rel="stylesheet" href="https://unpkg.com/blocks.css/dist/blocks.min.css" />
9+
</head>
10+
<body>
11+
<h1 class="fixed block" style="width:650px; text-align:center; padding-left:20px; padding-right: 350px; margin-bottom: 50px; font-size: 100px">Instructions</h1>
12+
13+
<div class="buttons">
14+
<div><li class="fixed block" style="width: 60px; height: 60px; font-size: 30px;">1.</li></div>
15+
<div><li class="fixed block" style="width: 60px; height: 60px; font-size: 30px;">2.</li></div>
16+
<div><li class="fixed block" style="width: 60px; height: 60px; font-size: 30px;">3.</li></div>
17+
<div><li></li></div>
18+
</div>
19+
20+
<div class="buttons">
21+
<div><a href="landingPage.html" style="width: 150px"><button class="block" style="width: 150px; height: 60px; font-size: 30px; margin-top: 350px">🏠 Back</button></a></div>
22+
<div></div>
23+
<div><a href="model.html" style="width: 150px"><li class="block" style="width: 150px; height: 60px; font-size: 30px; margin-top:350px">🏁 Start</li></a></div>
24+
<div></div>
25+
</div>
26+
27+
</body>
28+
<footer>&copy; Copyright & Stuff 2020. By Cristina Maillo. Made With ❤️ & 💧. Please stay home. </footer>
29+
</html>

ml5.min.js

+157
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

model.html

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<!DOCTYPE html><html lang="en"><head>
2+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
3+
<script src="p5.min.js"></script>
4+
<script src="p5.dom.min.js"></script>
5+
<script src="p5.min.js"></script>
6+
<script src="p5.sound.min.js"></script>
7+
<script src="ml5.min.js"></script>
8+
<link rel="stylesheet" href="style.css">
9+
<meta charset="utf-8">
10+
</head>
11+
12+
<body>
13+
<h1 class="fixed block" style="width:300px; padding-left:20px; padding-right: 350px; margin-bottom: 20px; font-size: 40px;">💡Test</h1>
14+
15+
<script src="modelDeploy.js">
16+
</script>
17+
18+
</body>
19+
<footer>&copy; Copyright & Stuff 2020. By Cristina Maillo. Made With ❤️ & 💧. Please stay home. </footer></html>

model/model.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"modelTopology":{"class_name":"Sequential","config":[{"class_name":"Dense","config":{"units":16,"activation":"sigmoid","use_bias":true,"kernel_initializer":{"class_name":"VarianceScaling","config":{"scale":1,"mode":"fan_avg","distribution":"normal","seed":null}},"bias_initializer":{"class_name":"Zeros","config":{}},"kernel_regularizer":null,"bias_regularizer":null,"activity_regularizer":null,"kernel_constraint":null,"bias_constraint":null,"name":"dense_Dense1","trainable":true,"batch_input_shape":[null,34],"dtype":"float32"}},{"class_name":"Dense","config":{"units":4,"activation":"softmax","use_bias":true,"kernel_initializer":{"class_name":"VarianceScaling","config":{"scale":1,"mode":"fan_avg","distribution":"normal","seed":null}},"bias_initializer":{"class_name":"Zeros","config":{}},"kernel_regularizer":null,"bias_regularizer":null,"activity_regularizer":null,"kernel_constraint":null,"bias_constraint":null,"name":"dense_Dense2","trainable":true}}],"keras_version":"tfjs-layers 1.2.2","backend":"tensor_flow.js"},"weightsManifest":[{"paths":["./model.weights.bin"],"weights":[{"name":"dense_Dense1/kernel","shape":[34,16],"dtype":"float32"},{"name":"dense_Dense1/bias","shape":[16],"dtype":"float32"},{"name":"dense_Dense2/kernel","shape":[16,4],"dtype":"float32"},{"name":"dense_Dense2/bias","shape":[4],"dtype":"float32"}]}]}

model/model.weights.bin

2.45 KB
Binary file not shown.

model/model_meta.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"data":{"inputMin":[302.3426513671875,150.57106018066406,307.4953918457031,146.5146942138672,296.05572509765625,145.79965209960938,313.5270080566406,154.1967315673828,286.1737365722656,152.5470428466797,327.3584289550781,191.11138916015625,266.07916259765625,193.9165802001953,343.07098388671875,198.33685302734375,225.36016845703125,213.9613800048828,343.88751220703125,194.80796813964844,181.90676879882812,210.48597717285156,280.67218017578125,291.8767395019531,273.5666809082031,285.855712890625,303.8507080078125,351.0625305175781,255.94866943359375,293.529541015625,276.515625,382.5232238769531,245.9301300048828,358.8548278808594],"inputMax":[406.1121826171875,365.42529296875,405.3507385253906,361.3297424316406,404.16778564453125,366.1007385253906,409.6846008300781,360.70269775390625,401.01171875,359.9224853515625,416.2422790527344,392.8089904785156,387.92608642578125,400.4131164550781,411.9314270019531,437.4988708496094,398.0821228027344,431.7273254394531,429.5989074707031,450.0535888671875,418.49114990234375,449.38507080078125,425.494140625,454.1315002441406,394.6825256347656,450.94390869140625,416.5000915527344,500.5633850097656,402.4130554199219,501.7619934082031,423.9959411621094,556.3433227539062,420.876708984375,556.0668334960938],"outputMin":0,"outputMax":1},"meta":{"inputUnits":34,"outputUnits":4,"inputs":{"input0":{"dtype":"number"},"input1":{"dtype":"number"},"input2":{"dtype":"number"},"input3":{"dtype":"number"},"input4":{"dtype":"number"},"input5":{"dtype":"number"},"input6":{"dtype":"number"},"input7":{"dtype":"number"},"input8":{"dtype":"number"},"input9":{"dtype":"number"},"input10":{"dtype":"number"},"input11":{"dtype":"number"},"input12":{"dtype":"number"},"input13":{"dtype":"number"},"input14":{"dtype":"number"},"input15":{"dtype":"number"},"input16":{"dtype":"number"},"input17":{"dtype":"number"},"input18":{"dtype":"number"},"input19":{"dtype":"number"},"input20":{"dtype":"number"},"input21":{"dtype":"number"},"input22":{"dtype":"number"},"input23":{"dtype":"number"},"input24":{"dtype":"number"},"input25":{"dtype":"number"},"input26":{"dtype":"number"},"input27":{"dtype":"number"},"input28":{"dtype":"number"},"input29":{"dtype":"number"},"input30":{"dtype":"number"},"input31":{"dtype":"number"},"input32":{"dtype":"number"},"input33":{"dtype":"number"}},"outputs":{"output0":{"dtype":"string","uniqueValues":["m","t","w","d"],"legend":{"m":[1,0,0,0],"t":[0,1,0,0],"w":[0,0,1,0],"d":[0,0,0,1]}}},"isNormalized":true}}

modelDeploy.js

+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
let video;
2+
let poseNet;
3+
let pose;
4+
let skeleton;
5+
6+
let yogi;
7+
let poseLabel
8+
9+
10+
function setup() {
11+
createCanvas(640, 480);
12+
video = createCapture(VIDEO);
13+
video.hide();
14+
poseNet = ml5.poseNet(video, modelLoaded);
15+
poseNet.on('pose', gotPoses);
16+
17+
let options = {
18+
inputs: 34,
19+
outputs: 4,
20+
task: 'classification',
21+
debug: true
22+
}
23+
24+
yogi = ml5.neuralNetwork(options);
25+
const modelInfo = {
26+
model: 'model/model.json',
27+
metadata: 'model/model_meta.json',
28+
weights: 'model/model.weights.bin',
29+
};
30+
yogi.load(modelInfo, yogiLoaded);
31+
}
32+
33+
function yogiLoaded(){
34+
console.log("Model ready!")
35+
classifyPose();
36+
}
37+
38+
function classifyPose(){
39+
if (pose) {
40+
let inputs = [];
41+
for (let i = 0; i < pose.keypoints.length; i++) {
42+
let x = pose.keypoints[i].position.x;
43+
let y = pose.keypoints[i].position.y;
44+
inputs.push(x);
45+
inputs.push(y);
46+
}
47+
yogi.classify(inputs, gotResult);
48+
} else {
49+
setTimeout(classifyPose, 100);
50+
}
51+
}
52+
53+
function gotResult(error, results) {
54+
if (results[0].confidence > 0.70) {
55+
if (results[0].label == "m"){
56+
poseLabel = "Mountain";
57+
}else{
58+
if(results[0].label == "t"){
59+
poseLabel = "Tree";
60+
}else{
61+
if(results[0].label == "d"){
62+
poseLabel = "Downward Dog";
63+
}else{
64+
poseLabel = "Warrior II";
65+
}}}}
66+
classifyPose();
67+
}
68+
69+
70+
function gotPoses(poses) {
71+
if (poses.length > 0) {
72+
pose = poses[0].pose;
73+
skeleton = poses[0].skeleton;
74+
}
75+
}
76+
77+
function modelLoaded() {
78+
console.log('poseNet ready');
79+
}
80+
81+
function draw() {
82+
push();
83+
translate(video.width, 0);
84+
scale(-1,1);
85+
image(video, 0, 0, video.width, video.height);
86+
87+
if (pose) {
88+
for (let i = 0; i < skeleton.length; i++) {
89+
let a = skeleton[i][0];
90+
let b = skeleton[i][1];
91+
strokeWeight(8);
92+
stroke(244, 194, 194);
93+
line(a.position.x, a.position.y, b.position.x, b.position.y);
94+
}
95+
}
96+
pop();
97+
98+
fill(255, 0, 255);
99+
noStroke();
100+
if (poseLabel == "Downward Dog"){
101+
textSize(90);
102+
}else{
103+
textSize(150);}
104+
textAlign(CENTER, CENTER);
105+
text(poseLabel, width / 2, height / 2);
106+
}

0 commit comments

Comments
 (0)