news 2026/9/7 13:43:10

深度学习目标检测中如何使用yolov8及结合Streamlit进行跌倒检测摔倒检测_建立基于yolov8的老年人及行人跌倒检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习目标检测中如何使用yolov8及结合Streamlit进行跌倒检测摔倒检测_建立基于yolov8的老年人及行人跌倒检测

基于YOLOv8的行人跌倒检测是一个非常实用的应用场景,对于老年人的安全监控。使用YOLOv8作为模型基础,并结合Streamlit来创建一个用户友好的Web界面

文章目录

      • **标题:基于YOLOv8的行人跌倒检测系统**
      • **1. 安装依赖**
      • **2. 数据集准备**
      • **3. 配置YOLOv8并训练模型**
        • 创建`data.yaml`文件
        • 训练模型
      • **4. Streamlit Web应用开发**
        • 创建Streamlit应用
      • **5. 运行Streamlit应用**

以下文字及代码仅供参考。

yolov8跌倒检测摔倒检测老年人跌倒检测行人跌倒_检测基于yolov8的行人跌倒检测

技术栈:yolo8+streamlit 识别两类:跌倒的人、站立的人
识别图片与视频,也支持本地摄像头识别。其中图片识别支持统计检测到的物体数量,并返回到前端页面显示
UI界面动态调节模型置信度

1

基于YOLOv8的行人跌倒检测是一个非常实用的应用场景,对于老年人的安全监控。使用YOLOv8作为模型基础,并结合Streamlit来创建一个用户友好的Web界面。以下是详细的实现步骤:

标题:基于YOLOv8的行人跌倒检测系统


1. 安装依赖

首先,确保安装了必要的Python库和工具:

pipinstallultralytics streamlit opencv-python-headless

2. 数据集准备

假设同学你有了 那啥 标注好的数据集,包括图片和对应的YOLO格式标签(txt文件),类别为:

  • 0: 站立的人
  • 1: 跌倒的人

数据集应该按照如下结构组织:

fall_detection_dataset/ ├── images/ │ ├── train/ │ │ ├── img1.jpg │ │ └── ... │ ├── val/ │ │ ├── img501.jpg │ │ └── ... │ └── test/ │ ├── img601.jpg │ └── ... └── labels/ ├── train/ │ ├── img1.txt │ └── ... ├── val/ │ ├── img501.txt │ └── ... └── test/ ├── img601.txt └── ...

3. 配置YOLOv8并训练模型

在YOLOv8中,你可以直接通过命令行进行训练。创建一个data.yaml文件来配置你的数据集路径和类别信息。

创建data.yaml文件
train:./path/to/fall_detection_dataset/images/train/val:./path/to/fall_detection_dataset/images/val/nc:2names:['standing_person','fallen_person']
训练模型

使用YOLOv8进行训练:

yolotask=detectmode=trainmodel=yolov8s.ptdata=path/to/data.yamlepochs=100imgsz=640
  • model=yolov8s.pt: 使用YOLOv8的小型版本。
  • epochs=100: 训练轮数可以根据实际情况调整。
  • imgsz=640: 输入图像尺寸。

4. Streamlit Web应用开发

使用Streamlit来构建Web界面,支持图片、视频和摄像头输入,并且可以动态调节模型置信度和选择不同的模型权重。

创建Streamlit应用

创建一个名为app.py的文件,并编写如下代码:

