# Sleeping-post-detection

# 睡岗检测

## 场景

本项目适用于一些需要持续工作的岗位或者某些重要的岗位，防止工作人员出现意外

## 介绍

本项目是基于yolov8模型制作的睡岗检测

## 代码思路

1.为人头描定数据框，并且设置中心点

2.只要中心点在一定时间内，一定范围内运动，或者保持不动，便判定为睡岗


## 使用说明：

### 注意：在使用前要确认环境已经搭配好了

### 1.需要安装依赖（我一般使用conda安装）

`conda install --yes --file requirements.txt`

### 2.需要安装opencv库

`conda install -c conda-forge opencv`

### 3.大部分需要安装的库都可以在pycharm中直接下载（如有遗漏）

### 4.指定训练好的模型进行测试

`model_path = r'\detect\train\weights\best.pt'`   # 加载训练好的模型

`model = YOLO(model_path)  `                           # model是加载后的训练模型实例

### 5.进行静态检测的时候我们要注意我们当前代码仅支持 .png, .jpg, .jpeg, .bmp 等常见图像格式

### 6.phototest文件不仅支持单张图片检测并且支持批量检测（或文件夹检测），只需要按照下面代码指定文件夹即可

`infer_and_draw(r'C:\path\to\your\image\folder', r'C:\ultralytics\output')`

### 7.以下是对动态检测的一些代码讲解

#### 7.1 视频输入：

使用 cv2.VideoCapture() 打开视频文件或 RTSP 流，同时支持本地视频文件和网络串流

#### 7.2 YOLO 检测：

每隔 `detection_interval = 10` 帧，模型会对帧进行目标检测，返回检测到的边界框（boxes）和置信度（confidences）。
检测的边界框经过过滤和合并后保存，并且通过 cv2.TrackerKCF_create() 创建跟踪器来跟踪每个目标。

#### 7.3 状态检测：

通过历史跟踪中心位置（center_history），每个物体的中心点会被记录到一个 deque（长度为 tracking_window_size = 250）。如果该物体的中心点在一段时间内变化很小，程序会在图像上显示“睡眠”（SLEEP），表明物体处于静止状态。
通过计算中心点的距离变化（稳定状态的判断），判断物体是否保持静止。

### 运行方法(以下文件均在Sleeping-post-detection-first-edition目录下)

phototest文件夹专门负责检测图片

fps01 ~ fps04 文件夹代表了测试视频和实时检测时所犯的错误和更正过程，fps04为最终优化版本


