| #!/bin/bash |
| |
| |
| |
| |
|
|
| set -e |
|
|
| echo "==============================================" |
| echo " MuseTalk V1.5 Installation Script" |
| echo "==============================================" |
|
|
| |
| INSTALL_DIR="${INSTALL_DIR:-/workspace}" |
| MINICONDA_DIR="${MINICONDA_DIR:-/opt/miniconda}" |
| ENV_NAME="musetalk" |
|
|
| |
| if [ "$EUID" -ne 0 ]; then |
| echo "Please run as root or with sudo" |
| exit 1 |
| fi |
|
|
| |
| echo "" |
| echo "=== Installing system dependencies ===" |
| apt-get update -qq |
| apt-get install -y -qq wget git ffmpeg espeak-ng libgl1-mesa-glx libglib2.0-0 > /dev/null |
|
|
| |
| if [ ! -d "$MINICONDA_DIR" ]; then |
| echo "" |
| echo "=== Installing Miniconda ===" |
| wget -q -O /tmp/miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh |
| bash /tmp/miniconda.sh -b -p "$MINICONDA_DIR" |
| rm /tmp/miniconda.sh |
| fi |
|
|
| |
| source "$MINICONDA_DIR/bin/activate" |
|
|
| |
| echo "" |
| echo "=== Creating conda environment: $ENV_NAME ===" |
| if conda env list | grep -q "^$ENV_NAME "; then |
| echo "Environment $ENV_NAME already exists, skipping creation" |
| else |
| conda create -n "$ENV_NAME" python=3.10 -y -q |
| fi |
|
|
| |
| conda activate "$ENV_NAME" |
|
|
| |
| echo "" |
| echo "=== Cloning MuseTalk repository ===" |
| cd "$INSTALL_DIR" |
| if [ -d "MuseTalk" ]; then |
| echo "MuseTalk directory already exists, pulling latest changes" |
| cd MuseTalk && git pull && cd .. |
| else |
| git clone --depth 1 https://github.com/TMElyralab/MuseTalk.git |
| fi |
| cd MuseTalk |
|
|
| |
| echo "" |
| echo "=== Installing PyTorch 2.1.0 with CUDA 12.1 ===" |
| pip install -q torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu121 |
|
|
| |
| echo "" |
| echo "=== Installing OpenMMLab dependencies ===" |
| pip install -q mmengine==0.10.4 |
| pip install -q mmcv==2.1.0 -f https://download.openmmlab.com/mmcv/dist/cu121/torch2.1/index.html |
| pip install -q mmdet==3.3.0 |
| pip install -q mmpose==1.3.1 --no-deps |
|
|
| |
| echo "" |
| echo "=== Installing compatible dependencies ===" |
| pip install -q 'numpy<2' 'numpy==1.26.4' |
| pip install -q 'transformers==4.42.0' |
| pip install -q 'diffusers==0.28.0' |
| pip install -q 'huggingface_hub==0.23.2' |
| pip install -q 'opencv-python==4.8.0.74' |
|
|
| |
| echo "" |
| echo "=== Installing other requirements ===" |
| pip install -q omegaconf tqdm einops av librosa soundfile scikit-image |
| pip install -q ffmpeg-python accelerate safetensors |
|
|
| |
| echo "" |
| echo "=== Downloading models ===" |
|
|
| |
| mkdir -p models/dwpose models/sd-vae-ft-mse models/whisper |
|
|
| |
| ln -sf sd-vae-ft-mse models/sd-vae 2>/dev/null || true |
|
|
| |
| echo "Downloading DWPose model..." |
| if [ ! -f "models/dwpose/dw-ll_ucoco_384.pth" ]; then |
| wget -q --show-progress -O models/dwpose/dw-ll_ucoco_384.pth \ |
| 'https://huggingface.co/yzd-v/DWPose/resolve/main/dw-ll_ucoco_384.pth' |
| fi |
|
|
| |
| echo "Downloading SD-VAE model..." |
| if [ ! -f "models/sd-vae-ft-mse/config.json" ]; then |
| wget -q -O models/sd-vae-ft-mse/config.json \ |
| 'https://huggingface.co/stabilityai/sd-vae-ft-mse/resolve/main/config.json' |
| fi |
| if [ ! -f "models/sd-vae-ft-mse/diffusion_pytorch_model.bin" ]; then |
| wget -q --show-progress -O models/sd-vae-ft-mse/diffusion_pytorch_model.bin \ |
| 'https://huggingface.co/stabilityai/sd-vae-ft-mse/resolve/main/diffusion_pytorch_model.bin' |
| fi |
|
|
| |
| echo "Downloading Whisper model..." |
| python3 -c " |
| from huggingface_hub import snapshot_download |
| snapshot_download(repo_id='openai/whisper-tiny', local_dir='models/whisper', local_dir_use_symlinks=False) |
| " 2>/dev/null |
|
|
| |
| echo "Fixing config files..." |
| if [ -f "models/musetalk/musetalk.json" ] && [ ! -f "models/musetalk/config.json" ]; then |
| cp models/musetalk/musetalk.json models/musetalk/config.json |
| fi |
|
|
| |
| echo "" |
| echo "=== Downloading MuseTalk weights ===" |
| echo "Note: MuseTalk weights should be downloaded from HuggingFace:" |
| echo " https://huggingface.co/TMElyralab/MuseTalk" |
| echo "" |
| echo "If weights are not present, run:" |
| echo " cd $INSTALL_DIR/MuseTalk" |
| echo " git lfs install" |
| echo " git lfs pull" |
|
|
| |
| echo "" |
| echo "=== Verifying installation ===" |
| python3 -c " |
| import torch |
| print(f'PyTorch version: {torch.__version__}') |
| print(f'CUDA available: {torch.cuda.is_available()}') |
| if torch.cuda.is_available(): |
| print(f'CUDA version: {torch.version.cuda}') |
| print(f'GPU: {torch.cuda.get_device_name(0)}') |
| " |
|
|
| echo "" |
| echo "==============================================" |
| echo " Installation Complete!" |
| echo "==============================================" |
| echo "" |
| echo "To run MuseTalk V1.5:" |
| echo " 1. Activate the environment:" |
| echo " source $MINICONDA_DIR/bin/activate $ENV_NAME" |
| echo "" |
| echo " 2. Go to MuseTalk directory:" |
| echo " cd $INSTALL_DIR/MuseTalk" |
| echo "" |
| echo " 3. Create inference config (configs/inference/test.yaml):" |
| echo " task_0:" |
| echo " video_path: \"data/video/your_avatar.mp4\"" |
| echo " audio_path: \"path/to/your_audio.wav\"" |
| echo "" |
| echo " 4. Run inference:" |
| echo " PYTHONPATH=. python3 scripts/inference.py --version v15 --inference_config configs/inference/test.yaml" |
| echo "" |
| echo "Output will be saved in ./results/v15/" |
| echo "==============================================" |
|
|