importstreamlitasstfromultralyticsimportYOLOimportcv2importnumpyasnpfromPILimportImageimporttempfile# 加载模型@st.cache(allow_output_mutation=True)defload_model(model_path):returnYOLO(model_path)# 图片预测defpredict_image(image,model,conf_threshold):results=model.predict(image,conf=conf_threshold)forresultinresults:boxes=result.boxes.xyxy.cpu().numpy()confidences=result.boxes.conf.cpu().numpy()class_ids=result.boxes.cls.cpu().numpy()forbox,conf,cls_idinzip(boxes,confidences,class_ids):label=f'{result.names[int(cls_id)]}{conf:.2f}'color=(0,255,0)ifcls_id==0else(0,0,255)image=cv2.rectangle(np.array(image),tuple(box[:2].astype(int)),tuple(box[2:].astype(int)),color,2)image=cv2.putText(np.array(image),label,tuple(box[:2].astype(int)),cv2.FONT_HERSHEY_SIMPLEX,0.9,color,2)returnimage,len(results[0].boxes)# 视频预测defpredict_video(video_path,model,conf_threshold):cap=cv2.VideoCapture(video_path)frame_width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))frame_height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))fps=int(cap.get(cv2.CAP_PROP_FPS))output_video_path="output.mp4"fourcc=cv2.VideoWriter_fourcc(*'mp4v')out=cv2.VideoWriter(output_video_path,fourcc,fps,(frame_width,frame_height))whilecap.isOpened():ret,frame=cap.read()ifnotret:breakresults=model.predict(frame,conf=conf_threshold)forresultinresults:boxes=result.boxes.xyxy.cpu().numpy()confidences=result.boxes.conf.cpu().numpy()class_ids=result.boxes.cls.cpu().numpy()forbox,conf,cls_idinzip(boxes,confidences,class_ids):label=f'{result.names[int(cls_id)]}{conf:.2f}'color=(0,255,0)ifcls_id==0else(0,0,255)frame=cv2.rectangle(frame,tuple(box[:2].astype(int)),tuple(box[2:].astype(int)),color,2)frame=cv2.putText(frame,label,tuple(box[:2].astype(int)),cv2.FONT_HERSHEY_SIMPLEX,0.9,color,2)out.write(frame)cap.release()out.release()returnoutput_video_path# 主函数defmain():st.title("基于YOLOv8的行人跌倒检测系统")model_path=st.sidebar.file_uploader("上传模型权重",type=["pt"])conf_threshold=st.sidebar.slider("置信度阈值",0.0,1.0,0.5)ifmodel_path:model=load_model(model_path.name)else:model=load_model('yolov8s.pt')# 默认模型option=st.selectbox("选择输入类型",("图片","视频","摄像头"))ifoption=="图片":uploaded_file=st.file_uploader("上传图片",type=["jpg","jpeg","png"])ifuploaded_fileisnotNone:image=Image.open(uploaded_file)result_image,count=predict_image(image,model,conf_threshold)st.image(result_image,caption="检测结果")st.write(f"检测到的目标数量:{count}")elifoption=="视频":uploaded_file=st.file_uploader("上传视频",type=["mp4"])ifuploaded_fileisnotNone:tfile=tempfile.NamedTemporaryFile(delete=False)tfile.write(uploaded_file.read())output_video_path=predict_video(tfile.name,model,conf_threshold)st.video(output_video_path)elifoption=="摄像头":st.write("摄像头功能暂时未实现,请稍后关注更新。")if__name__=="__main__":main()

5. 运行Streamlit应用

在终端中运行以下命令启动Streamlit应用:

streamlit run app.py

访问显示的本地地址(通常是http://localhost:8501),即可看到你的行人跌倒检测系统的Web界面。


从安装依赖、准备数据集、配置YOLOv8、训练模型到构建Streamlit Web应用程序的完整实现流程。通过这个流程,使用YOLOv8模型来完成行人跌倒检测任务,并通过直观的Web界面与之交互。

仅供参考,我的同学们。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 13:38:17

Pico串口通信实战:从接线到MicroPython调试全攻略

串口通信这四个字,在嵌入式项目里几乎天天被挂在嘴边。Pico 作为一块几十块钱的开发板,UART 资源虽然不算多,但足够应付绝大多数传感器、串口屏、舵机控制板和数据采集场景。我最早接触 Pico 串口的时候,以为只是发个字符串的事&a…

作者头像 李华
网站建设 2026/9/7 13:36:07

制造业B2B营销的大数据策略:客户画像与精准转化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 13:34:58

Mem0实战:给AI应用装上长期记忆,从Hello World到生产实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 13:34:55

Hermes Agent部署实战:从环境配置到自主代码生成任务

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 13:29:38

循环依赖问题全解析:从代码到架构的解决方案与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华