first commit
This commit is contained in:
167
DataSet_Own/1. 图片预处理(内含使用手册)/6_TOOL_stitch_pics.sh
Executable file
167
DataSet_Own/1. 图片预处理(内含使用手册)/6_TOOL_stitch_pics.sh
Executable file
@@ -0,0 +1,167 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user