168 lines
6.6 KiB
Bash
Executable File
168 lines
6.6 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
usage() {
|
||
echo "Usage: $0 -i <ori_image_directory> -l <ori_label_directory> -r <stitch_result_directory> [ -p <prefix> -s <suffix> -h]"
|
||
echo "对image图片和label图片进行拼接(-i -r不能为空)(-l为填写项-p -s默认为空"") "
|
||
echo "-i:原始image的路径,-l:拼接label的路径,-p:前缀内容,-s:后缀内容(不用管文件后缀名),-h:帮助"
|
||
echo "e.g. 6_TOOL_stitch_pics.sh -i ./C组未标注 -l ./C组标注图片 -r ./C组result_stitch -p Group_C_ -s _label"
|
||
}
|
||
|
||
ori_image_directorys=""
|
||
ori_label_directorys=""
|
||
stitch_result_directorys=""
|
||
prefix=""
|
||
suffix=""
|
||
|
||
while getopts "hl:i:r:p:s:a:" opt; do
|
||
case $opt in
|
||
h)
|
||
usage
|
||
exit 0
|
||
;;
|
||
i)
|
||
ori_image_directorys=$OPTARG
|
||
;;
|
||
l)
|
||
ori_label_directorys=$OPTARG
|
||
;;
|
||
p)
|
||
prefix=$OPTARG
|
||
;;
|
||
s)
|
||
suffix=$OPTARG
|
||
;;
|
||
r)
|
||
stitch_result_directorys=$OPTARG
|
||
;;
|
||
*)
|
||
echo -e '\033[31m!!! Error, Illegal input !!!\033[0m'
|
||
usage
|
||
exit 1
|
||
;;
|
||
esac
|
||
done
|
||
|
||
# 如果堆叠地址为空,生成默认堆叠地址
|
||
if [ -z "$stitch_result_directorys" ]; then
|
||
stitch_result_directorys=""$ori_label_directorys"_拼接"
|
||
echo -n "请输入堆叠结果存储目录(默认为$stitch_result_directorys):"
|
||
read -r temp
|
||
if [ ! -z $temp ]; then
|
||
stitch_result_directorys=$temp
|
||
fi
|
||
fi
|
||
|
||
# 判断输入地址是否为空
|
||
if [ -z "$ori_label_directorys" ] || [ -z "$ori_image_directorys" ] || [ -z "$stitch_result_directorys" ]; then
|
||
echo -e "\033[31m输入地址 -i -l -z 存在空地址\033[0m"
|
||
usage
|
||
exit 1
|
||
fi
|
||
|
||
# 地址转化
|
||
ori_image_directory=$(readlink -f "$ori_image_directorys")
|
||
ori_label_directory=$(readlink -f "$ori_label_directorys")
|
||
stitch_result_directory=$(readlink -f "$stitch_result_directorys")
|
||
if [ -z "$ori_label_directory" ] || [ -z "$ori_image_directory" ]|| [ -z "$stitch_result_directory" ]; then
|
||
echo "image、label、result存在无法解析地址,程序退出"
|
||
echo -e "\033[31mori_image_directory\033[0m: $ori_image_directorys"
|
||
echo -e "\033[31mori_label_directory\033[0m: $ori_label_directorys"
|
||
echo -e "\033[31mori_label_directory\033[0m: $stitch_result_directorys"
|
||
exit 1
|
||
fi
|
||
if [ ! -d "$ori_label_directory" ] || [ ! -d "$ori_image_directory" ]; then
|
||
echo "image、label两目录有一个不存在,程序退出"
|
||
echo -e "\033[31mori_image_directory\033[0m: $ori_image_directory"
|
||
echo -e "\033[31mori_label_directory\033[0m: $ori_label_directorys"
|
||
exit 1
|
||
fi
|
||
|
||
echo -e "\033[32m_____ 6_TOOL_stitch_pics.sh _____\033[0m"
|
||
|
||
# 图片相对位置
|
||
PS3='Please enter your choice:'
|
||
options=("Imge ↑ Label ↓" "Label ↑ Imge ↓" "Imge ← Label →" "Label ← Imge →" )
|
||
echo "请选择图片与Label的相对位置,默认为1.\"Imge↑Label↓\""
|
||
select opt in "${options[@]}"
|
||
do
|
||
case $opt in
|
||
# 这里面返回的结果都是img在前,label在后的
|
||
"Imge ↑ Label ↓")
|
||
relative_pos="Img_up_label_down"
|
||
break
|
||
;;
|
||
"Label ↑ Imge ↓")
|
||
relative_pos="Img_down_label_up"
|
||
break
|
||
;;
|
||
"Imge ← Label →")
|
||
relative_pos="Img_left_label_right"
|
||
break
|
||
;;
|
||
"Label ← Imge →")
|
||
relative_pos="Img_right_label_left"
|
||
break
|
||
;;
|
||
*)
|
||
echo "Set to default 1.\"Imge↑Label↓\""
|
||
relative_pos="Img_up_label_down"
|
||
break
|
||
;;
|
||
esac
|
||
done
|
||
|
||
# 获取当前脚本的路径和名称
|
||
script_path=$(dirname "$0")
|
||
# 将当前目录更改为脚本所在的路径
|
||
cd "$script_path"
|
||
|
||
# 激活conda环境
|
||
source /home/"$USER"/miniconda/bin/activate Deal_pics
|
||
|
||
echo -e "\033[33mimage所在文件夹为$ori_image_directory\nlable所在文件夹为$ori_label_directory\033[0m"
|
||
|
||
# 遍历label目录
|
||
for file_path in "$ori_label_directory"/*; do
|
||
# 判断是否是文件
|
||
if [[ -f "$file_path" ]]; then
|
||
file_name=$(basename "$file_path")
|
||
# 判断文件名是否符合规范
|
||
if [[ "$file_name" =~ .*\.(jpg|png|bmp|JPG|PNG|BMP) ]]; then # 判断是否有为图片
|
||
# if [[ "$file_name" =~ "$prefix".*"$suffix".*\.(jpg|png|bmp|JPG|PNG|BMP)$ ]]; then # 判断是否有满足要求的文件名
|
||
# 抽取文件名(有前缀、后缀的抽取前缀、后缀里面的,没有的返回整个)
|
||
if [ -z $prefix ];then
|
||
file_name_extract=$(echo $file_name | sed "s/"$prefix"\(.*\)"$suffix".*/\1/" | sed "s/\(.*\)\.\(jpg\|png\|bmp\|JPG\|PNG\|BMP\)$/\1/")
|
||
else
|
||
file_name_extract=$(echo $file_name | sed "s/".*$prefix"\(.*\)"$suffix".*/\1/" | sed "s/\(.*\)\.\(jpg\|png\|bmp\|JPG\|PNG\|BMP\)$/\1/")
|
||
fi
|
||
# 从label目录中看是否有此文件
|
||
file_name_other=$(ls $ori_image_directory | grep $file_name_extract)
|
||
file_name_other=$(echo "$(echo "$file_name_other" | sed '/^$/d')" | head -n1) # 提取出文件名
|
||
# 如果另一个目录没有此文件的话
|
||
if [ -z "$file_name_other" ]; then
|
||
echo "$file_name label中对应内容未在$ori_image_directory搜索到"
|
||
# 建立相关存储文件夹
|
||
if [ ! -d "$ori_label_directory/Not_pair_pics" ]; then
|
||
mkdir -p "$ori_label_directory/Not_pair_pics" # 建立存储文件夹
|
||
fi
|
||
# 移动相关文件
|
||
cp "$ori_label_directory/$file_name" "$ori_label_directory/Not_pair_pics"
|
||
echo "$file_name" >> "$ori_label_directory/Not_pair_pics/not_pair.txt"
|
||
else # 如果另一个目录有此配对文件的话,则运行相关程序
|
||
echo "image中的$file_name_other,与lable中的$file_name"
|
||
if [ ! -d "$stitch_result_directory" ]; then
|
||
echo "创建stitch_result_directory存储文件夹"
|
||
echo -e "\033[35运行:\033[0m mkdir -p $stitch_result_directory"
|
||
mkdir -p $stitch_result_directory
|
||
fi
|
||
echo -e "\033[35运行:\033[0mpython 6_stitch_picture.py "$ori_image_directory/$file_name_other" "$ori_label_directory/$file_name" "$stitch_result_directory" "$relative_pos""
|
||
python 6_stitch_picture.py "$ori_image_directory/$file_name_other" "$ori_label_directory/$file_name" "$stitch_result_directory" "$relative_pos"
|
||
echo ""
|
||
fi
|
||
|
||
fi
|
||
else
|
||
echo "$file_path不是文件"
|
||
fi
|
||
done
|