mirror of
https://git.roussel.pro/telecom-paris/pact.git
synced 2026-02-09 02:20:17 +01:00
Implémentation basique notes avec les doigts
This commit is contained in:
@@ -118,7 +118,7 @@ class HandDetector():
|
||||
|
||||
class FingerCountDetector():
|
||||
def __init__(self):
|
||||
self.BUFFER_LENGTH = 20
|
||||
self.BUFFER_LENGTH = 40
|
||||
self.DETECTION_THRESHOLD = 1/2
|
||||
self.hands = mp_hands.Hands(static_image_mode=False, max_num_hands=2, min_detection_confidence=0.5, min_tracking_confidence=0.5)
|
||||
self.buffer = []
|
||||
|
||||
@@ -51,6 +51,7 @@ class Manager():
|
||||
if(res != False):
|
||||
self.state = 1
|
||||
self.timeLastChange = time.time()
|
||||
print("Change to state 1")
|
||||
self.server.sendMessage({"type": "state", "state": 1})
|
||||
|
||||
#Envoie la position de la main a l'écran et passe a l'étape suivante si une main est detectée pendant assez longtemps
|
||||
@@ -63,7 +64,26 @@ class Manager():
|
||||
res = self.handDetector.loop()
|
||||
if(res != False):
|
||||
state, coords, size, finalDecision, progress = res
|
||||
self.server.sendMessage({"type": "effects", "effects": [{"type": "loading", "x":coords[0], "y": coords[1], "width": size, "height": size, "progress": progress},{"type": state, "x":coords[0], "y": coords[1], "width": size, "height": size}]})
|
||||
self.server.sendMessage({
|
||||
"type": "effects",
|
||||
"effects": [
|
||||
{
|
||||
"type": "loading",
|
||||
"x":coords[0],
|
||||
"y": coords[1],
|
||||
"width": size,
|
||||
"height": size,
|
||||
"progress": progress
|
||||
},
|
||||
{
|
||||
"type": state,
|
||||
"x":coords[0],
|
||||
"y": coords[1],
|
||||
"width": size,
|
||||
"height": size
|
||||
}
|
||||
]
|
||||
})
|
||||
self.isLastHandPacketEmpty = False
|
||||
self.timeLastChange = time.time()
|
||||
if(finalDecision != False):
|
||||
@@ -75,25 +95,41 @@ class Manager():
|
||||
self.isLastHandPacketEmpty = True
|
||||
|
||||
def grade(self):
|
||||
#Premier passage dans la boucle
|
||||
if(self.currentCriteria == None):
|
||||
self.currentCriteria = 0
|
||||
self.server.sendMessage({"type":"new_criteria","criteria":self.criteria_list[self.currentCriteria]})
|
||||
self.server.sendMessage({
|
||||
"type": "state",
|
||||
"state": 2
|
||||
})
|
||||
self.server.sendMessage({
|
||||
"type":"new_criteria",
|
||||
"criteria":self.criteria_list[self.currentCriteria]
|
||||
})
|
||||
return
|
||||
|
||||
grade = self.fingerCountDetector.loop()
|
||||
if(grade != None):
|
||||
self.avis["notes_autres"][self.criteria_list[self.currentCriteria]] = grade
|
||||
self.server.sendMessage({
|
||||
"type":"criteria_grade",
|
||||
"grade":grade
|
||||
})
|
||||
time.sleep(3)
|
||||
self.currentCriteria+=1
|
||||
if(self.currentCriteria < len(self.criteria_list)):
|
||||
self.server.sendMessage({"type":"new_criteria","criteria":self.criteria_list[self.currentCriteria]})
|
||||
self.server.sendMessage({
|
||||
"type":"new_criteria",
|
||||
"criteria":self.criteria_list[self.currentCriteria]
|
||||
})
|
||||
self.fingerCountDetector.reset()
|
||||
else:
|
||||
print("Change to state 3")
|
||||
self.state = 3
|
||||
self.server.sendMessage({"type": "state", "state": 3})
|
||||
|
||||
|
||||
def audio(self):
|
||||
time.sleep(3)
|
||||
self.server.sendMessage({"type":"recording_started"})
|
||||
with sr.Microphone() as source:
|
||||
audio = self.recongizer.listen(source)
|
||||
|
||||
@@ -109,7 +109,6 @@ class CameraPage {
|
||||
height = height * this.videoHeight * 2;
|
||||
x = x * this.videoWidth - width / 2;
|
||||
y = y * this.videoHeight - height / 2;
|
||||
console.log(width, height);
|
||||
if (effect.type == "thumbs_down") {
|
||||
this._drawThumbsDown(x, y, width, height);
|
||||
}
|
||||
|
||||
23
code/interface_borne/assets/js/grade_page.js
Normal file
23
code/interface_borne/assets/js/grade_page.js
Normal file
@@ -0,0 +1,23 @@
|
||||
class GradePage {
|
||||
constructor() {
|
||||
this.isEnabled = false;
|
||||
this.DOMElement = document.getElementById("grade");
|
||||
}
|
||||
|
||||
set enabled(isEnabled) {
|
||||
this.isEnabled = isEnabled;
|
||||
this.DOMElement.style.display = isEnabled ? "block" : "none";
|
||||
}
|
||||
|
||||
onNewCriteria(criteriaName) {
|
||||
document.getElementById("criteria").innerHTML = criteriaName;
|
||||
document.getElementById("criteria-grade").innerHTML = "";
|
||||
}
|
||||
onNewGrade(grade) {
|
||||
document.getElementById("criteria-grade").innerHTML = grade;
|
||||
}
|
||||
reset() {
|
||||
document.getElementById("criteria-grade").innerHTML = "";
|
||||
document.getElementById("criteria").innerHTML = "";
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
class WebsocketClient {
|
||||
constructor(onNewEffects, onNewState, onNewGrade, onReset, onRecordingDone) {
|
||||
constructor(onNewEffects, onNewState, onNewGrade, onReset, onRecordingDone, onNewCriteria, onNewCriteriaGrade) {
|
||||
this.socket = new WebSocket("ws://localhost:5000");
|
||||
this.socket.addEventListener("open", (event) => {
|
||||
this.socket.send("connected");
|
||||
@@ -10,16 +10,25 @@ class WebsocketClient {
|
||||
let msg = JSON.parse(event.data);
|
||||
if (msg.type == "effects") {
|
||||
onNewEffects(msg.effects);
|
||||
}else if(msg.type == "state") {
|
||||
}
|
||||
else if(msg.type == "state") {
|
||||
onNewState(msg.state);
|
||||
}else if(msg.type == "new_grade") {
|
||||
}
|
||||
else if(msg.type == "new_grade") {
|
||||
onNewGrade(msg.word);
|
||||
}else if(msg.type == "reset") {
|
||||
}
|
||||
else if(msg.type == "reset") {
|
||||
onReset();
|
||||
}
|
||||
else if(msg.type == "recording_done") {
|
||||
onRecordingDone();
|
||||
}
|
||||
else if(msg.type == "new_criteria") {
|
||||
onNewCriteria(msg.criteria)
|
||||
}
|
||||
else if(msg.type == "criteria_grade") {
|
||||
onNewCriteriaGrade(msg.grade);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,9 @@
|
||||
const STATE = {
|
||||
sleeping: 0,
|
||||
video: 1,
|
||||
audio: 2,
|
||||
thankYou: 3,
|
||||
grade: 2,
|
||||
audio: 3,
|
||||
thankYou: 4,
|
||||
};
|
||||
|
||||
class StateManager {
|
||||
@@ -12,6 +13,7 @@ class StateManager {
|
||||
this._sleepingPage = new SleepingPage();
|
||||
this._audioPage = new AudioPage();
|
||||
this._thankYouPage = new ThankYouPage();
|
||||
this._gradePage = new GradePage();
|
||||
|
||||
this.wsClient = new WebsocketClient(
|
||||
(effects) => {
|
||||
@@ -22,22 +24,30 @@ class StateManager {
|
||||
(grade) => this._audioPage.setGrade(grade),
|
||||
() => this.reset(),
|
||||
() => this._audioPage.onRecordingDone(),
|
||||
(crit) => this._gradePage.onNewCriteria(crit),
|
||||
(grade) => this._gradePage.onNewGrade(grade),
|
||||
);
|
||||
|
||||
this._sleepingPage.enabled = true;
|
||||
this._cameraPage.enabled = false;
|
||||
this._gradePage.enabled = false;
|
||||
this._audioPage.enabled = false;
|
||||
this._thankYouPage.enabled = false;
|
||||
}
|
||||
|
||||
setState(newState) {
|
||||
console.log("state change")
|
||||
console.log({current:this._state,new:newState})
|
||||
if(this._state == STATE.sleeping && newState == STATE.video) {
|
||||
this._cameraPage.enabled = true;
|
||||
this._sleepingPage.enabled = false;
|
||||
this._state = newState;
|
||||
}else if(this._state == STATE.video && newState == STATE.audio) {
|
||||
}else if(this._state == STATE.video && newState == STATE.grade) {
|
||||
this._cameraPage.enabled = false;
|
||||
this._gradePage.enabled = true;
|
||||
this._state = newState;
|
||||
}else if(this._state == STATE.grade && newState == STATE.audio) {
|
||||
this._gradePage.enabled = false;
|
||||
this._audioPage.enabled = true;
|
||||
this._state = newState;
|
||||
}else if(this._state == STATE.audio && newState == STATE.thankYou) {
|
||||
|
||||
@@ -30,6 +30,14 @@
|
||||
<canvas id="overlay-canvas"></canvas>
|
||||
<video id="camera-video"></video>
|
||||
</div>
|
||||
<div id="grade">
|
||||
<div class="instructions">
|
||||
<div class="title">
|
||||
<h1>Qu'avez vous pensé de <span id="criteria"></span></h1>
|
||||
</div>
|
||||
<p>Votre note : <span id="criteria-grade"></span>/10</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="audio">
|
||||
<div class="instructions">
|
||||
<div class="title">
|
||||
@@ -51,6 +59,7 @@
|
||||
<script src="assets/js/camera_page.js"></script>
|
||||
<script src="assets/js/network.js"></script>
|
||||
<script src="assets/js/thank_you_page.js"></script>
|
||||
<script src="assets/js/grade_page.js"></script>
|
||||
<script src="assets/js/audio_page.js"></script>
|
||||
<script src="assets/js/sleeping_page.js"></script>
|
||||
<script src="assets/js/state_manager.js"></script>
|
||||
|
||||
Reference in New Issue
Block a user