File size: 5,374 Bytes
2026329
96da58e
 
77e2834
2026329
 
77e2834
 
 
 
 
 
2026329
96da58e
77e2834
96da58e
77e2834
96da58e
77e2834
 
2026329
77e2834
 
96da58e
77e2834
96da58e
 
 
 
 
 
 
77e2834
96da58e
 
 
77e2834
96da58e
2026329
 
96da58e
77e2834
96da58e
77e2834
96da58e
 
 
77e2834
96da58e
 
77e2834
 
96da58e
 
2026329
 
96da58e
 
 
 
 
 
 
 
 
 
 
 
 
2026329
 
96da58e
 
 
 
 
 
 
 
2026329
 
96da58e
 
 
 
 
 
 
 
 
2026329
 
77e2834
96da58e
77e2834
 
 
96da58e
2026329
 
96da58e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77e2834
 
96da58e
 
2026329
 
96da58e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77e2834
96da58e
 
 
77e2834
96da58e
77e2834
96da58e
 
77e2834
 
 
 
96da58e
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/bin/bash
# Phantom HuggingFace Spaces 安装脚本
# 仅 Inference 模式 - 跳过 training 相关依赖

set -e

PHANTOM_DIR="/home/user/app/phantom"
LOG_FILE="/tmp/phantom_setup.log"

