本文通过旋转原始样本的方式,来扩大样本量。
文件夹结构
类似以下结构:
- your_folder
- samples
- 0
0_ (1).jpg
0_ (2).jpg
...
- 1
1_ (1).jpg
1_ (2).jpg
...
- data
preprocess_data.py
开发语言和库
- Python
- Pillow
pip install Pillow
如何使用
直接在your_folder
目录下,运行以下python脚本,就可以自动旋转samples子文件夹内所有图像。
# -*- encoding:utf-8 -*-
import os
from PIL import Image
def preprocess_img(img_path, dst_sub_path, pfix):
if not os.path.isfile(img_path):
print("The input path for image file is invalid.")
return
if not os.path.isdir(dst_sub_path):
print("The output path is invalid")
return
im = Image.open(img_path)
rotates = range(0, 361, 15)
for idx, v in enumerate(rotates):
dst_im = im.rotate(v, 0, 1)
dst_file_path = os.path.join(dst_sub_path, str(pfix + idx) + ".jpg")
dst_im.save(dst_file_path)
return pfix + len(rotates)
def main(src_path, dst_path):
"""
main entry
"""
if not os.path.isdir(src_path):
print("The input path is invalid.")
return
if not os.path.isdir(dst_path):
print("The output path is invalid.")
return
src_subfolders = []
dst_subfolders = []
for sub in os.listdir(src_path):
src_sub = os.path.join(src_path, sub)
dst_sub = os.path.join(dst_path, sub)
if os.path.exists(src_sub) and os.path.isdir(src_sub):
src_subfolders.append(src_sub)
if os.path.exists(dst_sub) and os.path.isdir(dst_sub):
dst_subfolders.append(dst_sub)
else:
os.mkdir(dst_sub)
dst_subfolders.append(dst_sub)
# print src_subfolders
# print dst_subfolders
# print '-' * 80
src_len = len(src_subfolders)
dst_len = len(dst_subfolders)
img_postfix = ['jpg', 'png', 'jpeg']
if (src_len != 0) and (src_len == dst_len):
for idn in range(src_len):
src_sub = src_subfolders[idn]
dst_sub = dst_subfolders[idn]
pfix = 0
for img in os.listdir(src_sub):
if img[-3:] in img_postfix:
img_abs_path = os.path.join(src_sub, img)
pfix = preprocess_img(img_abs_path, dst_sub, pfix)
print('-' * 80)
print(src_sub.split("\\")[-1] + "Done!")
if __name__ == '__main__':
src_data_path = os.path.join(os.getcwd(), "samples")
dst_data_path = os.path.join(os.getcwd(), "data")
main(src_data_path, dst_data_path)
运行前后your_folder内结构
运行前
.
├── data
├── preprocess_data.py
└── samples
├── Bumblebee
│ └── Bumblebee.jpg
└── Transformers
└── newwar.jpg
运行后
.
├── data
│ ├── Bumblebee
│ │ ├── 0.jpg
│ │ ├── 1.jpg
│ │ ├── 10.jpg
│ │ ├── 11.jpg
│ │ ├── 12.jpg
│ │ ├── 13.jpg
│ │ ├── 14.jpg
│ │ ├── 15.jpg
│ │ ├── 16.jpg
│ │ ├── 17.jpg
│ │ ├── 18.jpg
│ │ ├── 19.jpg
│ │ ├── 2.jpg
│ │ ├── 20.jpg
│ │ ├── 21.jpg
│ │ ├── 22.jpg
│ │ ├── 23.jpg
│ │ ├── 24.jpg
│ │ ├── 3.jpg
│ │ ├── 4.jpg
│ │ ├── 5.jpg
│ │ ├── 6.jpg
│ │ ├── 7.jpg
│ │ ├── 8.jpg
│ │ └── 9.jpg
│ └── Transformers
│ ├── 0.jpg
│ ├── 1.jpg
│ ├── 10.jpg
│ ├── 11.jpg
│ ├── 12.jpg
│ ├── 13.jpg
│ ├── 14.jpg
│ ├── 15.jpg
│ ├── 16.jpg
│ ├── 17.jpg
│ ├── 18.jpg
│ ├── 19.jpg
│ ├── 2.jpg
│ ├── 20.jpg
│ ├── 21.jpg
│ ├── 22.jpg
│ ├── 23.jpg
│ ├── 24.jpg
│ ├── 3.jpg
│ ├── 4.jpg
│ ├── 5.jpg
│ ├── 6.jpg
│ ├── 7.jpg
│ ├── 8.jpg
│ └── 9.jpg
├── preprocess_data.py
└── samples
├── Bumblebee
│ └── Bumblebee.jpg
└── Transformers
└── newwar.jpg