调研结论: build.nvidia.com 免费托管 API 上 video-llama3-8b 与 qwen2.5-vl-72b 已下线(404),nvidia/nemotron-3-nano-omni-30b-a3b-reasoning 可用(200, 40RPM 免费额度内),原生支持 video_url 输入(MP4 base64)。 实现: 1. nvidia_adapter 新增 analyze_video: 按关键帧时间点截取 ±1.5s 片段 (drawtext 叠加时间戳,连字符避免冒号转义)拼集锦视频,640 宽 CRF28, base64 后经 video_url 单次调用,输出全 schema JSON(frame_details + global_summary + entities_json)并归一化对齐时间戳 2. analyze_frames 保留为无视频文件时的降级路径; chat max_tokens 512→2048(reasoning 模型 token 消耗大); timeout 20→120s 3. orchestrator.run_visual_analysis 增加 video_path 参数,fallback 循环 对支持 analyze_video 的适配器优先走视频模式,失败自动降级逐帧 实测(360MB 测试视频, 3 关键帧): 集锦 107KB, 全程 37s, 动态动作识别准确 (走动→坐沙发→坐餐桌),跨片段综合摘要正常 — 显著优于旧逐帧静态识别。
84 lines
2.6 KiB
Plaintext
84 lines
2.6 KiB
Plaintext
# FAM-Edge 配置文件 (Oracle 端)
|
||
# 复制此文件为 config.yaml 并修改实际值
|
||
|
||
# NAS 端回调地址
|
||
nas:
|
||
webhook_url: "http://100.x.x.10:8000/api/core/callback/event"
|
||
media_base_url: "http://100.x.x.10:8000/media"
|
||
media_token: "xxx"
|
||
|
||
# Oracle 端服务
|
||
server:
|
||
host: "0.0.0.0"
|
||
port: 5000
|
||
max_concurrent_tasks: 1
|
||
|
||
# 关键帧筛选参数(自适应:帧数随视频时长动态计算)
|
||
video:
|
||
candidate_per_minute: 2 # 每分钟粗抽候选帧数
|
||
candidate_min: 30 # 候选帧下限(短视频保底)
|
||
candidate_max: 120 # 候选帧上限(超长视频截断)
|
||
key_frame_interval_sec: 150 # 关键帧间隔(秒),每2.5分钟1张
|
||
min_key_frames: 5 # 关键帧下限(帧差不足时补足到此数)
|
||
max_key_frames_floor: 8 # 关键帧上限的下限(短视频保底)
|
||
max_key_frames_cap: 30 # 关键帧上限(超长视频截断)
|
||
mse_threshold: 500 # 帧差阈值
|
||
jpeg_quality: 80
|
||
max_long_edge: 1024
|
||
|
||
# 超时(秒)
|
||
timeout:
|
||
download: 60
|
||
vlm_visual: 240 # 单模型视觉分析超时
|
||
vlm_fusion: 120
|
||
callback: 30
|
||
overall: 600
|
||
|
||
# 模型清单(可扩展,新增模型只需在此数组加一项 + 实现适配器)
|
||
models:
|
||
- provider: "ollama"
|
||
enabled: true
|
||
model_name: "llava-phi3"
|
||
base_url: "http://localhost:11434"
|
||
timeout: 240
|
||
num_predict: 500 # 最大生成 token 数(ARM 上建议限制以控制延迟)
|
||
circuit_breaker:
|
||
enabled: false # 本地模型不启用熔断
|
||
threshold: 5
|
||
cooldown: 900
|
||
|
||
- provider: "gemini"
|
||
enabled: true
|
||
model_name: "gemini-1.5-flash"
|
||
api_key: "${GEMINI_API_KEY}" # 从环境变量读取
|
||
timeout: 8
|
||
circuit_breaker:
|
||
enabled: true
|
||
threshold: 5
|
||
cooldown: 900
|
||
|
||
# v1.1 扩展示例(取消注释并填入 API Key 即启用)
|
||
# - provider: "openai"
|
||
# enabled: false
|
||
# model_name: "gpt-4o"
|
||
# api_key: "${OPENAI_API_KEY}"
|
||
# timeout: 30
|
||
# circuit_breaker:
|
||
# enabled: true
|
||
# threshold: 5
|
||
# cooldown: 900
|
||
|
||
# - provider: "nvidia"
|
||
# role: "vision"
|
||
# enabled: true
|
||
# # Omni 模型原生支持视频输入(video_url),适配器自动按关键帧时间点
|
||
# # 截取片段拼集锦后单次调用;失败自动降级逐帧图片模式
|
||
# model_name: "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning"
|
||
# api_key: "${NVIDIA_API_KEY}"
|
||
# base_url: "https://integrate.api.nvidia.com/v1"
|
||
# timeout: 120 # reasoning 模型视频推理较慢,勿低于 90
|
||
# circuit_breaker:
|
||
# enabled: true
|
||
# threshold: 5
|
||
# cooldown: 900
|