diff --git a/exp/color_sampler.py b/exp/color_sampler.py --- a/exp/color_sampler.py +++ b/exp/color_sampler.py @@ -15,12 +15,8 @@ from analyzer.epoint import EPoint from analyzer.corners import Corners -dirname=sys.argv[1] -annotations=sys.argv[2] - - class Sampler: - def __init__(self): + def __init__(self,dirname,annotations): self.dirname=dirname self.annotations=DataFile(annotations) self.filenames=[f for f in sorted(os.listdir(self.dirname)) if f.endswith(".jpg")] @@ -163,4 +159,7 @@ class DataFile(MutableMapping): if __name__=="__main__": - s=Sampler() + dirname=sys.argv[1] + annotations=sys.argv[2] + + s=Sampler(dirname,annotations) diff --git a/exp/createsamples.py b/exp/createsamples.py --- a/exp/createsamples.py +++ b/exp/createsamples.py @@ -1,15 +1,20 @@ +import sys +sys.path.append("../src") + import os -import sys import random import PIL.Image import PIL.ImageDraw import PIL +from diagram import createDiagram from color_sampler import DataFile finalPosCount=5000 +empty=True +perspective=False random.seed(361) inputDir=sys.argv[1] outputDir=sys.argv[2] @@ -71,12 +76,36 @@ def extract(image,cornerList,i,filename) print(outputPath,1,0,0,x2-x1,y2-y1) -for (filename,cornerList) in annotations.items(): - path=os.path.join(inputDir, filename) - if not os.path.isfile(path): - print("{0} not found, ignored".format(path)) - continue +def generate(background,i,outputDir): + bg=background.copy() + img=createDiagram([[]]) + maxSize=min(*img.size,*bg.size) + size=random.randint(min(80,maxSize),maxSize) + img=img.resize((size,size),PIL.Image.BICUBIC) + wRange=bg.size[0]-img.size[0] + hRange=bg.size[1]-img.size[1] + x=random.randint(0,wRange) + y=random.randint(0,hRange) + bg.paste(img,(x,y)) + outputPath=os.path.join(outputDir,"{0:04}.jpg".format(i)) + bg.save(outputPath) + rect=[ + max(x-5,0), + max(y-5,0), + img.size[0]+min(10,bg.size[0]-x), + img.size[1]+min(10,bg.size[1]-y) + ] + print(outputPath,1,*rect,flush=True) - img=PIL.Image.open(path) - for i in range(multiple): - extract(img,cornerList,i,filename) +# for (filename,cornerList) in annotations.items(): +# path=os.path.join(inputDir, filename) +# if not os.path.isfile(path): +# print("{0} not found, ignored".format(path)) +# continue +# +# img=PIL.Image.open(path) +# for i in range(multiple): +# extract(img,cornerList,i,filename) + +for i in range(finalPosCount): + generate(pickRandom(),i,outputDir) diff --git a/exp/diagram.py b/exp/diagram.py new file mode 100644 --- /dev/null +++ b/exp/diagram.py @@ -0,0 +1,40 @@ +import PIL.Image +import PIL.ImageDraw + + +width=360 +height=width +padding=12 +stoneSize=(width-2*padding)/18 +yellow=(255,200,0) +white=(255,255,255) +black=(0,0,0) + + +def createDiagram(board): + img=PIL.Image.new("RGB",(width,height),yellow) + canvas=PIL.ImageDraw.Draw(img) + + # grid + for i in range(19): + canvas.line((padding,padding+i*stoneSize,width-padding,padding+i*stoneSize),black,1) + canvas.line((padding+i*stoneSize,padding,padding+i*stoneSize,height-padding),black,1) + + # stars + radius=2 + for r in range(3,19,6): + for c in range(3,19,6): + x=c*stoneSize+padding + y=r*stoneSize+padding + canvas.ellipse((x-radius,y-radius,x+radius,y+radius),black) + + # stones + radius=stoneSize/2 + for (r,row) in enumerate(board): + for (c,color) in enumerate(row): + if color=="X" or color=="O": + x=c*stoneSize+padding + y=r*stoneSize+padding + canvas.ellipse((x-radius,y-radius,x+radius,y+radius),black if color=="X" else white) + + return img \ No newline at end of file