|
- from flask import Flask, render_template, jsonify
- from flask_socketio import SocketIO
-
- import os
- import speech_recognition as sr
- import question
- import imageio
- import threading
- import time
-
- app = Flask(__name__)
- socketio = SocketIO(app)
-
- current_directory = os.path.dirname(os.path.realpath(__file__))
-
- intents_and_question = question.intents_and_question
- video_urls = question.video_urls
-
- micPermission = True
-
- class SharedData:
-
- def __init__(self):
-
- self.micPermission = micPermission
- #self.pause_event = threading.Event()
- #self.listening_state = True
-
-
- def get_intent(text):
- lowercase_text = text.lower()
- matching_intent = [intent for intent, questions in intents_and_question.items() if any(q in lowercase_text for q in questions)]
- return matching_intent[0] if matching_intent else 'no_answer'
-
-
- def get_video_response(intent):
- return video_urls.get(intent)
-
-
- def calc_video_length(url):
- try:
- reader = imageio.get_reader(url)
- duration = reader.get_meta_data()['duration']
- reader.close()
- return duration
- except Exception as e:
- return "error"
-
-
- def recognize_and_emit(shared_data):
-
- recognizer = sr.Recognizer()
-
- if shared_data.micPermission is True:
- with sr.Microphone() as source:
- while True:
- try:
-
- #shared_data.pause_event.wait()
- print("Listening ....")
- audio_data = recognizer.record(source, duration = 3.5)
- #audio_data = recognizer.listen(source, timeout=3)
- print("Recognizing your text .........")
- text = recognizer.recognize_google(audio_data)
-
-
- intent = get_intent(text.strip())
- video_url = get_video_response(intent)
-
- length = calc_video_length(video_url)
-
- #shared_data.length = length
-
-
-
- socketio.emit('text_received', {'text': text, 'intent': intent, 'video_url': video_url})
- print("Recognized Text:", text)
-
- shared_data.micPermission = False
- print("Going to sleep...")
- source = None
- time.sleep(length)
- shared_data.micPermission = True
- recognize_and_emit(shared_data)
-
-
-
- except sr.UnknownValueError:
- print("Speech Recognition could not understand audio")
- except sr.RequestError as e:
- print(f"Could not request {e}")
-
-
-
- @app.route('/')
- def index():
- return render_template('index.html')
-
-
- @socketio.on('start_listening')
- def start_listening(data):
-
- shared_data = SharedData()
- recognition_thread = threading.Thread(target=recognize_and_emit, args=(shared_data,))
- recognition_thread.start()
-
-
- #recognition_thread.join() # Wait for the recognition thread to finish
-
-
-
- if __name__ == '__main__':
- socketio.run(app, debug=True)
|