BodyBalanceEvaluation/memory_config.py

140 lines
5.2 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
内存优化配置文件
用于配置WebSocket视频流的内存使用参数
"""
# ==================== 前端内存优化配置 ====================
# 帧率控制
MAX_FPS = 15 # 最大帧率,降低可减少内存使用
FRAME_SKIP_THRESHOLD = 2 # 跳帧阈值每N+1帧显示1帧
# 内存监控
MEMORY_CHECK_INTERVAL_MS = 10000 # 内存检查间隔(毫秒)
MAX_MEMORY_USAGE_PERCENT = 80 # 内存使用率阈值(%),超过则自动清理
# 图像缓存
ENABLE_IMAGE_CACHE = True # 是否启用图像缓存优化
FORCE_GC_INTERVAL = 100 # 强制垃圾回收间隔(帧数)
# ==================== 后端内存优化配置 ====================
# 帧处理
BACKEND_FRAME_SKIP_RATIO = 3 # 后端跳帧比例每N帧处理1帧
MAX_FRAME_WIDTH = 320 # 最大帧宽度
MAX_FRAME_HEIGHT = 240 # 最大帧高度
# 内存限制
MAX_BACKEND_MEMORY_MB = 100 # 后端最大内存使用MB
BACKEND_MEMORY_CHECK_INTERVAL = 50 # 后端内存检查间隔(帧数)
# JPEG编码优化
JPEG_QUALITY = 50 # JPEG质量1-100越低内存使用越少
JPEG_PROGRESSIVE = False # 是否启用渐进式JPEG
JPEG_OPTIMIZE = True # 是否启用JPEG优化
# 队列管理
FRAME_QUEUE_SIZE = 1 # 帧队列大小设为1确保实时性
MAX_FRAME_RATE = 20 # 最大帧率限制
# ==================== 调试和监控配置 ====================
# 日志级别
MEMORY_LOG_LEVEL = 'INFO' # DEBUG, INFO, WARNING, ERROR
ENABLE_MEMORY_LOGGING = True # 是否启用内存使用日志
# 性能监控
ENABLE_PERFORMANCE_MONITORING = True # 是否启用性能监控
PERFORMANCE_LOG_INTERVAL = 60 # 性能日志间隔(秒)
# ==================== 自适应优化配置 ====================
# 自适应帧率
ENABLE_ADAPTIVE_FRAMERATE = True # 是否启用自适应帧率
MIN_FPS = 5 # 最小帧率
MAX_ADAPTIVE_FPS = 30 # 最大自适应帧率
# 自适应质量
ENABLE_ADAPTIVE_QUALITY = True # 是否启用自适应质量
MIN_JPEG_QUALITY = 30 # 最小JPEG质量
MAX_JPEG_QUALITY = 80 # 最大JPEG质量
# 内存压力阈值
MEMORY_PRESSURE_LEVELS = {
'low': 50, # 低压力阈值(%
'medium': 70, # 中等压力阈值(%
'high': 85, # 高压力阈值(%
'critical': 95 # 临界压力阈值(%
}
# ==================== 辅助函数 ====================
def get_memory_config():
"""获取内存配置字典"""
return {
'frontend': {
'max_fps': MAX_FPS,
'frame_skip_threshold': FRAME_SKIP_THRESHOLD,
'memory_check_interval': MEMORY_CHECK_INTERVAL_MS,
'max_memory_percent': MAX_MEMORY_USAGE_PERCENT,
'enable_cache': ENABLE_IMAGE_CACHE,
'force_gc_interval': FORCE_GC_INTERVAL
},
'backend': {
'frame_skip_ratio': BACKEND_FRAME_SKIP_RATIO,
'max_frame_size': (MAX_FRAME_WIDTH, MAX_FRAME_HEIGHT),
'max_memory_mb': MAX_BACKEND_MEMORY_MB,
'memory_check_interval': BACKEND_MEMORY_CHECK_INTERVAL,
'jpeg_quality': JPEG_QUALITY,
'jpeg_progressive': JPEG_PROGRESSIVE,
'jpeg_optimize': JPEG_OPTIMIZE,
'queue_size': FRAME_QUEUE_SIZE,
'max_frame_rate': MAX_FRAME_RATE
},
'monitoring': {
'log_level': MEMORY_LOG_LEVEL,
'enable_memory_logging': ENABLE_MEMORY_LOGGING,
'enable_performance_monitoring': ENABLE_PERFORMANCE_MONITORING,
'performance_log_interval': PERFORMANCE_LOG_INTERVAL
},
'adaptive': {
'enable_adaptive_framerate': ENABLE_ADAPTIVE_FRAMERATE,
'min_fps': MIN_FPS,
'max_adaptive_fps': MAX_ADAPTIVE_FPS,
'enable_adaptive_quality': ENABLE_ADAPTIVE_QUALITY,
'min_jpeg_quality': MIN_JPEG_QUALITY,
'max_jpeg_quality': MAX_JPEG_QUALITY,
'memory_pressure_levels': MEMORY_PRESSURE_LEVELS
}
}
def apply_memory_config(config_dict):
"""应用内存配置"""
global MAX_FPS, FRAME_SKIP_THRESHOLD, MAX_MEMORY_USAGE_PERCENT
global BACKEND_FRAME_SKIP_RATIO, MAX_FRAME_WIDTH, MAX_FRAME_HEIGHT
global MAX_BACKEND_MEMORY_MB, JPEG_QUALITY
if 'frontend' in config_dict:
frontend = config_dict['frontend']
MAX_FPS = frontend.get('max_fps', MAX_FPS)
FRAME_SKIP_THRESHOLD = frontend.get('frame_skip_threshold', FRAME_SKIP_THRESHOLD)
MAX_MEMORY_USAGE_PERCENT = frontend.get('max_memory_percent', MAX_MEMORY_USAGE_PERCENT)
if 'backend' in config_dict:
backend = config_dict['backend']
BACKEND_FRAME_SKIP_RATIO = backend.get('frame_skip_ratio', BACKEND_FRAME_SKIP_RATIO)
if 'max_frame_size' in backend:
MAX_FRAME_WIDTH, MAX_FRAME_HEIGHT = backend['max_frame_size']
MAX_BACKEND_MEMORY_MB = backend.get('max_memory_mb', MAX_BACKEND_MEMORY_MB)
JPEG_QUALITY = backend.get('jpeg_quality', JPEG_QUALITY)
if __name__ == '__main__':
# 测试配置
config = get_memory_config()
print("当前内存优化配置:")
for category, settings in config.items():
print(f"\n{category.upper()}:")
for key, value in settings.items():
print(f" {key}: {value}")