#!/bin/bash

data=$1
model=$2
eval=$3
name=$4
data_min=$5

prefix="/media/compute/homes/saschroeder"
save_steps=200
train_steps=30000
rec_path="${prefix}/models/recognition_graphs/drinks2_classifier/"
default_config="${prefix}/models/ssd_default.config"
bg="${prefix}/data/background/annotated/darkset/"

#check input
if [ -z "$data" ]; then
  echo "usage: trainAndEval.sh <data_dir> <model_dir> <eval_dir> <data_min>"
  exit 1
fi
if [ -z "$model" ]; then
  echo "usage: trainAndEval.sh <data_dir> <model_dir> <eval_dir> <data_min>"
  exit 1
fi
if [ -z "$eval" ]; then
  echo "usage: trainAndEval.sh <data_dir> <model_dir> <eval_dir> <data_min>"
  exit 1
fi
#if [ -z "$data_min" ]; then
#  echo "usage: trainAndEval.sh <data_gen> <model_dir> <eval_dir> <data_min>"
#fi
date=`date +%Y-%m-%d`
train="train$date"
echo "read data from $data"
echo "model dir: $model"
echo "train dir: $train"
echo "eval dir: $eval"

#Pythonpath
sh tf_setup.sh

# duplicateImages
python ${prefix}/object_recognition/image_recognition_util/src/duplicatingImages.py $data_min $data $bg 1 4 1 1

if [ -z "$data" ]; then
  echo "gen data dir does not exist. something went wrong"
  exit 1
fi

echo "create model dir"

# create model, eval and train directory
train_dir="$model/$train"
# this might fail if there is a file $train_dir
if [ ! -d "$train_dir" ]; then
  mkdir -p $train_dir
fi
eval_logdir="$model/eval$date"
if [ ! -d "$eval_logdir" ]; then
  mkdir -p $eval_logdir
fi

# create classNames.txt in data_dir if it doesnt exist yet
cntxt="$data/classNames.txt"
if [ ! -f $cntxt ]; then
  echo "create $cntxt."
  findObjectDirs=$data
  if [ -d "$data/darkset" ]; then
    #object dirs inside $data/darkset
    findObjectDirs="$data/darkset"
  fi
  cd "$findObjectDirs"
  exec 3>"$cntxt"
  for i in */ ; do
    len=`expr ${#i} - 1`
    echo `expr substr $i 1 $len` >&3
  done
fi

echo "create tf records"

# create tf record (with config file, copy labelMap etc.)
python ${prefix}/object_recognition/image_recognition_util/src/create_yolo_tf_record.py --input_path="$data" --output_path="$model" --default_config_path="$default_config"

echo "start training"

# start training with param keep_n_checkpoints, num_steps, save_checkpoint_every_n_steps
python ${prefix}/object_recognition/tensorflow_ros/scripts/train.py --logtostderr --train_dir="$train_dir" --pipeline_config_path="$model/ssd.config" --to_keep=100 --train_steps=$train_steps --save_steps=$save_steps

echo "export graphs"

# export graphs (expotTfGraph.sh $model "train$date") -> deletes raw files, creates graph dirs
echo $model
sh ${prefix}/scripts/exportTfGraph.sh $model $train

# call evaluation script
sh ${prefix}/scripts/evaluate.sh $eval $eval_logdir $model $rec_path $train_dir

# single evaluation
#python /media/local_data/saschroeder/catkin_ws/src/object_recognition/image_recognition_rqt/scripts/evaluateNet.py --testset=$eval --detect_graph=$train_dir --labels="$model/labelMap.pbtxt" --rec_graph=$rec_path --logdir=$eval_logdir

# create tar.gz and save in web space
echo "create tar.gz and save in web space"
cd $model
tar_name="${name}_$date.tar.gz"
tar -czf $tar_name *
#scp $tar_name compute:/vol/www/techfak/clf-ml-data/clf_objectRec/models/$tar_name

# delete $train directory
#rm -rf $train_dir







