一、编写自动化测试脚本
在linux系统下,自动化的脚本很容易编写,只要把需要执行的指令都写在一个.sh脚本中就行了:
vim run_test.sh
echo "Begin to run!!! "
# #########生成raw_video list
# echo "Create raw video list... "
# video_list_path=************/video.txt
# find ***********/raw_video -name '*.mp4' > $video_list_path
# ########从video解帧为原图
# echo "Extract_frames_multilist... "
raw_pic_path=************/video_processed_img/
# python /data/glusterfs_workspaces/11123293/patch_occ/extract_frames_multilist.py --video_list $video_list_path --save_path $raw_pic_path
#######生成原图list
echo "Create raw picture list... "
raw_pic_lst=***********/video_processed_img/raw_img.txt
find $raw_pic_path -name '*.jpg' > $raw_pic_lst
#######检测对齐生成人脸图
echo "Face detect and align... "
face_pic_lst=************/video_processed_img_aligned/
python ************/face_detect.py --image_list $raw_pic_lst --save_dir $face_pic_lst
上面举例的代码段是每次我将从视频中解帧的图片处理成检测对齐后的人脸图片的一些步骤,可以根据需要更改。
其中“***********”是指对应的绝对路径地址,也可以用相对路径。
但是在调用的.py文件中,最好不要使用相对路径,因为利用这个脚本调用并执行时,是按这个脚本所在的地址来计算相对路径的。
使用的时候直接运行这个脚本就行了:
sh run_test.sh
或
./run_test.sh
如果需要日志:
sh run_test.sh > logs.txt
还有一个需要注意的是,当两个任务都需要大量的计算资源时,可能会因为资源调度不过来而出现错误,可以在两个任务中间sleep几秒:
sleep 3
当发现有很多步骤每次都需要重复的时候就可以用这一招啦~
甚至还可以一个脚本套一个脚本地走,根据个人需求来调整,能偷懒就偷懒哈哈。
当然,很多时候都需要调整一下参数或路径才能处理,这就要用到第二招,将.py中的参数暴露出来。
二、参数设置
在需要自动化执行的.py文件中添加这个包:
import argparse
并将运行时需要更改的参数声明出来:
parser = argparse.ArgumentParser()
parser.add_argument("--image_list", type=str, help='photo filelist')
parser.add_argument("--save_dir", type=str, help='save path')
args = parser.parse_args()
之后调用到这个参数的地方将image_list改为arg.imge_list就可以了,还可以设置缺省值:
parser.add_argument("--image_list", default="*********", type=str, help='photo filelist')
所以在脚本中应该要这样调用:
raw_pic_lst=***********/video_processed_img/raw_img.txt
face_pic_lst=************/video_processed_img_aligned/
python ************/face_detect.py --image_list $raw_pic_lst --save_dir $face_pic_lst
三、代码版本管理
团队合作就上git吧,一些小项目的代码感觉用不上git这种牛刀。
每次有参数变动把这个自动运行的脚本按日期保存一份就好了。
.py文件尽量在功能完善之后就避免改动。