# LJ360 - 360全景人员接近预警系统

LJ360是一个基于OpenCV开发的360度全景人员接近预警系统，支持多摄像头拼接、雷达距离检测和人体检测、web配置等功能。

## 更新
- 2025-12-25: CPP版本360环视成功运行
- 2025-12-23: 增加Flask框架，支持WEB预览
- 2025-12-20: 增加YOLOv5模型，支持人员检测
- 2025-12-19: Python版本360环视成功运行
- 2025-12-16: 单路摄像头投影生成
- 2025-12-15: 加载V4L2后端 移除gstreamer
- 2025-12-12：模拟摄像头内参矩阵和畸变系数计算
---
- 2025-12-02: 本地视频360合成
- 2025-11-03：YOLO融合 雷达预警
- 2025-11-01：网络摄像头四分屏
- 2025-10-30：初始版本发布


## 功能

- **多摄像头拼接**：支持4个鱼眼摄像头实时拼接成360度全景视图
- **图像校正**：自动对鱼眼镜头的畸变进行校正
- **雷达检测**：支持串口雷达距离检测，实时显示障碍物距离
- **人体检测**：集成YOLO目标检测算法，实时检测行人
- **Web界面**：提供Web界面查看全景视频流
- **硬件加速**：支持RKNN神经网络加速和OpenCL GPU加速

## 系统要求

- Python 3.8
- OpenCV 4.0+
- NumPy
- RKNN Toolkit Lite (用于神经网络加速)
- Serial (用于雷达通信)
- Flask (用于Web界面)

## 硬件要求

- 4个鱼眼摄像头 (1920*1080@25fps)
- 4路AHD转MIPI TP2815接口板
- 摄像头映射关系：video0(前)、video1(左)、video2(后)、video3(右)
- 雷达模块 (支持串口通信)
- RK3588平台 (用于RKNN加速和系统主控)

## 安装步骤

1. 克隆项目代码：
```bash
git clone <repository_url>
cd LJ360
```

2. 安装依赖：
```bash
NULL
```

3. 配置摄像头参数：
   - 在`yaml/`目录下为每个摄像头创建配置文件
   - 配置文件包含摄像头的内参、外参和畸变参数

4. 配置雷达参数：
   - 在`web.py`中修改雷达串口配置
   - 调整距离阈值参数

## 使用方法

### 1. 主要运行文件 (推荐)

```bash
python3 web.py
```

该脚本是系统的主要运行文件，同时实现：
- 4个摄像头的实时图像捕获
- 鱼眼图像校正和拼接
- 360度全景视图生成
- Web服务器启动，提供全景视频流访问

启动后，在浏览器中访问`http://localhost:5000`查看全景视频流。
显示器同步显示360度全景视图和YOLO检测结果。


### 2. 运行摄像头校准

```bash
python run_calibrate_camera.py
```

用于校准摄像头参数，生成yaml配置文件。

### 3. 生成投影映射

```bash
python run_get_projection_maps.py
```

生成图像投影映射，用于提高拼接效率。

### 4. 生成权重矩阵

```bash
python run_get_weight_matrices.py
```

生成图像拼接的权重矩阵，用于平滑过渡。

## 项目结构

```
LJ360/
├── cpp/                    # C++实现的相关功能 开发中
│   └── AdasSourrondView/   # 360度全景视图C++实现
├── py_utils/               # Python工具模块
│   ├── rknn_executor.py    # RKNN模型执行器
│   └── coco_utils.py       # COCO数据集工具
├── surround_view/          # 全景视图核心模块
│   ├── birdview.py         # 鸟瞰图生成
│   ├── fisheye_camera.py   # 鱼眼相机模型
│   ├── capture_thread.py   # 图像捕获线程
│   └── process_thread.py   # 图像处理线程
├── yaml/                   # 摄像头配置文件
├── model/                  # 深度学习模型
├── images/                 # 静态图像资源
├── web.py                  # 主程序
├── run_live_demo.py        # 实时演示脚本
├── run_calibrate_camera.py # 摄像头校准脚本
├── run_get_projection_maps.py # 生成投影映射脚本
├── run_get_weight_matrices.py # 生成权重矩阵脚本
└── README.md               # 项目说明文档
```

## 配置文件说明

### 摄像头配置文件 (yaml/*.yaml)

每个摄像头需要一个yaml配置文件，包含以下参数：

- `camera_matrix`: 相机内参矩阵
- `dist_coeffs`: 畸变系数
- `rotation_vector`: 旋转向量
- `translation_vector`: 平移向量
- `projection_matrix`: 投影矩阵

### 雷达配置

在`web.py`中配置雷达参数：

- `RADAR_SERIAL_PORT`: 雷达串口
- `RADAR_BAUDRATE`: 波特率
- `DISTANCE_THRESHOLD`: 距离阈值

### YOLO配置

在`web.py`中配置YOLO目标检测参数：

- `YOLO_MODEL_PATH`: YOLO模型路径
- `OBJ_THRESH`: 目标检测阈值
- `NMS_THRESH`: 非极大值抑制阈值
- `IMG_SIZE`: 输入图像大小

## 注意事项

1. 确保所有摄像头的分辨率设置一致
2. 摄像头校准需要使用棋盘格进行
3. 雷达模块需要正确连接到串口
4. RKNN模型需要使用RKNN Toolkit转换生成
5. 运行前请确保所有依赖已正确安装

## 故障排除

### 摄像头无法连接

- 检查摄像头ID是否正确
- 确保摄驱动框架V4L2已安装
- 检查MIPI接口连接

### 图像拼接异常

- 检查摄像头校准参数
- 确保所有摄像头的视角重叠区域足够
- 调整权重矩阵参数

### 雷达无数据

- 检查串口连接
- 检查雷达波特率设置
- 确保雷达模块正常工作

## 更新日志

### v1.0.0
- 初始版本发布
- 支持4摄像头拼接
- 集成雷达距离检测
- 支持人体检测
- 提供Web界面

## 许可证

本项目采用MIT许可证，详见LICENSE文件。

## 联系方式

如有问题或建议，请联系项目维护者。
