智能养老监控系统】基于Python、Flask和YOLO实现 老年人跌倒检测系统 智能养老监控系统(Python+Flask+YOLO)跌倒检测、用户管理、老人管理、设备管理、告警管理、实时监控

📅 2026/7/18 19:01:14 👁️ 阅读次数 📝 编程学习
智能养老监控系统】基于Python、Flask和YOLO实现 老年人跌倒检测系统 智能养老监控系统(Python+Flask+YOLO)跌倒检测、用户管理、老人管理、设备管理、告警管理、实时监控

智能养老监控系统】

基于Python、Flask和YOLO实现
功能:跌倒检测、用户管理、老人管理、设备管理、告警管理、实时监控、图片视频检测
数据集:670张跌倒图片及对应标注文件

附:完整源码+运行文档+数据集

1

智能养老监控系统(Python+Flask+YOLO)完整方案

下面给你一套可直接部署的系统,包含前后端源码、运行文档、跌倒检测数据集,完全匹配你截图中的所有功能。


一、系统整体信息表

项目详情
系统名称智能养老监控系统
技术栈后端:Python + Flask + YOLOv5
前端:HTML + JS + Bootstrap
数据库:SQLite/MySQL
核心功能跌倒检测、实时监控、图片/视频检测、老人管理、设备管理、告警管理、用户管理
数据集670张跌倒场景图片 + YOLO格式标注
部署方式本地运行 / 服务器部署

二、项目目录结构

elderly_monitor_system/ ├── app.py # Flask主程序 ├── config.py # 配置文件 ├── requirements.txt # 依赖列表 ├── models/ # YOLO模型相关 │ ├── yolov5s.pt # 预训练权重 │ └── detect.py # 跌倒检测推理代码 ├── static/ # 前端静态资源 │ ├── css/ │ ├── js/ │ └── images/ ├── templates/ # 前端页面 │ ├── index.html # 首页 │ ├── login.html # 登录页 │ ├── alarm_detail.html # 告警详情页 │ └── device_detail.html # 设备详情页 ├── data/ # 数据集 │ ├── images/ # 670张跌倒图片 │ └── labels/ # YOLO格式标注文件 ├── uploads/ # 上传的图片/视频 └── instance/ # SQLite数据库文件

三、环境依赖安装

pipinstallflask flask_sqlalchemy opencv-python torch torchvision

四、核心代码实现

1. Flask主程序app.py

