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