| @@ -1,412 +0,0 @@ | |||||
| import sys | |||||
| from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QLabel, QVBoxLayout, QWidget, QGraphicsOpacityEffect, QGraphicsScene, QGraphicsView | |||||
| from PyQt5.QtMultimediaWidgets import QVideoWidget | |||||
| from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent | |||||
| from PyQt5.QtCore import QUrl, Qt | |||||
| import speech_recognition as sr | |||||
| from PyQt5.QtGui import QPainter | |||||
| class HospitalChatbot: | |||||
| def __init__(self): | |||||
| self.intents_and_questions = { | |||||
| "greet": [ | |||||
| "hey", | |||||
| "hello", | |||||
| "Hello?", | |||||
| "hello?", | |||||
| "hi", | |||||
| "hello there", | |||||
| "good morning", | |||||
| "good evening", | |||||
| "moin", | |||||
| "hey there", | |||||
| "let's go", | |||||
| "hey dude", | |||||
| "goodmorning", | |||||
| "goodevening", | |||||
| "good afternoon"], | |||||
| "goodbye": [ | |||||
| "cu", | |||||
| "good by", | |||||
| "cee you later", | |||||
| "good night", | |||||
| "bye", | |||||
| "goodbye", | |||||
| "have a nice day", | |||||
| "see you around", | |||||
| "bye bye", | |||||
| "see you later" | |||||
| ], | |||||
| "affirm": [ | |||||
| "yes", | |||||
| "y", | |||||
| "indeed", | |||||
| "of course", | |||||
| "that sounds good", | |||||
| "correct" | |||||
| ], | |||||
| "bot_challenge": [ | |||||
| "are you a bot", | |||||
| "are you a human", | |||||
| "am I talking to a bot", | |||||
| "am I talking to a human" | |||||
| ], | |||||
| "appointment_booking": [ | |||||
| "How can I schedule an appointment", | |||||
| "I need to book an appointment with a doctor", | |||||
| "what's the procedure for booking an appointment", | |||||
| "hello, I'd like to schedule an appointment.", | |||||
| "book an appointment", | |||||
| "appointment", | |||||
| "need an appointment" | |||||
| ], | |||||
| "doctor_information": [ | |||||
| "tell me more about dr. abc", | |||||
| "what's the specialty of dr. abc", | |||||
| "give me the contact details for dr. abc" | |||||
| "doctor", | |||||
| "contact doctor", | |||||
| "doctor contact", | |||||
| "doctor detail", | |||||
| "detail doctor" | |||||
| ], | |||||
| "department_information": [ | |||||
| "which departments are available in the hospital", | |||||
| "can you provide details about the cardiology department", | |||||
| "tell me more about the pediatric department", | |||||
| "department", | |||||
| "which department", | |||||
| "department info" | |||||
| ], | |||||
| "visiting_hours":[ | |||||
| "what are the visiting hours for patients", | |||||
| "when can I visit a patient in the hospital", | |||||
| "is there a specific time for visiting hours", | |||||
| "visiting time", | |||||
| "visit", | |||||
| "time", | |||||
| "time to visit", | |||||
| "visit time", | |||||
| "hospital visit", | |||||
| "visit hospital" | |||||
| ], | |||||
| "location_and_directions":[ | |||||
| "how do I get to the hospital", | |||||
| "can you provide me with directions to your location", | |||||
| "where is the hospital situated", | |||||
| "direction", | |||||
| "direction hospital", | |||||
| "hospital direction", | |||||
| "location", | |||||
| "hospital location" | |||||
| ], | |||||
| "billing_and_insurance": [ | |||||
| "how do I pay my medical bills", | |||||
| "do you accept my insurance", | |||||
| "what's the billing process for a hospital stay", | |||||
| "bills", | |||||
| "insurance", | |||||
| "pay bill", | |||||
| ], | |||||
| "medical_records": [ | |||||
| "how can I access my medical records", | |||||
| "request my medical history", | |||||
| "I need a copy of my lab results", | |||||
| "records", | |||||
| "medical records", | |||||
| "record medical", | |||||
| "results", | |||||
| "lab results", | |||||
| "result copy", | |||||
| "copy result" | |||||
| ], | |||||
| "emergency_services": [ | |||||
| "what should I do in case of a medical emergency", | |||||
| "how do I contact the hospital in an emergency", | |||||
| "tell me about your emergency services", | |||||
| "emergency", | |||||
| "emergency service" | |||||
| ], | |||||
| "covid19_information": [ | |||||
| "what safety measures are in place due to COVID-19", | |||||
| "is it safe to visit the hospital during the pandemic", | |||||
| "do you offer COVID-19 testing or vaccinations", | |||||
| "covid19" | |||||
| ], | |||||
| "feedback_and_complaints": [ | |||||
| "I want to provide feedback about my experience", | |||||
| "how can I file a complaint about a staff member", | |||||
| "share my thoughts on my recent visit", | |||||
| "feedback", | |||||
| "complaints", | |||||
| "complain", | |||||
| "share thoughts", | |||||
| "experiance" | |||||
| ], | |||||
| "thank_you": [ | |||||
| "thank you for your help", | |||||
| "I appreciate your assistance", | |||||
| "you've been very helpful" | |||||
| ], | |||||
| "general_information": [ | |||||
| "tell me more about the hospital", | |||||
| "what services do you offer", | |||||
| "is there a cafeteria in the hospital", | |||||
| "information", | |||||
| "cafeteria", | |||||
| "services", | |||||
| "services offered", | |||||
| "offered services" | |||||
| ] | |||||
| } | |||||
| self.intent_responses = { | |||||
| "greet": "Hello! How can I assist you today?", | |||||
| "appointment_booking": "To book an appointment, please call our scheduling department at 1234567897.", | |||||
| "doctor_information": "Dr. ABC is a specialist in Neuro. You can contact them at 9874563214.", | |||||
| "department_information": "Our hospital has various departments, including cardiology and pediatrics. How can I help you with a specific department?", | |||||
| "visiting_hours": "Visiting hours for patients are from 9:30 AM to 8:00 PM. Please feel free to visit during that time.", | |||||
| "location_and_directions": "Our hospital is located at Ameerpet Hyderabad. Here are directions to our hospital: [Directions].", | |||||
| "billing_and_insurance": "You can pay your medical bills at the billing department. We accept a variety of insurance plans. If you have any specific questions about billing, please call 789654125.", | |||||
| "medical_records": "To access your medical records, please visit the medical records department. They can provide you with a copy of your records or lab results.", | |||||
| "emergency_services": "In case of a medical emergency, please call 911 or go to the nearest emergency room. We also have an emergency department at our hospital.", | |||||
| "covid19_information": "For information on our COVID-19 safety measures and testing, please visit our website or contact our COVID-19 hotline at [COVID-19 Hotline Number].", | |||||
| "feedback_and_complaints": "Your feedback is valuable to us. You can provide feedback or file a complaint on our website or by contacting our patient services department.", | |||||
| "thank_you": "You're welcome! If you have any more questions, feel free to ask.", | |||||
| "general_information": "Our hospital provides a range of services, including medical, surgical, and emergency care. We also have a cafeteria for your convenience." | |||||
| } | |||||
| def match_intent(self, sentence): | |||||
| sentence = sentence.lower() # Convert to lowercase for case-insensitive matching | |||||
| for intent, questions in self.intents_and_questions.items(): | |||||
| for question in questions: | |||||
| if question in sentence: | |||||
| return intent | |||||
| return None | |||||
| def get_response(self, sentence): | |||||
| matched_intent = self.match_intent(sentence) | |||||
| if matched_intent: | |||||
| response = self.intent_responses.get(matched_intent, "I'm not sure how to answer that.") | |||||
| else: | |||||
| response = "I'm not sure how to answer that." | |||||
| return response | |||||
| def get_video_response(self, intent): | |||||
| # Your video URLs here | |||||
| '''video_urls = { | |||||
| "greet": "https://res.cloudinary.com/dam12ojlp/video/upload/v1698260372/Output/greet_a1ngxv.mp4", | |||||
| "appointment_booking": "https://res.cloudinary.com/dam12ojlp/video/upload/v1698260367/Output/appointment_booking_hl5uvy.mp4", | |||||
| "doctor_information": "https://res.cloudinary.com/dam12ojlp/video/upload/v1698260369/Output/doctor_information_dq34py.mp4", | |||||
| "department_information": "https://res.cloudinary.com/dam12ojlp/video/upload/v1698260373/Output/department_information_d7fksd.mp4", | |||||
| "visiting_hours": "https://res.cloudinary.com/dam12ojlp/video/upload/v1698260376/Output/visiting_hours_dzvh3d.mp4", | |||||
| "location_and_directions": "https://res.cloudinary.com/dam12ojlp/video/upload/v1698260375/Output/location_and_directions_ktkluz.mp4", | |||||
| "billing_and_insurance": "https://res.cloudinary.com/dam12ojlp/video/upload/v1698260370/Output/billing_and_insurance_ba77n4.mp4", | |||||
| "medical_records": "https://res.cloudinary.com/dam12ojlp/video/upload/v1698260377/Output/medical_records_akgmlx.mp4", | |||||
| "emergency_services": "https://res.cloudinary.com/dam12ojlp/video/upload/v1698260369/Output/emergency_services_et3eyl.mp4", | |||||
| "covid19_information": "https://res.cloudinary.com/dam12ojlp/video/upload/v1698260371/Output/covid19_information_orlff0.mp4", | |||||
| "feedback_and_complaints": "https://res.cloudinary.com/dam12ojlp/video/upload/v1698260371/Output/feedback_and_complaints_i3ftal.mp4", | |||||
| "thank_you": "https://res.cloudinary.com/dam12ojlp/video/upload/v1698260374/Output/thank_you_sgx29d.mp4", | |||||
| "general_information": "https://res.cloudinary.com/dam12ojlp/video/upload/v1698260375/Output/general_information_nz2zx1.mp4" | |||||
| }''' | |||||
| video_urls = { | |||||
| "greet": "/home/knight/ChatBot_UI/video/greet.mp4", | |||||
| "appointment_booking": "/home/knight/ChatBot_UI/video/appointment_booking.mp4", | |||||
| "doctor_information": "/home/knight/ChatBot_UI/video/doctor_information.mp4", | |||||
| "department_information": "/home/knight/Python_Prog/UI/video/department_information.mp4", | |||||
| "visiting_hours": "/home/knight/ChatBot_UI/video/visiting_hours.mp4", | |||||
| "location_and_directions": "/home/knight/ChatBot_UI/video/location_and_directions.mp4", | |||||
| "billing_and_insurance": "/home/knight/ChatBot_UI/video/billing_and_insurance.mp4", | |||||
| "medical_records": "/home/knight/ChatBot_UI/video/medical_records.mp4", | |||||
| "emergency_services": "/home/knight/ChatBot_UI/video/emergency_services.mp4", | |||||
| "covid19_information": "/home/knight/ChatBot_UI/video/covid19_information.mp4", | |||||
| "feedback_and_complaints": "/home/knight/ChatBot_UI/video/feedback_and_complaints.mp4", | |||||
| "thank_you": "/home/knight/ChatBot_UI/video/thank_you.mp4", | |||||
| "general_information": "/home/knight/ChatBot_UI/video/general_information.mp4" | |||||
| } | |||||
| return video_urls.get(intent, "Video not available for this intent") | |||||
| class HospitalChatbotGUI(QMainWindow): | |||||
| def __init__(self): | |||||
| super().__init__() | |||||
| self.chatbot = HospitalChatbot() | |||||
| self.setWindowTitle("Hospital Chatbot") | |||||
| self.setGeometry(100, 100, 800, 600) | |||||
| self.central_widget = QWidget(self) | |||||
| self.setCentralWidget(self.central_widget) | |||||
| self.layout = QVBoxLayout() | |||||
| self.chatbox = QTextEdit(self) | |||||
| self.layout.addWidget(self.chatbox) | |||||
| self.chatbox.setFixedWidth(800) | |||||
| self.chatbox.setFixedHeight(40) | |||||
| #self.submit_button = QPushButton("Submit", self) | |||||
| #self.submit_button.clicked.connect(self.get_response) | |||||
| #self.layout.addWidget(self.submit_button) | |||||
| self.speak_button = QPushButton("Speak", self) | |||||
| self.speak_button.clicked.connect(self.audio_to_text) | |||||
| self.layout.addWidget(self.speak_button) | |||||
| self.video_label = QLabel("Video Output:", self) | |||||
| self.layout.addWidget(self.video_label) | |||||
| self.video_url_label = QLabel("Video URL: ", self) | |||||
| self.layout.addWidget(self.video_url_label) | |||||
| self.video_widget = QVideoWidget(self) | |||||
| self.layout.addWidget(self.video_widget) | |||||
| #self.video_widget.setFixedWidth(459) | |||||
| self.central_widget.setLayout(self.layout) | |||||
| self.media_player = QMediaPlayer() | |||||
| self.media_player.setVideoOutput(self.video_widget) | |||||
| self.media_player.mediaStatusChanged.connect(self.handle_media_status_changed) | |||||
| self.sample_video_url = "/home/knight/ChatBot_UI/Friendly_new.mp4" | |||||
| self.answer_video_url = None # URL for the answer video | |||||
| self.play_video(self.sample_video_url) | |||||
| def audio_to_text(self): | |||||
| self.chatbox.setPlainText("Listening ...") | |||||
| init_rec = sr.Recognizer() | |||||
| print("Let's speak!!") | |||||
| with sr.Microphone(3) as source: | |||||
| audio_data = init_rec.record(source, duration=2) | |||||
| print("Recognizing your text.............") | |||||
| text = init_rec.recognize_google(audio_data) | |||||
| self.chatbox.setPlainText(text.strip()) | |||||
| self.get_response(text.strip()) | |||||
| print(text) | |||||
| def get_response(self,text): | |||||
| print("Response Text: ",text) | |||||
| #user_input = self.chatbox.toPlainText().strip() | |||||
| user_input = text.strip() | |||||
| intent = self.chatbot.match_intent(user_input) | |||||
| if intent: | |||||
| video_url = self.chatbot.get_video_response(intent) | |||||
| if video_url: | |||||
| self.video_url_label.setText(f"Video URL: {video_url}") | |||||
| self.play_video(video_url) | |||||
| return | |||||
| #response = self.chatbot.get_response(user_input) | |||||
| self.chatbox.clear() | |||||
| #self.display_response(response) | |||||
| self.play_video("/home/knight/ChatBot_UI/Friendly_new.mp4") | |||||
| def play_video(self, video_url): | |||||
| media_content = QMediaContent(QUrl.fromLocalFile(video_url)) | |||||
| self.media_player.setMedia(media_content) | |||||
| self.media_player.play() | |||||
| def handle_media_status_changed(self, status): | |||||
| if status == QMediaPlayer.EndOfMedia: | |||||
| print("Video finished playing.") | |||||
| self.play_video("/home/knight/ChatBot_UI/Friendly_new.mp4") | |||||
| def display_response(self, response): | |||||
| self.webview.setHtml(response) | |||||
| if __name__ == '__main__': | |||||
| app = QApplication(sys.argv) | |||||
| window = HospitalChatbotGUI() | |||||
| window.show() | |||||
| sys.exit(app.exec_()) | |||||