Changeset - 6180b3bd7f3f
[Not reviewed]
default
0 2 1
Laman - 6 years ago 2019-01-01 11:10:26

generating synthetic samples
3 files changed with 83 insertions and 15 deletions:
0 comments (0 inline, 0 general)
exp/color_sampler.py
Show inline comments
 
@@ -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)
exp/createsamples.py
Show inline comments
 
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)
exp/diagram.py
Show inline comments
 
new file 100644
 
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
0 comments (0 inline, 0 general)