【機械学習】データ水増しプログラム

python

こんにちは、人です。

今回は機械学習に必要なデータを水増しするプログラムを作ったので公開してみようと思います。

やることは「連番リネーム」+「上下反転」+「左右反転」です。

正直言って、このプログラム作ったあとは感動して脳汁出ました。

対象読者

  • pythonプログラマー
  • 機械学習やってる人

この記事を書いた理由

機械学習でデータ少なかったんで水増ししようと思ってプログラム書いてみたから。

あと、pythonでのファイル操作に感動したから

環境

  • macOS Monterey
  • Python 3.7

プログラム

from PIL import Image, ImageOps
import glob, os
import cv2

in_path = "/Users/SuperMan/Desktop/test/test_before" # 入力ファイルを指定する
out_path = "/Users/SuperMan/Desktop/test/test_after" # 出力ファイルを指定する
files = glob.glob("{0}/*.jpg".format(in_path)) #jpgだけの写真ををとってくる

i = 1
for name in files:
    print(name)

    img = Image.open("{0}".format(name)) # 画像読み込み
    
    zero_i = "{0:03d}".format(i) # 3桁の0埋め連番作成
    new_name =  zero_i
    
    img_fl_tb = img.transpose(Image.FLIP_TOP_BOTTOM) # 上下反転
    img_fl_lr = img.transpose(Image.FLIP_LEFT_RIGHT) # 左右反転

    new_name_tb = new_name + "tb" + ".jpg"
    new_name_lr = new_name + "lr" + ".jpg"
    new_name    = new_name + ".jpg"
    
    print(new_name)
    
    img.save(out_path + "/" + "{0}".format(new_name))
    img_fl_tb.save(out_path + "/" + "{0}".format(new_name_tb)) # 画像保存
    img_fl_lr.save(out_path + "/" + "{0}".format(new_name_lr)) # 画像保存
    
    i = i + 1

実行方法

まずは実行するためのフォルダを作ります。

入力フォルダと出力フォルダで2つ用意しましょう。

次にこのフォルダのパスを上記のプログラムに入力します。

こんな感じです。

最後にターミナルで実行します。(コマンドプロンプトやSpyderでも大丈夫です。)

自分の場合はdataup.pyっいう名前をつけてるので下の画像のように実行しました。↓

実行結果

以下に実行結果を示します。

元々3種類の写真があったのですが、それらが連番をつけられ、「~lr」と「~tb」の写真が追加されています。

「lr」は「leftとright」で左右反転を

「tb」は「topとbottom」で上下反転を表しているつもりです。

少しわかりにくいので、図にしたものも示します。

まとめ

pythonってマジでなんでもできてすごいよね!

みんなも水増しやってみてね!

コメント

タイトルとURLをコピーしました