【Tensorflow】ImageDataGeneratorで画像を水増ししてみた

はじめに

画像認識をする際、学習用データを画像収集に手間が掛かるのですが、
ImageDataGeneratorで画像を水増しして保存する方法が便利だったので残しておきます。

ソースコード

1枚の画像を1000枚に水増しする例です。

ImageDataGeneratorのオプションは参考になるブログが検索すれば引っかかるので、ここではメモ程度

  • rotation_range:画像を回転させる角度
  • width_shift_range:水平にシフトする画像横幅に対する割合
  • height_shift_range:水平にシフトする画像縦に対する割合
  • shear_range:シアー強度(指定した範囲内の角度でランダムに引っ張る)
  • zoom_range:拡大縮小範囲
  • horizontal_flip:水平方向反転
  • vertical_flip:垂直方向反転
  • fill_mode:入力画像の境界周りの埋め方
import tensorflow
from tensorflow import keras
from PIL import Image
from keras.preprocessing.image import ImageDataGenerator

img = keras.preprocessing.image.load_img("C:\\test.gif")
x = keras.preprocessing.image.img_to_array(img)
# (height, width, 3) -> (1, height, width, 3)
x = x.reshape((1,) + x.shape)

datagen = ImageDataGenerator(
           rotation_range=40,
           width_shift_range=0.2,
           height_shift_range=0.2,
           shear_range=0.2,
           zoom_range=0.2,
           horizontal_flip=True,
           vertical_flip=False,
           fill_mode='nearest')

for d, i in zip(datagen.flow(x, batch_size=1), range(1000)):
  filename = 'C:\\save\\' + str(i) + '.png'
  img = keras.preprocessing.image.array_to_img(d[0], scale=True)
  img.save(filename)
  # 画像サイズを設定したい場合
  # img_r = img.resize((50, 50))
  # img_r.save(filename)

備考

上記では自前でファイル名を付与していたのですが、ファイル名が自動で生成されても問題がない場合はこんな感じでもできます。
この場合、img_0_9876.pngみたいなファイル名になります。

for d, i in zip(datagen.flow(x, batch_size=1, save_to_dir=save_to_dir, save_prefix='img'), range(1000)):

未分類

Posted by ababa