多摄像头网格布局监控系统

一个基于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. 克隆仓库

    git clone <repository-url>
    cd multi_camera_project_v0.1
    
  2. 创建虚拟环境(可选)

    python3 -m venv venv
    source venv/bin/activate  # Linux/Mac
    # 或 venv\Scripts\activate  # Windows
    
  3. 安装依赖

    pip install -r requirements.txt
    
  4. 环境配置

    • 复制.env.example.env
      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个摄像头。

运行应用

开发模式

python3 run.py

访问 http://localhost:5002 查看网格监控界面。

生产部署

建议使用Gunicorn或uWSGI作为WSGI服务器

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/<int:camera_id>/start
POST /api/camera/<int:camera_id>/stop

启动或停止指定ID的摄像头。

添加摄像头

POST /api/camera/add
Content-Type: application/json
{
    "url": "rtsp://..."
}

添加一个新的摄像头最多6个

删除摄像头

DELETE /api/camera/<int:camera_id>

删除指定ID的摄像头。

获取实时帧

GET /api/camera/<int:camera_id>/frame

返回指定摄像头的最新JPEG图像用于前端显示

配置说明

  • BASE_URL前端访问的基础URL用于构建API端点。
  • FLASK_DEBUGFlask调试模式生产环境设为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-devlibopencv-dev)。

版本历史

  • v0.1 (2025-12-13)
    • 移除健康监控CPU/内存)功能。
    • 移除Docker和启动脚本。
    • 移除认证相关代码登录、SECRET_KEY
    • 配置日志目录为./logs
    • 清理冗余代码和敏感信息。

许可证

本项目仅供内部使用,未经许可不得分发。

贡献

欢迎提交Issue和Pull Request。

Description
No description provided
Readme 64 KiB
Languages
Python 41.8%
CSS 23.8%
JavaScript 18.1%
HTML 16.3%