# This file tests the whole process from training to deployment

# Usage:
#   1. Install PaddlePaddle that supports TenorRT
#   2. `export CUDA_VISIBLE_DEVICES=id`
#   3. `cd ./PaddleSeg/Matting`
#.  4. `bash tests/test_whole_process.sh`


save_root="output/tests"
mkdir -p ${save_root}
video_path="${save_root}/v1.mov"

# Obtain dataset to test
dataset_root="data/PPM-100"
if [ ! -d ${dataset_root} ]; then
    mkdir -p data && cd data
    wget https://paddleseg.bj.bcebos.com/matting/datasets/PPM-100.zip
    unzip PPM-100.zip
    rm PPM-100.zip
    cd ..
fi
# Obtaion video to test
if [ ! -a ${video_path} ]; then
    wget https://paddleseg.bj.bcebos.com/matting/demo/v1.mov
    mv v1.mov ${save_root}
fi

# Training
echo "Test training..."
python tools/train.py \
    --config configs/quick_start/ppmattingv2-stdc1-human_512.yml \
    --learning_rate 0.0001 \
    --iters 10 \
    --batch_size 1 \
    --log_iters 1 \
    --use_vdl \
    --save_interval 10 \
    --do_eval \
    --num_workers 1 \
    --save_dir ${save_root} \
    --opts model.pretrained="https://paddleseg.bj.bcebos.com/matting/models/ppmattingv2-stdc1-human_512.pdparams"

# Evaluation
echo "Test evaluation..."
python tools/val.py \
    --config configs/quick_start/ppmattingv2-stdc1-human_512.yml \
    --model_path ${save_root}/best_model/model.pdparams \
    --metrics sad mse grad conn \
    --save_dir ${save_root}/results/evaluation \
    --save_results

# Predictions
echo "Test prediction..."
python tools/predict.py \
    --config configs/quick_start/ppmattingv2-stdc1-human_512.yml \
    --model_path ${save_root}/best_model/model.pdparams \
    --image_path demo/human.jpg \
    --save_dir ${save_root}/results/prediction \
    --fg_estimate True

python tools/predict.py --config configs/quick_start/ppmattingv2-stdc1-human_512.yml --model_path ${save_root}/best_model/model.pdparams  --image_path demo/human.jpg --fg_estimate True

# Video prediction
echo "Test video predcition..."
python tools/predict_video.py \
    --config configs/quick_start/ppmattingv2-stdc1-human_512.yml \
    --model_path ${save_root}/best_model/model.pdparams \
    --video_path ${video_path} \
    --save_dir ${save_root}/results/video_prediction \
    --fg_estimate False

# Background replacement
echo "Test background replacement..."
python tools/bg_replace.py \
    --config configs/quick_start/ppmattingv2-stdc1-human_512.yml \
    --model_path ${save_root}/best_model/model.pdparams \
    --image_path demo/human.jpg \
    --background g \
    --save_dir ${save_root}/results/background_replacement \
    --fg_estimate True

# Video background replacement
echo "Test video background replacement..."
python tools/bg_replace_video.py \
    --config configs/quick_start/ppmattingv2-stdc1-human_512.yml \
    --model_path ${save_root}/best_model/model.pdparams \
    --video_path ${video_path} \
    --background 'g' \
    --save_dir ${save_root}/results/video_background_replacement \
    --fg_estimate False

# Export
echo "Test exportment..."
python tools/export.py \
    --config configs/quick_start/ppmattingv2-stdc1-human_512.yml \
    --model_path ${save_root}/best_model/model.pdparams \
    --save_dir ${save_root}/export \
    --input_shape 1 3 512 512

# Deployment
echo "Test deployment"
python deploy/python/infer.py \
    --config ${save_root}/export/deploy.yaml \
    --image_path demo/human.jpg \
    --save_dir ${save_root}/results/deploy \

python deploy/python/infer.py \
    --config ${save_root}/export/deploy.yaml \
    --video_path ${video_path} \
    --save_dir ${save_root}/results/deploy \
    --fg_estimate False
