mirror of
https://git.roussel.pro/telecom-paris/pact.git
synced 2026-02-09 02:20:17 +01:00
Implémentation de speech_recognition
This commit is contained in:
3
code/backend_reconnaissance/.env.template
Normal file
3
code/backend_reconnaissance/.env.template
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
CAMERA_ID=
|
||||||
|
PORT=
|
||||||
|
HOST=
|
||||||
@@ -2,6 +2,7 @@ from hand_detector import HandDetector
|
|||||||
from audio_detector import record, analyze, test
|
from audio_detector import record, analyze, test
|
||||||
from network import ApiClient, WebsocketServer
|
from network import ApiClient, WebsocketServer
|
||||||
import time
|
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
|
#Classe qui coordonne les différents modules et qui s'occupe de construire l'avis au fur et a mesure
|
||||||
class Manager():
|
class Manager():
|
||||||
@@ -22,6 +23,7 @@ class Manager():
|
|||||||
self.api = ApiClient()
|
self.api = ApiClient()
|
||||||
self.timeLastChange = time.time()
|
self.timeLastChange = time.time()
|
||||||
self.isLastHandPacketEmpty = False
|
self.isLastHandPacketEmpty = False
|
||||||
|
self.recongizer = sr.Recognizer()
|
||||||
print("Backend ready")
|
print("Backend ready")
|
||||||
|
|
||||||
#Boucle principale
|
#Boucle principale
|
||||||
@@ -67,24 +69,43 @@ class Manager():
|
|||||||
self.isLastHandPacketEmpty = True
|
self.isLastHandPacketEmpty = True
|
||||||
|
|
||||||
def audio(self):
|
def audio(self):
|
||||||
audio_query,sr = record()
|
time.sleep(3)
|
||||||
self.server.sendMessage({"type":"recording_done"})
|
self.server.sendMessage({"type":"recording_started"})
|
||||||
result = analyze(audio_query,sr)
|
with sr.Microphone() as source:
|
||||||
# result = test()
|
audio = self.recongizer.listen(source)
|
||||||
if(result != False):
|
self.server.sendMessage({"type":"recording_done"})
|
||||||
print("mot detecté : " + result["display"] + " avec une note de " + str(result["grade"]))
|
try:
|
||||||
self.server.sendMessage({"type":"new_grade","word":result["display"]})
|
# utilisez le recognizer pour effectuer la reconnaissance vocale
|
||||||
self.avis["notes_autres"]["test"] = result["grade"]
|
texte = self.recongizer.recognize_google(audio, language='fr-FR')
|
||||||
time.sleep(3)
|
print("AUDIO MESSAGE RECONGIZED : " + texte)
|
||||||
self.state = 3
|
self.server.sendMessage({"type":"new_grade","word":texte})
|
||||||
self.server.sendMessage({"type": "state", "state": 3})
|
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):
|
def thankYou(self):
|
||||||
|
#On envoie l'avis à l'api
|
||||||
|
res = self.api.send(self.avis["note"],self.avis["commentaire"])
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
print("Reseting...")
|
print("Reseting...")
|
||||||
self.timeLastChange = time.time()
|
self.timeLastChange = time.time()
|
||||||
self.server.sendMessage({"type": "state", "state": 0})
|
self.server.sendMessage({"type": "state", "state": 0})
|
||||||
res = self.api.send(self.avis["note"],self.avis["notes_autres"]["test"])
|
|
||||||
print(res.text)
|
print(res.text)
|
||||||
self.reset()
|
self.reset()
|
||||||
|
|
||||||
|
|||||||
@@ -40,13 +40,13 @@ class ApiClient():
|
|||||||
self.host = host
|
self.host = host
|
||||||
self.port = port
|
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)
|
#Exemple ajout d'un commentaire depuis la borne (site ou geste)
|
||||||
avis = {
|
avis = {
|
||||||
"note": note,
|
"note": note,
|
||||||
"source": "borne",
|
"source": "borne",
|
||||||
"commentaire":"",
|
"commentaire":commentaire,
|
||||||
#Optionel
|
|
||||||
"notes_autre": '{"proprete":'+str(note_autre)+',"calme":10}',
|
|
||||||
}
|
}
|
||||||
|
print(self.host, self.port)
|
||||||
return requests.post("http://"+self.host+":"+self.port+"/add_review", data=avis)
|
return requests.post("http://"+self.host+":"+self.port+"/add_review", data=avis)
|
||||||
|
|||||||
8
code/backend_reconnaissance/nohup.out
Normal file
8
code/backend_reconnaissance/nohup.out
Normal file
@@ -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 <module>
|
||||||
|
from manager import Manager
|
||||||
|
File "/home/quentin/Documents/Ecole/Télécom Paris/1A/PACT/pact71/code/backend_reconnaissance/manager.py", line 1, in <module>
|
||||||
|
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 <module>
|
||||||
|
import cv2
|
||||||
|
ModuleNotFoundError: No module named 'cv2'
|
||||||
@@ -23,15 +23,11 @@ ENV NEXT_TELEMETRY_DISABLED 1
|
|||||||
RUN addgroup --system --gid 1001 nodejs
|
RUN addgroup --system --gid 1001 nodejs
|
||||||
RUN adduser --system --uid 1001 nextjs
|
RUN adduser --system --uid 1001 nextjs
|
||||||
|
|
||||||
#TODO : changer pour prod
|
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
|
||||||
# COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
|
COPY --from=builder /app/node_modules ./node_modules
|
||||||
# COPY --from=builder /app/node_modules ./node_modules
|
COPY --from=builder /app/package.json ./package.json
|
||||||
# COPY --from=builder /app/package.json ./package.json
|
|
||||||
COPY --from=builder --chown=nextjs:nodejs /app .
|
|
||||||
|
|
||||||
USER nextjs
|
USER nextjs
|
||||||
|
|
||||||
ENV PORT 3000
|
ENV PORT 3000
|
||||||
# TODO : a changer en prod
|
CMD ["npm", "start"]
|
||||||
# CMD ["npm", "start"]
|
|
||||||
CMD ["npm","run", "dev"]
|
|
||||||
|
|||||||
@@ -7,7 +7,12 @@ class AudioPage {
|
|||||||
set enabled(isEnabled) {
|
set enabled(isEnabled) {
|
||||||
this.isEnabled = isEnabled;
|
this.isEnabled = isEnabled;
|
||||||
this.DOMElement.style.display = isEnabled ? "block" : "none";
|
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() {
|
onRecordingDone() {
|
||||||
if(this.isEnabled) {
|
if(this.isEnabled) {
|
||||||
|
|||||||
@@ -36,9 +36,7 @@
|
|||||||
<h1>Dites-nous en plus</h1>
|
<h1>Dites-nous en plus</h1>
|
||||||
</div>
|
</div>
|
||||||
<p>Comment avez vous trouvé l'exposition ... ?</p>
|
<p>Comment avez vous trouvé l'exposition ... ?</p>
|
||||||
<p>Dites un mot parmis la liste suivante</p>
|
<p><strong id="audio_status"></strong></p>
|
||||||
<strong> J'ai beaucoup aimé, génial, Ennuyant, Nul</strong>
|
|
||||||
<p>Mot détécté : <strong id="audio_status"></strong></p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="thank-you">
|
<div id="thank-you">
|
||||||
|
|||||||
Reference in New Issue
Block a user