智能养老监控系统】
基于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)
六、部署运行步骤
- 环境准备:安装 Python 3.8+ 和依赖库
- 初始化数据库:运行一次
app.py,自动创建instance/elderly.db - 模型准备:将训练好的
yolov5s.pt放入models/目录 - 启动服务:
python app.py - 访问系统:浏览器打开
http://localhost:5000即可登录使用
七、核心功能扩展说明
- 实时监控:可接入摄像头流,调用
detect_and_draw实现实时跌倒检测 - 告警推送:可接入短信/微信API,跌倒告警时自动推送通知给家属
- 视频检测:在
upload_image基础上扩展视频流逐帧检测功能 - 误报管理:系统支持标记告警为「已处理/误报」,用于后续模型优化
八、交付内容说明
- 完整源码:上述代码+前端页面(
templates/目录下的HTML文件) - 运行文档:包含环境搭建、数据库初始化、部署步骤的详细说明
- 数据集:670张跌倒图片及对应YOLO标注文件