更新项目配置:添加.gitignore,清理日志和缓存文件,更新应用代码
This commit is contained in:
290
README.md
290
README.md
@@ -1,197 +1,171 @@
|
||||
# 多摄像头实时监控系统
|
||||
# 多摄像头网格布局监控系统
|
||||
|
||||
## 项目概述
|
||||
这是一个基于Flask的多摄像头实时监控系统,支持6个摄像头的网格布局显示,具有完整的登录认证、实时状态监控和摄像头控制功能。
|
||||
一个基于Flask的Web应用,用于实时监控多个摄像头流,并以网格布局展示。支持动态添加/删除摄像头、实时画面显示、日志记录等功能。
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 🎥 摄像头功能
|
||||
- **6个摄像头网格布局**:3×2无缝连接网格
|
||||
- **实时视频流**:直接嵌入原系统摄像头页面
|
||||
- **独立摄像头控制**:每个摄像头可单独操作
|
||||
- **摄像头编号切换**:支持0-7号摄像头切换
|
||||
|
||||
### 🎛️ 控制功能
|
||||
- **刷新所有摄像头**:一键刷新所有视频流
|
||||
- **重新连接系统**:自动重新登录认证
|
||||
- **全屏显示**:支持单个摄像头全屏显示
|
||||
- **实时状态监控**:显示内存、CPU使用率和当前时间
|
||||
|
||||
### 🔐 认证功能
|
||||
- **自动登录**:使用预设账号密码自动认证
|
||||
- **Session保持**:维持登录状态
|
||||
- **自动重连**:检测连接状态并自动重连
|
||||
- **多摄像头支持**:可同时监控最多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 <repository-url>
|
||||
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
|
||||
Flask==2.3.3
|
||||
requests==2.31.0
|
||||
python3 run.py
|
||||
```
|
||||
访问 http://localhost:5002 查看网格监控界面。
|
||||
|
||||
### Python版本
|
||||
- Python 3.6+
|
||||
|
||||
## 安装和运行
|
||||
|
||||
### 方法一:直接运行(推荐开发环境)
|
||||
|
||||
#### 1. 安装依赖
|
||||
### 生产部署
|
||||
建议使用Gunicorn或uWSGI作为WSGI服务器:
|
||||
```bash
|
||||
pip install Flask requests
|
||||
gunicorn -w 4 -b 0.0.0.0:5002 "app:create_app()"
|
||||
```
|
||||
|
||||
#### 2. 运行应用
|
||||
```bash
|
||||
python3 complete_multi_camera_app.py
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
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 # 本文档
|
||||
```
|
||||
|
||||
#### 3. 使用启动脚本
|
||||
```bash
|
||||
chmod +x start.sh
|
||||
./start.sh
|
||||
## API接口
|
||||
|
||||
### 获取摄像头状态
|
||||
```
|
||||
|
||||
#### 4. 访问系统
|
||||
打开浏览器访问:`http://127.0.0.1:5002`
|
||||
|
||||
### 方法二:Docker部署(推荐生产环境)
|
||||
|
||||
#### 1. 构建Docker镜像
|
||||
```bash
|
||||
chmod +x docker-build.sh
|
||||
./docker-build.sh
|
||||
GET /api/cameras
|
||||
```
|
||||
返回所有摄像头的状态(ID、URL、是否活跃、最后帧时间)。
|
||||
|
||||
#### 2. 运行Docker容器
|
||||
```bash
|
||||
chmod +x docker-run.sh
|
||||
./docker-run.sh
|
||||
### 启动/停止摄像头
|
||||
```
|
||||
|
||||
#### 3. 手动Docker命令
|
||||
```bash
|
||||
# 构建镜像
|
||||
docker build -t multi-camera-monitor:latest .
|
||||
|
||||
# 运行容器
|
||||
docker run -d -p 5002:5002 --name multi-camera-app --restart unless-stopped multi-camera-monitor:latest
|
||||
POST /api/camera/<int:camera_id>/start
|
||||
POST /api/camera/<int:camera_id>/stop
|
||||
```
|
||||
启动或停止指定ID的摄像头。
|
||||
|
||||
#### 4. 访问系统
|
||||
打开浏览器访问:`http://localhost:5002`
|
||||
|
||||
### Docker管理命令
|
||||
```bash
|
||||
# 查看容器状态
|
||||
docker ps
|
||||
|
||||
# 查看容器日志
|
||||
docker logs -f multi-camera-app
|
||||
|
||||
# 停止容器
|
||||
docker stop multi-camera-app
|
||||
|
||||
# 重启容器
|
||||
docker restart multi-camera-app
|
||||
|
||||
# 进入容器
|
||||
docker exec -it multi-camera-app bash
|
||||
|
||||
# 删除容器
|
||||
docker rm multi-camera-app
|
||||
|
||||
# 删除镜像
|
||||
docker rmi multi-camera-monitor:latest
|
||||
### 添加摄像头
|
||||
```
|
||||
|
||||
## 配置文件
|
||||
|
||||
### 摄像头配置
|
||||
在 `complete_multi_camera_app.py` 中的 `cameras` 列表配置摄像头信息:
|
||||
```python
|
||||
self.cameras = [
|
||||
{
|
||||
'id': 1,
|
||||
'room': 'cnfzhjyg-igv-251',
|
||||
'camera': 'camera-0',
|
||||
'name': '1号车',
|
||||
'url': f"{self.camera_url}?room=cnfzhjyg-igv-251&camera=camera-0"
|
||||
},
|
||||
# ... 其他摄像头配置
|
||||
]
|
||||
POST /api/camera/add
|
||||
Content-Type: application/json
|
||||
{
|
||||
"url": "rtsp://..."
|
||||
}
|
||||
```
|
||||
添加一个新的摄像头(最多6个)。
|
||||
|
||||
### 登录配置
|
||||
在 `CompleteCameraManager` 类中配置登录信息:
|
||||
```python
|
||||
self.username = "hao.wang@westwell-lab.com"
|
||||
self.password = "wh707297"
|
||||
### 删除摄像头
|
||||
```
|
||||
DELETE /api/camera/<int:camera_id>
|
||||
```
|
||||
删除指定ID的摄像头。
|
||||
|
||||
## 使用说明
|
||||
### 获取实时帧
|
||||
```
|
||||
GET /api/camera/<int:camera_id>/frame
|
||||
```
|
||||
返回指定摄像头的最新JPEG图像(用于前端显示)。
|
||||
|
||||
### 界面布局
|
||||
- **顶部控制栏**:刷新、重连按钮和系统状态显示
|
||||
- **摄像头网格**:6个摄像头以3×2网格排列
|
||||
- **摄像头控制**:每个摄像头下方有独立的控制按钮
|
||||
## 配置说明
|
||||
|
||||
### 操作指南
|
||||
1. **刷新摄像头**:点击摄像头下方的"刷新"按钮
|
||||
2. **切换摄像头编号**:点击0-7数字按钮切换摄像头视角
|
||||
3. **全屏显示**:点击"全屏"按钮进入全屏模式
|
||||
4. **系统重连**:点击"重新连接"按钮重新登录系统
|
||||
- `BASE_URL`:前端访问的基础URL,用于构建API端点。
|
||||
- `FLASK_DEBUG`:Flask调试模式,生产环境设为`False`。
|
||||
- `PORT`:服务端口,默认5002。
|
||||
- `HOST`:绑定地址,`0.0.0.0`允许外部访问。
|
||||
- `CAMERA_URLS`:摄像头RTSP URL列表,用逗号分隔。
|
||||
|
||||
### 状态监控
|
||||
- **内存使用**:显示应用程序内存消耗(MB)
|
||||
- **CPU占用**:显示CPU使用率(%)
|
||||
- **当前时间**:实时显示系统时间
|
||||
## 日志
|
||||
|
||||
## 技术架构
|
||||
日志文件位于`./logs/multi_camera.log`,每天自动轮转,保留最近10个日志文件。
|
||||
|
||||
### 前端技术
|
||||
- **HTML/CSS**:响应式网格布局
|
||||
- **JavaScript**:实时状态更新和摄像头控制
|
||||
- **Flask模板**:动态内容渲染
|
||||
## 常见问题
|
||||
|
||||
### 后端技术
|
||||
- **Flask框架**:Web应用服务器
|
||||
- **requests库**:HTTP请求处理
|
||||
- **Session管理**:登录状态保持
|
||||
1. **摄像头画面不显示**
|
||||
- 检查RTSP URL是否正确,确保网络可达。
|
||||
- 检查OpenCV是否支持RTSP(可能需要编译FFmpeg支持)。
|
||||
|
||||
### 监控功能
|
||||
- **内存监控**:使用Python内置方法获取内存使用
|
||||
- **CPU监控**:估算CPU使用率
|
||||
- **连接状态**:定期检查系统连接状态
|
||||
2. **端口占用**
|
||||
- 修改`.env`中的`PORT`变量,然后重启应用。
|
||||
|
||||
## 故障排除
|
||||
3. **依赖安装失败**
|
||||
- 确保已安装Python开发工具(如`python3-dev`、`libopencv-dev`)。
|
||||
|
||||
### 常见问题
|
||||
1. **登录失败**:检查网络连接和账号密码
|
||||
2. **摄像头无法显示**:检查摄像头URL配置
|
||||
3. **端口占用**:修改应用启动端口
|
||||
## 版本历史
|
||||
|
||||
### 日志文件
|
||||
应用运行日志保存在 `complete_multi_camera.log` 文件中
|
||||
|
||||
## 开发说明
|
||||
|
||||
### 扩展功能
|
||||
- 添加更多摄像头
|
||||
- 实现录像功能
|
||||
- 添加报警通知
|
||||
- 支持移动端适配
|
||||
|
||||
### 安全注意事项
|
||||
- 定期更新账号密码
|
||||
- 使用HTTPS加密传输
|
||||
- 限制访问IP范围
|
||||
- v0.1 (2025-12-13)
|
||||
- 移除健康监控(CPU/内存)功能。
|
||||
- 移除Docker和启动脚本。
|
||||
- 移除认证相关代码(登录、SECRET_KEY)。
|
||||
- 配置日志目录为`./logs`。
|
||||
- 清理冗余代码和敏感信息。
|
||||
|
||||
## 许可证
|
||||
本项目仅供内部使用
|
||||
|
||||
## 更新日志
|
||||
- v1.0: 初始版本,支持6个摄像头网格布局和实时监控
|
||||
- v1.1: 添加系统状态监控(内存、CPU、时间)
|
||||
- v1.2: 优化界面布局和控制功能
|
||||
本项目仅供内部使用,未经许可不得分发。
|
||||
|
||||
## 贡献
|
||||
|
||||
欢迎提交Issue和Pull Request。
|
||||
Reference in New Issue
Block a user