【Tensorflow】〇と×のトレーニングデータを自動生成する

Tensorflow のトレーニングデータを自動で生成するサンプルコードの紹介です。Python で書かれています。
〇と×のイメージを自動で生成しています。〇と×、それぞれのトレーニング用のイメージを5万枚、テスト用のデータを5000枚作成します。

コードを実行せず、データだけ欲しい方はこちらをご覧ください。〇と×のトレーニングデータダウンロード

スポンサーリンク

【〇のイメージ例】

【×のイメージ例】

このような〇と×のイメージを自動で大量に生成します。

スポンサーリンク

Pythonによりイメージ自動生成サンプルコード

以下サンプルコードです。
イメージ (jpg)は次のディレクトリい大量生成されます。事前にディレクトリを作成しておいてください。
/test_data/maru-batsu/

生成したイメージファイルの相対パスの一覧は以下のファイルにcsv として保存されます。生成したファイルを訓練で使用する場合に活用してください。

トレーニング用データ(5万×2種類):/test_data/train-maru-batsu.txt
テスト用データ(5000×2種類):/test_data/test-maru-batsu.txt

命名規則は以下の通りです。

〇のイメージ:<番号>-0.jpg
×のイメージ:<番号>-1.jpg


<番号>は以下のとおりです。

0~50000:訓練用データ
50001~55000:テスト用データ

Python バージョン:Python2.7
OSバージョン:Ubuntu 16.04.2


#楕円および"バツ"を生成するサンプルコード import numpy as np import cv2 import random #一覧ファイル BASEDIR='/test_data/maru-batsu/' f_train = open('/test_data/train-maru-batsu.txt','w') f_test = open('/test_data/test-maru-batsu.txt','w')############### 1.楕円 ############### for i in range(55000): #整数の乱数を生成 kakudo1=random.randint(0,179) nagasa1=random.randint(5,11) nagasa2=random.randint(5,11) # 28 x 28 x 3(BGR) size = 28, 28, 3 img = np.zeros(size, dtype=np.uint8) #楕円を描く。 #順に中央座標, (長軸長さ、短軸長さ), 回転角度, 円弧開始角度, 円弧終了角度, 色, 線の太さ 。線の太さがマイナスだと塗りつぶし。 cv2.ellipse(img, (14, 14), (nagasa1, nagasa2), kakudo1, 0 , 360 , (255, 255, 255), 1) #bit反転 img = cv2.bitwise_not(img) #グレイスケール化(グレイスケール化は他でやるのでここでは省略 #img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) #ファイルへ書き出し cv2.imwrite(BASEDIR+str(i)+"-"+str(0)+'.jpg', img) if i<50001: f_train.write(BASEDIR+str(i)+'-'+str(0)+'.jpg\t') f_train.write(str(0)+'\n') else: f_test.write(BASEDIR+str(i)+'-'+str(0)+'.jpg\t') f_test.write(str(0)+'\n') ############### 2.ばつ ############### for i in range(55000): #整数の乱数を生成 x1=random.randint(0,13) y1=random.randint(0,13) x2=random.randint(14,27) y2=random.randint(14,27) x3=random.randint(14,27) y3=random.randint(0,13) x4=random.randint(0,13) y4=random.randint(14,27) # 28 x 28 x 3(BGR) size = 28, 28, 3 img = np.zeros(size, dtype=np.uint8) #線を引く cv2.line(img,(x1,y1),(x2,y2),(255,255,255),1) cv2.line(img,(x3,y3),(x4,y4),(255,255,255),1) #bit反転 img = cv2.bitwise_not(img) #グレイスケール化(グレイスケール化は他でやるのでここでは省略 #img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) #ファイルへ書き出し cv2.imwrite(BASEDIR+str(i)+"-"+str(1)+'.jpg', img) if i<50001: f_train.write(BASEDIR+str(i)+'-'+str(1)+'.jpg\t') f_train.write(str(1)+'\n') else: f_test.write(BASEDIR+str(i)+'-'+str(1)+'.jpg\t') f_test.write(str(1)+'\n') f_train.close() f_test.close()

スポンサーリンク

[Tensorflow 開発メモへ戻る]