# 多摄像头网格布局监控系统 一个基于Flask的Web应用,用于实时监控多个摄像头流,并以网格布局展示。支持动态添加/删除摄像头、实时画面显示、日志记录等功能。 ## 功能特性 - **多摄像头支持**:可同时监控最多6个摄像头(可配置)。 - **网格布局**:自适应网格展示,支持1x1到3x3布局。 - **实时画面**:通过RTSP流获取实时视频,低延迟显示。 - **摄像头管理**:提供RESTful API动态管理摄像头(启动/停止/添加/删除)。 - **日志系统**:自动记录运行日志到`./logs/multi_camera.log`,支持日志轮转。 - **环境配置**:通过环境变量灵活配置,无需修改代码。 - **无健康监控**:已移除CPU/内存监控功能,专注于核心监控。 - **无认证**:已移除登录和令牌认证,简化访问。 ## 系统要求 - Python 3.8+ - Flask 2.3+ - OpenCV (opencv-python) - 其他依赖见`requirements.txt` ## 安装步骤 1. **克隆仓库** ```bash git clone cd multi_camera_project_v0.1 ``` 2. **创建虚拟环境(可选)** ```bash python3 -m venv venv source venv/bin/activate # Linux/Mac # 或 venv\Scripts\activate # Windows ``` 3. **安装依赖** ```bash pip install -r requirements.txt ``` 4. **环境配置** - 复制`.env.example`为`.env`: ```bash cp .env.example .env ``` - 编辑`.env`文件,设置你的摄像头RTSP地址和其他参数: ``` BASE_URL=http://10.80.0.2:5045 FLASK_DEBUG=False PORT=5002 HOST=0.0.0.0 CAMERA_URLS=rtsp://admin:password@192.168.1.101:554/stream1,rtsp://... ``` 注意:`CAMERA_URLS`是以逗号分隔的RTSP URL列表,最多支持6个摄像头。 ## 运行应用 ### 开发模式 ```bash python3 run.py ``` 访问 http://localhost:5002 查看网格监控界面。 ### 生产部署 建议使用Gunicorn或uWSGI作为WSGI服务器: ```bash gunicorn -w 4 -b 0.0.0.0:5002 "app:create_app()" ``` ## 项目结构 ``` multi_camera_project_v0.1/ ├── app/ # Flask应用 │ ├── __init__.py # 应用工厂和日志配置 │ ├── config.py # 配置变量(从环境变量读取) │ ├── camera_manager.py # 摄像头管理类 │ ├── routes/ │ │ └── main.py # 路由定义(API和页面) │ └── templates/ │ └── index.html # 前端网格页面 ├── static/ # 静态资源 │ ├── css/style.css │ └── js/app.js ├── logs/ # 日志目录(自动创建) ├── .env.example # 环境变量示例 ├── .env # 实际环境变量(本地,不提交) ├── requirements.txt # Python依赖 ├── run.py # 启动脚本 └── README.md # 本文档 ``` ## API接口 ### 获取摄像头状态 ``` GET /api/cameras ``` 返回所有摄像头的状态(ID、URL、是否活跃、最后帧时间)。 ### 启动/停止摄像头 ``` POST /api/camera//start POST /api/camera//stop ``` 启动或停止指定ID的摄像头。 ### 添加摄像头 ``` POST /api/camera/add Content-Type: application/json { "url": "rtsp://..." } ``` 添加一个新的摄像头(最多6个)。 ### 删除摄像头 ``` DELETE /api/camera/ ``` 删除指定ID的摄像头。 ### 获取实时帧 ``` GET /api/camera//frame ``` 返回指定摄像头的最新JPEG图像(用于前端显示)。 ## 配置说明 - `BASE_URL`:前端访问的基础URL,用于构建API端点。 - `FLASK_DEBUG`:Flask调试模式,生产环境设为`False`。 - `PORT`:服务端口,默认5002。 - `HOST`:绑定地址,`0.0.0.0`允许外部访问。 - `CAMERA_URLS`:摄像头RTSP URL列表,用逗号分隔。 ## 日志 日志文件位于`./logs/multi_camera.log`,每天自动轮转,保留最近10个日志文件。 ## 常见问题 1. **摄像头画面不显示** - 检查RTSP URL是否正确,确保网络可达。 - 检查OpenCV是否支持RTSP(可能需要编译FFmpeg支持)。 2. **端口占用** - 修改`.env`中的`PORT`变量,然后重启应用。 3. **依赖安装失败** - 确保已安装Python开发工具(如`python3-dev`、`libopencv-dev`)。 ## 版本历史 - v0.1 (2025-12-13) - 移除健康监控(CPU/内存)功能。 - 移除Docker和启动脚本。 - 移除认证相关代码(登录、SECRET_KEY)。 - 配置日志目录为`./logs`。 - 清理冗余代码和敏感信息。 ## 许可证 本项目仅供内部使用,未经许可不得分发。 ## 贡献 欢迎提交Issue和Pull Request。