基于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-headless2. 数据集准备
假设同学你有了 那啥 标注好的数据集,包括图片和对应的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=640model=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界面与之交互。
仅供参考,我的同学们。