調(diào)用這些函數(shù)需要通過一個主程序。這個主程序里首先定義三個子模塊,定義一個函數(shù)parse_arg()通過Python的argparse模塊定義了各種輸入?yún)?shù)和默認(rèn)值。需要注意的是這里用argparse來輸入所有參數(shù)是因?yàn)閰?shù)總量并不是特別多,如果增加了更多的擾動方法,更合適的參數(shù)輸入方式可能是通過一個配置文件。然后定義一個生成待處理圖像列表的函數(shù)generate_image_list(),根據(jù)輸入中要增加圖片的數(shù)量和并行進(jìn)程的數(shù)目盡可能均勻地為每個進(jìn)程生成了需要處理的任務(wù)列表。執(zhí)行隨機(jī)擾動的代碼定義在augment_images()中,這個函數(shù)是每個進(jìn)程內(nèi)進(jìn)行實(shí)際處理的函數(shù),執(zhí)行順序是鏡像
ightarrow 裁剪
ightarrow 旋轉(zhuǎn)
ightarrow HSV
ightarrow Gamma。需要注意的是鏡像
ightarrow 裁剪,因?yàn)橹皇莻€演示例子,這未必是一個合適的順序。最后定義一個main函數(shù)進(jìn)行調(diào)用,代碼如下:
import os
import argparse
import random
import math
from multiprocessing import Process
from multiprocessing import cpu_count
import cv2
# 導(dǎo)入image_augmentation.py為一個可調(diào)用模塊
import image_augmentation as ia
# 利用Python的argparse模塊讀取輸入輸出和各種擾動參數(shù)
def parse_args():
parser = argparse.ArgumentParser(
description='A Simple Image Data Augmentation Tool',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('input_dir',
help='Directory containing images')
parser.add_argument('output_dir',
help='Directory for augmented images')
parser.add_argument('num',
help='Number of images to be augmented',
type=int)
parser.add_argument('--num_procs',
help='Number of processes for paralleled augmentation',
type=int, default=cpu_count())
parser.add_argument('--p_mirror',
help='Ratio to mirror an image',
type=float, default=0.5)
parser.add_argument('--p_crop',
help='Ratio to randomly crop an image',
type=float, default=1.0)
parser.add_argument('--crop_size',
help='The ratio of cropped image size to original image size, in area',
type=float, default=0.8)
parser.add_argument('--crop_hw_vari',
help='Variation of h/w ratio',
type=float, default=0.1)
parser.add_argument('--p_rotate',
help='Ratio to randomly rotate an image',
type=float, default=1.0)
parser.add_argument('--p_rotate_crop',
help='Ratio to crop out the empty part in a rotated image',
type=float, default=1.0)
parser.add_argument('--rotate_angle_vari',
help='Variation range of rotate angle',
type=float, default=10.0)
parser.add_argument('--p_hsv',
help='Ratio to randomly change gamma of an image',
type=float, default=1.0)
parser.add_argument('--hue_vari',
help='Variation of hue',
type=int, default=10)
parser.add_argument('--sat_vari',
help='Variation of saturation',
type=float, default=0.1)
parser.add_argument('--val_vari',
help='Variation of value',
type=float, default=0.1)
評論
查看更多