6bdb802f01
- Add all claude skills (brainstorming, commit, debugging, TDD, etc.) - Add claude hooks (pre-commit-guard, post-edit-quality) - Add research templates (experiment plan, research brief, etc.) - Add claude tools (arxiv/semantic_scholar/openalex fetch, wiki, exa) - Add TRM4 reference implementation as algorithm fidelity baseline - Add research-wiki content (plans, index, graph, query_pack) - Update .gitignore to exclude .graphify_version runtime state
61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
"""
|
||
单视频建树脚本(仅 VLM,不加载 EmbeddingModel)
|
||
================================================
|
||
直接调用 VideoTreeBuilder,跳过 Pipeline 的嵌入模型初始化。
|
||
结果保存为 JSON 到 cache/trees/ 目录。
|
||
|
||
用法::
|
||
|
||
conda run -n Video-Tree-TRM python scripts/build_tree_single.py \
|
||
--video data/videomme/videos/xKiRmesHWIA.mp4
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import argparse
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
# 项目根目录加入 sys.path
|
||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||
|
||
from video_tree_trm.config import Config
|
||
from video_tree_trm.llm_client import LLMClient
|
||
from video_tree_trm.video_tree_builder import VideoTreeBuilder
|
||
from utils.logger_system import log_msg
|
||
|
||
|
||
def main() -> None:
|
||
"""构建单个视频的 TreeIndex,仅使用 VLM,不加载 EmbeddingModel。"""
|
||
parser = argparse.ArgumentParser(description="单视频建树(仅 VLM)")
|
||
parser.add_argument("--video", required=True, help="视频文件路径")
|
||
parser.add_argument("--config", default="config/default.yaml", help="配置文件路径")
|
||
args = parser.parse_args()
|
||
|
||
# Phase 1: 加载配置 + 初始化 VLM
|
||
cfg = Config.load(args.config)
|
||
vlm = LLMClient(cfg.vlm)
|
||
|
||
# Phase 2: 构建树(纯 VLM 描述,embedding=None)
|
||
builder = VideoTreeBuilder(vlm, cfg.tree)
|
||
tree = builder.build(args.video)
|
||
|
||
# Phase 3: 保存 JSON
|
||
stem = Path(args.video).stem
|
||
cache_dir = Path(cfg.tree.cache_dir)
|
||
cache_dir.mkdir(parents=True, exist_ok=True)
|
||
out_path = str(cache_dir / f"{stem}_video.json")
|
||
tree.save_json(out_path)
|
||
|
||
log_msg("INFO", "建树完成,已保存", path=out_path)
|
||
print(f"\n[完成] TreeIndex 已保存到: {out_path}")
|
||
print(f" L1 节点数: {len(tree.roots)}")
|
||
total_l2 = sum(len(r.children) for r in tree.roots)
|
||
total_l3 = sum(len(l2.children) for r in tree.roots for l2 in r.children)
|
||
print(f" L2 节点数: {total_l2}")
|
||
print(f" L3 节点数: {total_l3}")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|