💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
@TOC
基于人脸识别的智慧医疗预约挂号平台介绍
《基于人脸识别的智慧医疗预约挂号平台》是一套融合了人工智能技术与现代医疗服务的综合性管理系统,该系统采用主流的Java开发语言和SpringBoot后端框架,结合Vue前端框架和ElementUI组件库构建了直观友好的B/S架构用户界面,通过MySQL数据库实现数据的高效存储与管理。系统的核心创新在于集成了人脸识别技术,为传统的医疗预约挂号流程带来了智能化升级,用户可通过人脸识别快速完成身份验证和预约操作,极大提升了就医便利性。平台功能涵盖完整的医疗服务流程,包括系统主页展示、用户管理、医生信息维护、医生排班安排、科室分类管理、门诊挂号预约、诊断报告查看、取消预约操作、药品信息管理、处方开药功能等核心业务模块,同时配备轮播图管理、系统简介、系统公告等辅助功能模块,以及个人中心、个人信息管理、密码修改等用户个性化服务功能。整个系统通过SpringMVC和Mybatis框架实现了前后端的高效交互和数据持久化,采用现代化的前后端分离架构设计,不仅保证了系统的稳定性和扩展性,更通过人脸识别技术的应用体现了医疗信息化发展的前沿趋势,为解决传统医疗挂号排队时间长、身份验证繁琐等问题提供了创新的技术解决方案。
基于人脸识别的智慧医疗预约挂号平台演示视频
基于人脸识别的智慧医疗预约挂号平台演示图片
基于人脸识别的智慧医疗预约挂号平台代码展示
from pyspark.sql import SparkSession
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.clustering import KMeans
import cv2
import numpy as np
from datetime import datetime
import face_recognition
import mysql.connector
import json
spark = SparkSession.builder.appName("SmartMedicalSystem").config("spark.sql.adaptive.enabled", "true").getOrCreate()
def registerUserWithFaceRecognition(userData, faceImagePath):
try:
connection = mysql.connector.connect(host='localhost', database='medical_system', user='root', password='password')
cursor = connection.cursor()
image = cv2.imread(faceImagePath)
if image is None:
return {"status": "error", "message": "无法读取人脸图像"}
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
face_locations = face_recognition.face_locations(rgb_image)
if len(face_locations) == 0:
return {"status": "error", "message": "未检测到人脸信息"}
face_encodings = face_recognition.face_encodings(rgb_image, face_locations)
if len(face_encodings) == 0:
return {"status": "error", "message": "人脸特征提取失败"}
face_encoding = face_encodings[0]
face_encoding_str = json.dumps(face_encoding.tolist())
cursor.execute("SELECT face_encoding FROM users WHERE face_encoding IS NOT NULL")
existing_faces = cursor.fetchall()
for existing_face in existing_faces:
existing_encoding = np.array(json.loads(existing_face[0]))
distance = face_recognition.face_distance([existing_encoding], face_encoding)[0]
if distance < 0.6:
return {"status": "error", "message": "该人脸已存在系统中"}
user_id = datetime.now().strftime("%Y%m%d%H%M%S") + str(np.random.randint(1000, 9999))
insert_query = """INSERT INTO users (user_id, username, phone, email, id_card, face_encoding, created_time, status)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)"""
cursor.execute(insert_query, (user_id, userData['username'], userData['phone'], userData['email'],
userData['id_card'], face_encoding_str, datetime.now(), 1))
connection.commit()
user_df = spark.createDataFrame([(user_id, userData['username'], userData['phone'], userData['email'])],
["user_id", "username", "phone", "email"])
user_df.write.mode("append").option("driver", "com.mysql.cj.jdbc.Driver").jdbc("jdbc:mysql://localhost:3306/medical_system", "user_analytics", properties={"user": "root", "password": "password"})
return {"status": "success", "message": "用户注册成功", "user_id": user_id}
except Exception as e:
connection.rollback()
return {"status": "error", "message": f"注册失败: {str(e)}"}
finally:
if connection.is_connected():
cursor.close()
connection.close()
def bookAppointmentWithAnalytics(userId, doctorId, appointmentDate, appointmentTime, departmentId):
try:
connection = mysql.connector.connect(host='localhost', database='medical_system', user='root', password='password')
cursor = connection.cursor()
cursor.execute("SELECT status FROM users WHERE user_id = %s", (userId,))
user_result = cursor.fetchone()
if not user_result or user_result[0] != 1:
return {"status": "error", "message": "用户状态异常,无法预约"}
cursor.execute("SELECT doctor_id, available_slots FROM doctor_schedule WHERE doctor_id = %s AND schedule_date = %s", (doctorId, appointmentDate))
schedule_result = cursor.fetchone()
if not schedule_result:
return {"status": "error", "message": "该医生在指定日期无排班"}
available_slots = json.loads(schedule_result[1])
if appointmentTime not in available_slots:
return {"status": "error", "message": "该时间段不可预约"}
cursor.execute("SELECT COUNT(*) FROM appointments WHERE doctor_id = %s AND appointment_date = %s AND appointment_time = %s AND status = 1", (doctorId, appointmentDate, appointmentTime))
conflict_count = cursor.fetchone()[0]
if conflict_count > 0:
return {"status": "error", "message": "该时间段已被预约"}
cursor.execute("SELECT COUNT(*) FROM appointments WHERE user_id = %s AND appointment_date = %s AND status = 1", (userId, appointmentDate))
user_appointment_count = cursor.fetchone()[0]
if user_appointment_count >= 3:
return {"status": "error", "message": "当日预约数量已达上限"}
appointment_id = "APT" + datetime.now().strftime("%Y%m%d%H%M%S") + str(np.random.randint(100, 999))
insert_appointment = """INSERT INTO appointments (appointment_id, user_id, doctor_id, department_id,
appointment_date, appointment_time, created_time, status)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)"""
cursor.execute(insert_appointment, (appointment_id, userId, doctorId, departmentId,
appointmentDate, appointmentTime, datetime.now(), 1))
available_slots.remove(appointmentTime)
update_schedule = "UPDATE doctor_schedule SET available_slots = %s WHERE doctor_id = %s AND schedule_date = %s"
cursor.execute(update_schedule, (json.dumps(available_slots), doctorId, appointmentDate))
connection.commit()
appointment_data = [(appointment_id, userId, doctorId, departmentId, appointmentDate, appointmentTime)]
appointment_df = spark.createDataFrame(appointment_data, ["appointment_id", "user_id", "doctor_id", "department_id", "appointment_date", "appointment_time"])
appointment_df.write.mode("append").option("driver", "com.mysql.cj.jdbc.Driver").jdbc("jdbc:mysql://localhost:3306/medical_system", "appointment_analytics", properties={"user": "root", "password": "password"})
cursor.execute("SELECT COUNT(*) as total, department_id FROM appointments WHERE appointment_date = %s GROUP BY department_id", (appointmentDate,))
dept_stats = cursor.fetchall()
if dept_stats:
stats_df = spark.createDataFrame(dept_stats, ["total_appointments", "department_id"])
vectorAssembler = VectorAssembler(inputCols=["total_appointments"], outputCol="features")
stats_vector_df = vectorAssembler.transform(stats_df)
kmeans = KMeans(k=3, seed=1, featuresCol="features")
model = kmeans.fit(stats_vector_df)
predictions = model.transform(stats_vector_df)
predictions.select("department_id", "total_appointments", "prediction").show()
return {"status": "success", "message": "预约成功", "appointment_id": appointment_id}
except Exception as e:
connection.rollback()
return {"status": "error", "message": f"预约失败: {str(e)}"}
finally:
if connection.is_connected():
cursor.close()
connection.close()
def managePrescriptionWithDataAnalysis(doctorId, patientId, appointmentId, medicineList, dosageInstructions):
try:
connection = mysql.connector.connect(host='localhost', database='medical_system', user='root', password='password')
cursor = connection.cursor()
cursor.execute("SELECT appointment_id, status FROM appointments WHERE appointment_id = %s AND doctor_id = %s", (appointmentId, doctorId))
appointment_result = cursor.fetchone()
if not appointment_result or appointment_result[1] != 1:
return {"status": "error", "message": "预约信息不存在或状态异常"}
cursor.execute("SELECT user_id FROM appointments WHERE appointment_id = %s", (appointmentId,))
appointment_user = cursor.fetchone()
if not appointment_user or appointment_user[0] != patientId:
return {"status": "error", "message": "患者信息与预约不匹配"}
prescription_id = "PRE" + datetime.now().strftime("%Y%m%d%H%M%S") + str(np.random.randint(100, 999))
total_cost = 0
prescription_details = []
for medicine in medicineList:
cursor.execute("SELECT medicine_id, medicine_name, unit_price, stock_quantity FROM medicines WHERE medicine_id = %s", (medicine['medicine_id'],))
medicine_info = cursor.fetchone()
if not medicine_info:
return {"status": "error", "message": f"药品{medicine['medicine_id']}不存在"}
if medicine_info[3] < medicine['quantity']:
return {"status": "error", "message": f"药品{medicine_info[1]}库存不足"}
item_cost = medicine_info[2] * medicine['quantity']
total_cost += item_cost
prescription_details.append({
"medicine_id": medicine['medicine_id'],
"medicine_name": medicine_info[1],
"quantity": medicine['quantity'],
"unit_price": medicine_info[2],
"total_price": item_cost,
"dosage": medicine.get('dosage', '按医嘱使用')
})
update_stock = "UPDATE medicines SET stock_quantity = stock_quantity - %s WHERE medicine_id = %s"
cursor.execute(update_stock, (medicine['quantity'], medicine['medicine_id']))
insert_prescription = """INSERT INTO prescriptions (prescription_id, doctor_id, patient_id, appointment_id,
prescription_details, total_cost, dosage_instructions, created_time, status)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)"""
cursor.execute(insert_prescription, (prescription_id, doctorId, patientId, appointmentId,
json.dumps(prescription_details), total_cost, dosageInstructions, datetime.now(), 1))
update_appointment = "UPDATE appointments SET status = 2 WHERE appointment_id = %s"
cursor.execute(update_appointment, (appointmentId,))
connection.commit()
prescription_data = [(prescription_id, doctorId, patientId, total_cost, len(medicineList))]
prescription_df = spark.createDataFrame(prescription_data, ["prescription_id", "doctor_id", "patient_id", "total_cost", "medicine_count"])
prescription_df.write.mode("append").option("driver", "com.mysql.cj.jdbc.Driver").jdbc("jdbc:mysql://localhost:3306/medical_system", "prescription_analytics", properties={"user": "root", "password": "password"})
cursor.execute("SELECT medicine_id, SUM(quantity) as total_prescribed FROM prescription_medicines WHERE DATE(created_time) = CURDATE() GROUP BY medicine_id ORDER BY total_prescribed DESC LIMIT 10")
popular_medicines = cursor.fetchall()
if popular_medicines:
medicine_df = spark.createDataFrame(popular_medicines, ["medicine_id", "total_prescribed"])
medicine_df.createOrReplaceTempView("popular_medicines")
top_medicines = spark.sql("SELECT medicine_id, total_prescribed FROM popular_medicines WHERE total_prescribed > 5")
top_medicines.show()
return {"status": "success", "message": "处方开具成功", "prescription_id": prescription_id, "total_cost": total_cost}
except Exception as e:
connection.rollback()
return {"status": "error", "message": f"处方开具失败: {str(e)}"}
finally:
if connection.is_connected():
cursor.close()
connection.close()
基于人脸识别的智慧医疗预约挂号平台文档展示
💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目