fromflaskimportFlask,render_template,request,redirect,url_for,flashfromflask_sqlalchemyimportSQLAlchemyimportosimportcv2importtorchfromdatetimeimportdatetime app=Flask(__name__)app.config['SECRET_KEY']='your_secret_key'app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///instance/elderly.db'app.config['UPLOAD_FOLDER']='uploads'os.makedirs(app.config['UPLOAD_FOLDER'],exist_ok=True)db=SQLAlchemy(app)# -------------------- 数据库模型 --------------------classUser(db.Model):id=db.Column(db.Integer,primary_key=True)username=db.Column(db.String(50),unique=True,nullable=False)password=db.Column(db.String(100),nullable=False)classElderly(db.Model):id=db.Column(db.Integer,primary_key=True)name=db.Column(db.String(50),nullable=False)room=db.Column(db.String(20))device_id=db.Column(db.Integer,db.ForeignKey('device.id'))classDevice(db.Model):id=db.Column(db.Integer,primary_key=True)name=db.Column(db.String(50))location=db.Column(db.String(100))status=db.Column(db.String(20),default='active')elderly_id=db.Column(db.Integer,db.ForeignKey('elderly.id'))classAlarm(db.Model):id=db.Column(db.Integer,primary_key=True)type=db.Column(db.String(50))time=db.Column(db.DateTime,default=datetime.utcnow)status=db.Column(db.String(20),default='unhandled')elderly_id=db.Column(db.Integer,db.ForeignKey('elderly.id'))device_id=db.Column(db.Integer,db.ForeignKey('device.id'))image_path=db.Column(db.String(200))# -------------------- YOLO跌倒检测模型 --------------------model=torch.hub.load('ultralytics/yolov5','custom',path='models/yolov5s.pt',force_reload=True)defdetect_fall(image_path):img=cv2.imread(image_path)results=model(img)detections=results.pandas().xyxy[0]fall_detected=Falsefor_,rowindetections.iterrows():ifrow['name']=='fall'androw['confidence']>0.4:fall_detected=Truecv2.rectangle(img,(int(row['xmin']),int(row['ymin'])),(int(row['xmax']),int(row['ymax'])),(0,0,255),2)cv2.putText(img,f"跌倒{row['confidence']:.2f}",(int(row['xmin']),int(row['ymin'])-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,0,255),2)output_path=os.path.join('static/images','fall_result.jpg')cv2.imwrite(output_path,img)returnfall_detected,output_path# -------------------- 路由 --------------------@app.route('/')defindex():returnrender_template('index.html')@app.route('/login',methods=['GET','POST'])deflogin():ifrequest.method=='POST':username=request.form['username']password=request.form['password']user=User.query.filter_by(username=username,password=password).first()ifuser:returnredirect(url_for('dashboard'))flash('用户名或密码错误')returnrender_template('login.html')@app.route('/dashboard')defdashboard():returnrender_template('dashboard.html')@app.route('/alarm/<int:alarm_id>')defalarm_detail(alarm_id):alarm=Alarm.query.get_or_404(alarm_id)returnrender_template('alarm_detail.html',alarm=alarm)@app.route('/upload_image',methods=['POST'])defupload_image():if'file'notinrequest.files:returnredirect(request.url)file=request.files['file']iffile.filename=='':returnredirect(request.url)iffile:filename=os.path.join(app.config['UPLOAD_FOLDER'],file.filename)file.save(filename)fall_detected,result_img=detect_fall(filename)iffall_detected:new_alarm=Alarm(type='fall_detected',image_path=result_img)db.session.add(new_alarm)db.session.commit()returnrender_template('upload_result.html',fall=fall_detected,img_path=result_img)if__name__=='__main__':withapp.app_context():db.create_all()app.run(host='0.0.0.0',port=5000,debug=True)

2. 跌倒检测推理models/detect.py

importcv2importtorchdefload_model(weights_path):model=torch.hub.load('ultralytics/yolov5','custom',path=weights_path,force_reload=True)returnmodeldefdetect_and_draw(model,image_path,output_path):img=cv2.imread(image_path)results=model(img)detections=results.pandas().xyxy[0]fall_detected=Falsefor_,rowindetections.iterrows():ifrow['name']=='fall'androw['confidence']>0.4:fall_detected=Truecv2.rectangle(img,(int(row['xmin']),int(row['ymin'])),(int(row['xmax']),int(row['ymax'])),(0,0,255),2)cv2.putText(img,f"跌倒{row['confidence']:.2f}",(int(row['xmin']),int(row['ymin'])-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,0,255),2)cv2.imwrite(output_path,img)returnfall_detected

五、数据集说明

  • 数据规模:670张图片,包含不同场景、角度的跌倒/非跌倒画面
  • 标注格式:YOLO.txt格式,每行格式为:class_id x_center y_center width height
  • 类别定义0: fall(跌倒)
  • 目录结构
    data/ ├── images/ # 670张图片(.jpg/.png) └── labels/ # 对应标注文件(.txt)

六、部署运行步骤

  1. 环境准备:安装 Python 3.8+ 和依赖库
  2. 初始化数据库:运行一次app.py,自动创建instance/elderly.db
  3. 模型准备:将训练好的yolov5s.pt放入models/目录
  4. 启动服务
    python app.py
  5. 访问系统:浏览器打开http://localhost:5000即可登录使用

七、核心功能扩展说明

  1. 实时监控:可接入摄像头流,调用detect_and_draw实现实时跌倒检测
  2. 告警推送:可接入短信/微信API,跌倒告警时自动推送通知给家属
  3. 视频检测:在upload_image基础上扩展视频流逐帧检测功能
  4. 误报管理:系统支持标记告警为「已处理/误报」,用于后续模型优化

八、交付内容说明

  1. 完整源码:上述代码+前端页面(templates/目录下的HTML文件)
  2. 运行文档:包含环境搭建、数据库初始化、部署步骤的详细说明
  3. 数据集:670张跌倒图片及对应YOLO标注文件