|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412 |
- 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_())
|