形状の異なる数字画像を大量に生成する
機械学習を行うためには大量の学習データが必要になります。0-9の10個の数字画像を大量に生成します。以下のパラメータを変えた32x32pxの画像を4320個生成しpngファイルで保存します。
- 数字(0-9)・・・10
- フォント・・・8
- 文字のx位置・・・3
- 文字のy位置・・・3
- 回転角度・・・3
- ぼかし処理・・・2
10 x 8 x 3 x 3 x 3 x 2 = 4320個
環境
準備
生成した画像データ保存用フォルダ'number_generate'をjupyter notebookファイル(***.ipynb)と同じディレクトリに作成しました。
コード
import cv2 import numpy as np import itertools counter = 0 # ファイル名の通し番号用カウンター # 白画像の生成(数字の回転時に隙間ができるので40x40pxの大きめサイズにする) img_background=np.ones((40,40), np.uint8)*255 x_list = [9,11,13] # x座標のリスト y_list = [26,28,30] # y座標のリスト angle_list = [-5,0,5] # 回転角度のリスト blur_list = [1,3] # ぼかし処理のリスト fontscale = 0.8 # フォントの大きさ color=0 # フォントカラー(白) # フォントリスト fontface_list = [cv2.FONT_HERSHEY_COMPLEX, cv2.FONT_HERSHEY_COMPLEX, cv2.FONT_HERSHEY_DUPLEX, cv2.FONT_HERSHEY_SCRIPT_COMPLEX, cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, cv2.FONT_HERSHEY_SIMPLEX, cv2.FONT_HERSHEY_TRIPLEX, cv2.FONT_ITALIC] #数字の画像を生成、ファイル名を付けて保存 def number_generate(): counter_str = str(counter) counter_zerofill = counter_str.zfill(3) trans= cv2.getRotationMatrix2D((20,20),angle,1) for i in range(10): img = img_background.copy() number=str(i) filename = number+'_'+counter_zerofill+'.png' cv2.putText(img,number,(x,y),fontface,fontscale,color) img2 = cv2.warpAffine(img,trans,(40,40)) img3 = img2[4:36,4:36] img3 = cv2.blur(img3,(blur,blur)) cv2.imwrite('number_generate/'+filename,img3) # フォントリスト、x座標、y座標、回転角度、平滑化の各リストのネストを実行 for fontface,x,y,angle,blur in itertools.product(fontface_list,x_list,y_list,angle_list,blur_list): counter+=1 number_generate()
実行結果
少しずつ形状の違う数字が書かれた画像ファイルが保存されます。