|
a |
|
b/client/src/components/APITest.jsx |
|
|
1 |
import { useEffect, useState } from "react"; |
|
|
2 |
import InputField from "./InputField"; |
|
|
3 |
import { predict } from "../API"; |
|
|
4 |
import PieChart, { COLORS } from "./PieChart"; |
|
|
5 |
|
|
|
6 |
|
|
|
7 |
function APITest() { |
|
|
8 |
const [inputs, setInputs] = useState({ |
|
|
9 |
"BVP_mean": -0.181673262, |
|
|
10 |
"BVP_std": 107.648359, |
|
|
11 |
"EDA_phasic_mean": 1.824289, |
|
|
12 |
"EDA_phasic_min": 0.367977083, |
|
|
13 |
"EDA_smna_min": 0.0000000522965804, |
|
|
14 |
"EDA_tonic_mean": 1.23216412, |
|
|
15 |
"Resp_mean": 0.148183977, |
|
|
16 |
"Resp_std": 2.93561681, |
|
|
17 |
"TEMP_mean": 35.8170909, |
|
|
18 |
"TEMP_std": 0.0126739141, |
|
|
19 |
"TEMP_slope": -0.000169059802, |
|
|
20 |
"BVP_peak_freq": 0.13566987, |
|
|
21 |
"age": 27, |
|
|
22 |
"height": 175.0, |
|
|
23 |
"weight": 80.0 |
|
|
24 |
}); |
|
|
25 |
|
|
|
26 |
|
|
|
27 |
|
|
|
28 |
const [results, setResults] = useState(null); |
|
|
29 |
const [processedResults, setProcessedResults] = useState(null); |
|
|
30 |
|
|
|
31 |
async function handleSubmit() { |
|
|
32 |
const res = await predict(inputs); |
|
|
33 |
setResults(res); |
|
|
34 |
} |
|
|
35 |
|
|
|
36 |
useEffect(() => { |
|
|
37 |
if (results) { |
|
|
38 |
let x = []; |
|
|
39 |
for (let i = 0; i < 3; i++) { |
|
|
40 |
let temp = { |
|
|
41 |
name: results.labels[i], |
|
|
42 |
prob: results.prob[i] |
|
|
43 |
}; |
|
|
44 |
x.push(temp); |
|
|
45 |
} |
|
|
46 |
|
|
|
47 |
setProcessedResults(x); |
|
|
48 |
console.log(x); |
|
|
49 |
} |
|
|
50 |
}, [results]) |
|
|
51 |
|
|
|
52 |
|
|
|
53 |
|
|
|
54 |
return ( |
|
|
55 |
<> |
|
|
56 |
<div className="text-3xl text-center text-white/60 mt-8 mb-4"> |
|
|
57 |
Model Demonstration |
|
|
58 |
</div> |
|
|
59 |
<div className="flex justify-between mx-auto w-[60%] flex-wrap"> |
|
|
60 |
<InputField inputs={inputs} setInputs={setInputs} name="BVP_mean" /> |
|
|
61 |
<InputField inputs={inputs} setInputs={setInputs} name="BVP_std" /> |
|
|
62 |
<InputField inputs={inputs} setInputs={setInputs} name="EDA_phasic_mean" /> |
|
|
63 |
<InputField inputs={inputs} setInputs={setInputs} name="EDA_phasic_min" /> |
|
|
64 |
<InputField inputs={inputs} setInputs={setInputs} name="EDA_smna_min" /> |
|
|
65 |
<InputField inputs={inputs} setInputs={setInputs} name="EDA_tonic_mean" /> |
|
|
66 |
<InputField inputs={inputs} setInputs={setInputs} name="Resp_mean" /> |
|
|
67 |
<InputField inputs={inputs} setInputs={setInputs} name="TEMP_mean" /> |
|
|
68 |
<InputField inputs={inputs} setInputs={setInputs} name="TEMP_std" /> |
|
|
69 |
<InputField inputs={inputs} setInputs={setInputs} name="TEMP_slope" /> |
|
|
70 |
<InputField inputs={inputs} setInputs={setInputs} name="BVP_peak_freq" /> |
|
|
71 |
<div className="w-40"></div> |
|
|
72 |
<InputField inputs={inputs} setInputs={setInputs} name="age" small /> |
|
|
73 |
<InputField inputs={inputs} setInputs={setInputs} name="height" small /> |
|
|
74 |
<InputField inputs={inputs} setInputs={setInputs} name="weight" small /> |
|
|
75 |
<button className="rounded-lg bg-yellow-500 hover:bg-yellow-600 transition duration-150 px-2 h-min py-2 mr-12 text-indigo-900 font-semibold mt-4" |
|
|
76 |
onClick={handleSubmit}> |
|
|
77 |
Predict Stress |
|
|
78 |
</button> |
|
|
79 |
</div> |
|
|
80 |
|
|
|
81 |
{processedResults && ( |
|
|
82 |
<div className="flex justify-center items-center text-2xl rounded-xl bg-black/20 mx-16 mt-8"> |
|
|
83 |
<PieChart data={processedResults} width={500} height={500} outerRadius={200} label /> |
|
|
84 |
<div className="flex flex-col gap-4"> |
|
|
85 |
{processedResults.map((entry, index) => ( |
|
|
86 |
<div className="flex gap-4 items-center"> |
|
|
87 |
<div className="w-8 h-6 border-[1px] border-white" style={{backgroundColor: COLORS[index % COLORS.length]}}></div> |
|
|
88 |
{entry.name} - {entry.prob * 100}% |
|
|
89 |
</div> |
|
|
90 |
))} |
|
|
91 |
|
|
|
92 |
</div> |
|
|
93 |
</div> |
|
|
94 |
)} |
|
|
95 |
</> |
|
|
96 |
); |
|
|
97 |
} |
|
|
98 |
|
|
|
99 |
export default APITest; |