Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

124 Zeilen
3.5 KiB

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QLabel, QVBoxLayout, QWidget
  3. from PyQt5.QtMultimediaWidgets import QVideoWidget
  4. from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
  5. from PyQt5.QtCore import QUrl
  6. import speech_recognition as sr
  7. import question
  8. import os
  9. current_directory = os.path.dirname(os.path.realpath(__file__))
  10. main_video_path = os.path.join(current_directory, 'Friendly_new.mp4')
  11. class HospitalChatbotGUI(QMainWindow):
  12. def __init__(self):
  13. super().__init__()
  14. self.setWindowTitle("Hospital Chatbot")
  15. self.setGeometry(100, 100, 800, 600)
  16. self.central_widget = QWidget(self)
  17. self.setCentralWidget(self.central_widget)
  18. self.layout = QVBoxLayout()
  19. #self.submit_button = QPushButton("Submit", self)
  20. #self.submit_button.clicked.connect(self.get_response)
  21. #self.layout.addWidget(self.submit_button)
  22. self.speak_button = QPushButton("Speak", self)
  23. self.speak_button.clicked.connect(self.audio_to_text)
  24. self.layout.addWidget(self.speak_button)
  25. self.video_widget = QVideoWidget(self)
  26. self.layout.addWidget(self.video_widget)
  27. #self.video_widget.setFixedWidth(500)
  28. self.central_widget.setLayout(self.layout)
  29. self.media_player = QMediaPlayer()
  30. self.media_player.setVideoOutput(self.video_widget)
  31. self.media_player.mediaStatusChanged.connect(self.handle_media_status_changed)
  32. #self.sample_video_url = "/home/knight/ChatBot_UI/Friendly_new.mp4"
  33. self.sample_video_url = main_video_path
  34. self.answer_video_url = None
  35. self.play_video(self.sample_video_url)
  36. def audio_to_text(self):
  37. init_rec = sr.Recognizer()
  38. print("Let's speak!!")
  39. with sr.Microphone(3) as source:
  40. audio_data = init_rec.record(source, duration=2)
  41. print("Recognizing your text.............")
  42. text = init_rec.recognize_google(audio_data)
  43. self.get_response(text.strip())
  44. print(text)
  45. def get_response(self,text):
  46. video_url = None
  47. print("Response Text: ",text)
  48. user_input = text.strip()
  49. lowercase_text = user_input.lower()
  50. matching_intent = [intent for intent, questions in question.intents_and_question.items() if any(q in lowercase_text for q in questions)]
  51. if matching_intent:
  52. print("Intent: ", matching_intent[0])
  53. video_url = question.get_video_response(matching_intent[0])
  54. else:
  55. print("No matching intent found.")
  56. if video_url:
  57. self.play_video(video_url)
  58. return
  59. matching_intent = None
  60. #self.play_video("/home/knight/ChatBot_UI/Friendly_new.mp4")
  61. self.play_video(main_video_path)
  62. def play_video(self, video_url):
  63. media_content = QMediaContent(QUrl.fromLocalFile(video_url))
  64. self.media_player.setMedia(media_content)
  65. self.media_player.play()
  66. def handle_media_status_changed(self, status):
  67. if status == QMediaPlayer.EndOfMedia:
  68. print("Video finished playing.")
  69. #self.play_video("/home/knight/ChatBot_UI/Friendly_new.mp4")
  70. self.play_video(main_video_path)
  71. if __name__ == '__main__':
  72. app = QApplication(sys.argv)
  73. window = HospitalChatbotGUI()
  74. window.show()
  75. sys.exit(app.exec_())