#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 完整多摄像头网格布局Flask应用 支持6个摄像头的实时监控网格布局 """ from flask import Flask, render_template_string, request, jsonify import requests import json import logging import time import os import resource from datetime import datetime # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('complete_multi_camera.log', encoding='utf-8'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) app = Flask(__name__) class CompleteCameraManager: def __init__(self): self.base_url = "http://10.80.0.2:5045" self.login_api = f"{self.base_url}/api/user/login" self.camera_url = f"{self.base_url}/adaops/blank-layout/camera-view" self.session = requests.Session() self.token = None self.last_login_time = None self.is_logged_in = False # 配置请求头 self.session.headers.update({ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Accept': 'application/json, text/plain, */*', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 'Content-Type': 'application/json', 'Connection': 'keep-alive', }) # 账号信息 self.username = "hao.wang@westwell-lab.com" self.password = "wh707297" # 摄像头配置 self.cameras = [ { 'id': 1, 'room': 'cnfzhjyg-igv-251', 'camera': 'mixed', 'name': '1号车', 'url': f"{self.camera_url}?room=cnfzhjyg-igv-251&camera=mixed" }, { 'id': 2, 'room': 'cnfzhjyg-igv-2', 'camera': 'mixed', 'name': '2号车', 'url': f"{self.camera_url}?room=cnfzhjyg-igv-2&camera=mixed" }, { 'id': 3, 'room': 'cnfzhjyg-igv-3', 'camera': 'mixed', 'name': '3号车', 'url': f"{self.camera_url}?room=cnfzhjyg-igv-3&camera=mixed" }, { 'id': 4, 'room': 'cnfzhjyg-igv-5', 'camera': 'mixed', 'name': '5号车', 'url': f"{self.camera_url}?room=cnfzhjyg-igv-5&camera=mixed" }, { 'id': 5, 'room': 'cnfzhjyg-igv-6', 'camera': 'mixed', 'name': '6号车', 'url': f"{self.camera_url}?room=cnfzhjyg-igv-6&camera=mixed" }, { 'id': 6, 'room': 'cnfzhjyg-igv-7', 'camera': 'mixed', 'name': '7号车', 'url': f"{self.camera_url}?room=cnfzhjyg-igv-7&camera=mixed" } ] # 不进行自动登录 # self.auto_login() def login(self): """登录系统""" logger.info("正在登录系统...") login_data = { 'username': self.username, 'password': self.password, 'email': self.username, 'user': self.username, 'account': self.username } try: response = self.session.post( self.login_api, json=login_data, timeout=10 ) if response.status_code == 200: response_data = response.json() self.token = response_data.get('token') self.last_login_time = datetime.now() self.is_logged_in = True # 更新认证头 if self.token: self.session.headers.update({ 'Authorization': f'Bearer {self.token}' }) logger.info("登录成功!") return True else: logger.error(f"登录失败,状态码: {response.status_code}") return False except Exception as e: logger.error(f"登录请求失败: {e}") return False # 创建全局摄像头管理器 camera_manager = CompleteCameraManager() # 完整的HTML模板 HTML_TEMPLATE = '''