feat: v1.1.0 - 图片按日期分文件夹保存、设置面板、序号显示模式、自动刷新
This commit is contained in:
98
config.py
98
config.py
@@ -2,30 +2,35 @@
|
||||
配置管理模块
|
||||
"""
|
||||
import os
|
||||
import json
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
# 基础路径
|
||||
BASE_DIR = Path(__file__).parent.absolute()
|
||||
DATA_DIR = BASE_DIR / "data"
|
||||
IMAGES_DIR = DATA_DIR / "images"
|
||||
DB_PATH = DATA_DIR / "events.db"
|
||||
CONFIG_PATH = DATA_DIR / "config.json"
|
||||
|
||||
# 确保目录存在
|
||||
IMAGES_DIR.mkdir(parents=True, exist_ok=True)
|
||||
DATA_DIR.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# Web 服务配置
|
||||
WEB_PORT = 19016
|
||||
WEB_HOST = "0.0.0.0"
|
||||
|
||||
# 摄像头配置
|
||||
CAMERA_INDEX = 0 # 默认摄像头
|
||||
CAPTURE_INTERVAL = 60 # 拍照间隔(秒)
|
||||
|
||||
# 大模型配置(用于图片分析)
|
||||
LLM_PROVIDER = "bailian" # bailian / openai / local
|
||||
LLM_API_URL = os.environ.get("VISION_API_URL", "https://dashscope.aliyuncs.com/compatible-mode/v1")
|
||||
LLM_API_KEY = os.environ.get("VISION_API_KEY", "sk-lm-fuP5tGU8:Hi7YU87jHyDP6Ay8Tl2j")
|
||||
LLM_MODEL = os.environ.get("VISION_MODEL", "qwen-vl-plus") # 视觉模型
|
||||
# 默认配置
|
||||
DEFAULT_CONFIG = {
|
||||
"images_dir": str(DATA_DIR / "images"),
|
||||
"camera_index": 0,
|
||||
"capture_interval": 60,
|
||||
"auto_analyze": True,
|
||||
"refresh_interval": 5, # 页面刷新间隔(秒)
|
||||
"display_limit": 20, # 显示最近多少条
|
||||
"vision_api_url": os.environ.get("VISION_API_URL", "https://dashscope.aliyuncs.com/compatible-mode/v1"),
|
||||
"vision_api_key": os.environ.get("VISION_API_KEY", "sk-lm-fuP5tGU8:Hi7YU87jHyDP6Ay8Tl2j"),
|
||||
"vision_model": os.environ.get("VISION_MODEL", "qwen-vl-plus")
|
||||
}
|
||||
|
||||
# 分析配置
|
||||
ANALYSIS_PROMPT = """请分析这张图片,识别其中的重要事件或变化。
|
||||
@@ -46,12 +51,18 @@ ANALYSIS_PROMPT = """请分析这张图片,识别其中的重要事件或变
|
||||
|
||||
# 数据库配置
|
||||
DB_SCHEMA = """
|
||||
CREATE TABLE IF NOT EXISTS config (
|
||||
key TEXT PRIMARY KEY,
|
||||
value TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS images (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
path TEXT NOT NULL,
|
||||
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
camera_id INTEGER DEFAULT 0,
|
||||
analyzed BOOLEAN DEFAULT 0
|
||||
analyzed BOOLEAN DEFAULT 0,
|
||||
date_folder TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS events (
|
||||
@@ -65,5 +76,66 @@ CREATE TABLE IF NOT EXISTS events (
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_images_timestamp ON images(timestamp);
|
||||
CREATE INDEX IF NOT EXISTS idx_images_date_folder ON images(date_folder);
|
||||
CREATE INDEX IF NOT EXISTS idx_events_type ON events(event_type);
|
||||
"""
|
||||
"""
|
||||
|
||||
|
||||
class ConfigManager:
|
||||
"""配置管理器"""
|
||||
|
||||
def __init__(self):
|
||||
self.config = DEFAULT_CONFIG.copy()
|
||||
self.load()
|
||||
|
||||
def load(self):
|
||||
"""加载配置"""
|
||||
if CONFIG_PATH.exists():
|
||||
try:
|
||||
with open(CONFIG_PATH, 'r', encoding='utf-8') as f:
|
||||
saved = json.load(f)
|
||||
self.config.update(saved)
|
||||
except:
|
||||
pass
|
||||
|
||||
def save(self):
|
||||
"""保存配置"""
|
||||
with open(CONFIG_PATH, 'w', encoding='utf-8') as f:
|
||||
json.dump(self.config, f, ensure_ascii=False, indent=2)
|
||||
|
||||
def get(self, key, default=None):
|
||||
"""获取配置项"""
|
||||
return self.config.get(key, default)
|
||||
|
||||
def set(self, key, value):
|
||||
"""设置配置项"""
|
||||
self.config[key] = value
|
||||
self.save()
|
||||
|
||||
def get_images_dir(self, date=None):
|
||||
"""获取图片保存目录(按日期)"""
|
||||
base_dir = Path(self.config['images_dir'])
|
||||
|
||||
if date is None:
|
||||
date = datetime.now().strftime('%Y-%m-%d')
|
||||
|
||||
# 每天的图片放在单独文件夹
|
||||
date_folder = base_dir / date
|
||||
date_folder.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
return date_folder
|
||||
|
||||
def get_all(self):
|
||||
"""获取所有配置"""
|
||||
return self.config.copy()
|
||||
|
||||
def update(self, updates):
|
||||
"""批量更新配置"""
|
||||
for key, value in updates.items():
|
||||
if key in self.config:
|
||||
self.config[key] = value
|
||||
self.save()
|
||||
|
||||
|
||||
# 全局配置实例
|
||||
config_mgr = ConfigManager()
|
||||
Reference in New Issue
Block a user