From d16f5430566c1239d280ba4b196575e74061658b Mon Sep 17 00:00:00 2001 From: Quentin Roussel Date: Wed, 3 May 2023 16:01:12 +0200 Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20de=20speech=5Frecognition?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/backend_reconnaissance/.env.template | 3 ++ code/backend_reconnaissance/manager.py | 45 ++++++++++++++------ code/backend_reconnaissance/network.py | 8 ++-- code/backend_reconnaissance/nohup.out | 8 ++++ code/interface_admin/Dockerfile | 12 ++---- code/interface_borne/assets/js/audio_page.js | 9 +++- code/interface_borne/index.html | 6 +-- 7 files changed, 61 insertions(+), 30 deletions(-) create mode 100644 code/backend_reconnaissance/.env.template create mode 100644 code/backend_reconnaissance/nohup.out diff --git a/code/backend_reconnaissance/.env.template b/code/backend_reconnaissance/.env.template new file mode 100644 index 0000000..a93e578 --- /dev/null +++ b/code/backend_reconnaissance/.env.template @@ -0,0 +1,3 @@ +CAMERA_ID= +PORT= +HOST= diff --git a/code/backend_reconnaissance/manager.py b/code/backend_reconnaissance/manager.py index bd26c53..a992d11 100644 --- a/code/backend_reconnaissance/manager.py +++ b/code/backend_reconnaissance/manager.py @@ -2,6 +2,7 @@ from hand_detector import HandDetector from audio_detector import record, analyze, test from network import ApiClient, WebsocketServer import time +import speech_recognition as sr #Classe qui coordonne les différents modules et qui s'occupe de construire l'avis au fur et a mesure class Manager(): @@ -22,6 +23,7 @@ class Manager(): self.api = ApiClient() self.timeLastChange = time.time() self.isLastHandPacketEmpty = False + self.recongizer = sr.Recognizer() print("Backend ready") #Boucle principale @@ -67,24 +69,43 @@ class Manager(): self.isLastHandPacketEmpty = True def audio(self): - audio_query,sr = record() - self.server.sendMessage({"type":"recording_done"}) - result = analyze(audio_query,sr) - # result = test() - if(result != False): - print("mot detecté : " + result["display"] + " avec une note de " + str(result["grade"])) - self.server.sendMessage({"type":"new_grade","word":result["display"]}) - self.avis["notes_autres"]["test"] = result["grade"] - time.sleep(3) - self.state = 3 - self.server.sendMessage({"type": "state", "state": 3}) + time.sleep(3) + self.server.sendMessage({"type":"recording_started"}) + with sr.Microphone() as source: + audio = self.recongizer.listen(source) + self.server.sendMessage({"type":"recording_done"}) + try: + # utilisez le recognizer pour effectuer la reconnaissance vocale + texte = self.recongizer.recognize_google(audio, language='fr-FR') + print("AUDIO MESSAGE RECONGIZED : " + texte) + self.server.sendMessage({"type":"new_grade","word":texte}) + self.avis["commentaire"] = texte + + # Audio non reconnu + except sr.UnknownValueError: + print("MESSAGE NOT RECONGIZED") + self.server.sendMessage({"type":"new_grade","word":"Avis non reconnu"}) + self.avis["commentaire"] = "" + + #Erreur d'accès à l'api + except sr.RequestError as e: + print("Erreur avec l'api de reconnaissance vocale") + self.avis["commentaire"] = "" + self.server.sendMessage({"type":"new_grade","word":"Avis non reconnu"}) + print("Impossible de récupérer les résultats de la reconnaissance vocale; {0}".format(e)) + + #On passe a la suite + time.sleep(5) + self.state = 3 + self.server.sendMessage({"type": "state", "state": 3}) def thankYou(self): + #On envoie l'avis à l'api + res = self.api.send(self.avis["note"],self.avis["commentaire"]) time.sleep(10) print("Reseting...") self.timeLastChange = time.time() self.server.sendMessage({"type": "state", "state": 0}) - res = self.api.send(self.avis["note"],self.avis["notes_autres"]["test"]) print(res.text) self.reset() diff --git a/code/backend_reconnaissance/network.py b/code/backend_reconnaissance/network.py index af007ed..08501c6 100644 --- a/code/backend_reconnaissance/network.py +++ b/code/backend_reconnaissance/network.py @@ -40,13 +40,13 @@ class ApiClient(): self.host = host self.port = port - def send(self,note,note_autre): + def send(self,note,commentaire): + #Exemple ajout d'un commentaire depuis la borne (site ou geste) avis = { "note": note, "source": "borne", - "commentaire":"", - #Optionel - "notes_autre": '{"proprete":'+str(note_autre)+',"calme":10}', + "commentaire":commentaire, } + print(self.host, self.port) return requests.post("http://"+self.host+":"+self.port+"/add_review", data=avis) diff --git a/code/backend_reconnaissance/nohup.out b/code/backend_reconnaissance/nohup.out new file mode 100644 index 0000000..379ace2 --- /dev/null +++ b/code/backend_reconnaissance/nohup.out @@ -0,0 +1,8 @@ +Traceback (most recent call last): + File "/home/quentin/Documents/Ecole/Télécom Paris/1A/PACT/pact71/code/backend_reconnaissance/main.py", line 1, in + from manager import Manager + File "/home/quentin/Documents/Ecole/Télécom Paris/1A/PACT/pact71/code/backend_reconnaissance/manager.py", line 1, in + from hand_detector import HandDetector + File "/home/quentin/Documents/Ecole/Télécom Paris/1A/PACT/pact71/code/backend_reconnaissance/hand_detector.py", line 1, in + import cv2 +ModuleNotFoundError: No module named 'cv2' diff --git a/code/interface_admin/Dockerfile b/code/interface_admin/Dockerfile index d11b0de..b221185 100644 --- a/code/interface_admin/Dockerfile +++ b/code/interface_admin/Dockerfile @@ -23,15 +23,11 @@ ENV NEXT_TELEMETRY_DISABLED 1 RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs -#TODO : changer pour prod -# COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next -# COPY --from=builder /app/node_modules ./node_modules -# COPY --from=builder /app/package.json ./package.json -COPY --from=builder --chown=nextjs:nodejs /app . +COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/package.json ./package.json USER nextjs ENV PORT 3000 -# TODO : a changer en prod -# CMD ["npm", "start"] -CMD ["npm","run", "dev"] \ No newline at end of file +CMD ["npm", "start"] diff --git a/code/interface_borne/assets/js/audio_page.js b/code/interface_borne/assets/js/audio_page.js index ea7d3c5..66dd688 100644 --- a/code/interface_borne/assets/js/audio_page.js +++ b/code/interface_borne/assets/js/audio_page.js @@ -7,7 +7,12 @@ class AudioPage { set enabled(isEnabled) { this.isEnabled = isEnabled; this.DOMElement.style.display = isEnabled ? "block" : "none"; - document.getElementById("audio_status").innerHTML = "Enregistrement..."; + document.getElementById("audio_status").innerHTML = ""; + } + onRecordingStarted() { + if(this.isEnabled) { + document.getElementById("audio_status").innerHTML = "Enregistrement..."; + } } onRecordingDone() { if(this.isEnabled) { @@ -24,4 +29,4 @@ class AudioPage { reset() { document.getElementById("audio_status").innerHTML = "Enregistrement..."; } -} \ No newline at end of file +} diff --git a/code/interface_borne/index.html b/code/interface_borne/index.html index 985a6db..184132c 100644 --- a/code/interface_borne/index.html +++ b/code/interface_borne/index.html @@ -36,9 +36,7 @@

Dites-nous en plus

Comment avez vous trouvé l'exposition ... ?

-

Dites un mot parmis la liste suivante

- J'ai beaucoup aimé, génial, Ennuyant, Nul -

Mot détécté :

+

@@ -59,4 +57,4 @@ - \ No newline at end of file +