Implémentation de speech_recognition

This commit is contained in:
Quentin Roussel
2023-05-03 16:01:12 +02:00
parent 0e8c27e200
commit d16f543056
7 changed files with 61 additions and 30 deletions

View File

@@ -0,0 +1,3 @@
CAMERA_ID=
PORT=
HOST=

View File

@@ -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()

View File

@@ -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)

View 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'

View File

@@ -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"]

View File

@@ -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) {

View File

@@ -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">