log() {
    echo "[$(date +'%H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

log "🚀 开始配置 Phantom 环境 (Inference Only)"

# 检查 phantom 目录
if [ ! -d "$PHANTOM_DIR" ]; then
    log "❌ Phantom 目录不存在"
    exit 1
fi

cd "$PHANTOM_DIR"

# ========== 安装 Inference 必需依赖 ==========

# 1. 安装 PyTorch (如果尚未安装)
if ! python -c "import torch" 2>/dev/null; then
    log "📦 安装 PyTorch..."
    pip install -q torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cu121
fi

# 2. SAM2 (分割模型)
if [ ! -f "/tmp/.sam2_installed" ]; then
    log "📦 安装 SAM2..."
    cd "$PHANTOM_DIR/submodules/sam2"
    pip install -q -e . 2>&1 | tee -a "$LOG_FILE" || log "⚠️ SAM2 警告"
    touch /tmp/.sam2_installed
    log "✅ SAM2 完成"
fi

# 3. HaMeR (手部姿态估计)
if [ ! -f "/tmp/.hamer_installed" ]; then
    log "📦 安装 HaMeR..."
    cd "$PHANTOM_DIR/submodules/phantom-hamer"
    pip install -q -e .[all] 2>&1 | tee -a "$LOG_FILE" || log "⚠️ HaMeR 警告"

    # 安装 ViTPose
    if [ -d "third-party/ViTPose" ]; then
        log "📦 安装 ViTPose..."
        pip install -q -e third-party/ViTPose 2>&1 | tee -a "$LOG_FILE" || true
    fi

    touch /tmp/.hamer_installed
    log "✅ HaMeR 完成"
fi

# 4. 下载 HaMeR demo 数据
if [ ! -d "$PHANTOM_DIR/submodules/phantom-hamer/_DATA/hamer_demo_data" ]; then
    log "📥 下载 HaMeR demo 数据..."
    cd "$PHANTOM_DIR/submodules/phantom-hamer"
    mkdir -p _DATA && cd _DATA
    if [ ! -f "hamer_demo_data.tar.gz" ]; then
        wget -q https://www.cs.utexas.edu/~pavlakos/hamer/data/hamer_demo_data.tar.gz || log "⚠️ HaMeR 数据下载失败"
    fi
    if [ -f "hamer_demo_data.tar.gz" ]; then
        tar --warning=no-unknown-keyword -xzf hamer_demo_data.tar.gz 2>&1 | tee -a "$LOG_FILE" || true
        rm -f hamer_demo_data.tar.gz
        log "✅ HaMeR 数据完成"
    fi
fi

# 5. MMCV (仅基础版本,inference 够用)
if [ ! -f "/tmp/.mmcv_installed" ]; then
    log "📦 安装 MMCV..."
    pip install -q mmcv==1.3.9 2>&1 | tee -a "$LOG_FILE" || true
    # 尝试安装 mmcv-full,失败也没关系
    pip install -q mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu121/torch2.1/index.html 2>&1 | tee -a "$LOG_FILE" || log "⚠️ MMCV-full 跳过,使用基础版本"
    touch /tmp/.mmcv_installed
    log "✅ MMCV 完成"
fi

# 6. E2FGVI (视频修复)
E2FGVI_DIR="$PHANTOM_DIR/submodules/phantom-E2FGVI/E2FGVI/release_model"
if [ ! -f "$E2FGVI_DIR/E2FGVI-HQ.pth" ]; then
    log "📥 下载 E2FGVI 权重..."
    mkdir -p "$E2FGVI_DIR"
    cd "$E2FGVI_DIR"
    pip install -q gdown
    gdown --fuzzy "https://drive.google.com/file/d/10wGdKSUOie0XmCr8SQ2A2FeDe-mfn5w3/view?usp=sharing" 2>&1 | tee -a "$LOG_FILE" || log "⚠️ E2FGVI 权重下载失败"
    log "✅ E2FGVI 权重完成"
fi

if [ ! -f "/tmp/.e2fgvi_installed" ]; then
    log "📦 安装 E2FGVI..."
    cd "$PHANTOM_DIR/submodules/phantom-E2FGVI"
    pip install -q -e . 2>&1 | tee -a "$LOG_FILE"
    touch /tmp/.e2fgvi_installed
    log "✅ E2FGVI 完成"
fi

# ========== 跳过 Training 依赖 ==========
# 以下包仅用于训练,inference 不需要:
# - phantom-robosuite (机器人仿真)
# - phantom-robomimic (机器人学习)
log "⏭️ 跳过 Training 依赖 (robosuite, robomimic)"

# 7. 其他 inference 依赖
log "📦 安装其他依赖..."
pip install -q joblib mediapy 2>&1 | tee -a "$LOG_FILE" || true
pip install -q transformers==4.42.4 2>&1 | tee -a "$LOG_FILE" || true
pip install -q PyOpenGL==3.1.4 Rtree protobuf==3.20.0 2>&1 | tee -a "$LOG_FILE" || true
pip install -q hydra-core==1.3.2 omegaconf==2.3.0 2>&1 | tee -a "$LOG_FILE" || true
pip install -q numpy==1.26.4 2>&1 | tee -a "$LOG_FILE" || true
# open3d 体积大,尝试安装但不强求
pip install -q open3d 2>&1 | tee -a "$LOG_FILE" || log "⚠️ open3d 跳过"

# 8. Phantom 主包
if [ ! -f "/tmp/.phantom_pkg_installed" ]; then
    log "📦 安装 Phantom 主包..."
    cd "$PHANTOM_DIR"
    pip install -q -e . 2>&1 | tee -a "$LOG_FILE"
    touch /tmp/.phantom_pkg_installed
    log "✅ Phantom 主包完成"
fi

# 9. 下载示例数据(可选)
SAMPLE_DATA_DIR="$PHANTOM_DIR/data/raw"
if [ ! -d "$SAMPLE_DATA_DIR/pick_and_place" ]; then
    log "📥 下载示例数据..."
    mkdir -p "$SAMPLE_DATA_DIR"
    cd "$SAMPLE_DATA_DIR"
    wget -q https://download.cs.stanford.edu/juno/phantom/pick_and_place.zip || log "⚠️ 示例数据下载失败"
    if [ -f "pick_and_place.zip" ]; then
        unzip -q pick_and_place.zip
        rm -f pick_and_place.zip
        log "✅ 示例数据完成"
    fi
fi

# 10. 检查 MANO 模型
MANO_DIR="$PHANTOM_DIR/submodules/phantom-hamer/_DATA/data/mano"
mkdir -p "$MANO_DIR"

# 检查是否已存在(可能用户已经放在仓库里了)
if [ -f "$MANO_DIR/MANO_LEFT.pkl" ] && [ -f "$MANO_DIR/MANO_RIGHT.pkl" ]; then
    log "✅ MANO 模型已就绪"
else
    log "⚠️ MANO 模型缺失!"
    log "   请将文件放到: $MANO_DIR"
fi

# 标记完成
touch /tmp/.phantom_ready

log "🎉 Phantom 环境配置完成 (Inference Only)"
log "📝 日志文件: $LOG_FILE"