Files @ 6d82b1080379
Branch filter:

Location: OneEye/exp/keras/prepare_data.py - annotation

Laman
neural network grid detection
import os
import sys
import re
import random

import cv2 as cv

sys.path.append("../exp")
from annotations import DataFile,computeBoundingBox

random.seed(361)


def traverseDirs(root):
	stack=[root]
	while len(stack)>0:
		d=stack.pop()
		contents=sorted(os.scandir(d),key=lambda f: f.name,reverse=True)
		if any(f.name=="annotations.json.gz" for f in contents):
			print(d)
			yield d
		for f in contents:
			if f.is_dir(): stack.append(f.path)


def harvestDir(path):
	annotations=DataFile(os.path.join(path,"annotations.json.gz"))
	imgFilter=lambda f: f.is_file() and re.match(r".*\.(jpg|jpeg|png|gif)$", f.name.lower())
	files=sorted(filter(imgFilter,os.scandir(path)),key=lambda f: f.name)
	boards=annotations["."]
	for f in files:
		img=cv.imread(f.path)
		for b in boards:
			crop(img,b)


def crop(img,board):
	margin=0.2
	(hi,wi)=img.shape[:2]
	(x1,y1,x2,y2)=computeBoundingBox(board.board)
	(wb,hb)=(x2-x1,y2-y1)
	dx1=min(int(wb*margin),x1)
	dx2=min(int(wb*margin),wi-x2)
	dy1=min(int(hb*margin),y1)
	dy2=min(int(hb*margin),hi-y2)
	xa=x1-random.randint(0,dx1)
	xb=x2+random.randint(0,dx2)
	ya=y1-random.randint(0,dy1)
	yb=y2+random.randint(0,dy2)
	show(img[ya:yb,xa:xb])
	return img[ya:yb,xa:xb]


def show(img,filename="x"):
	cv.imshow(filename,img)
	cv.waitKey(0)
	cv.destroyAllWindows()


if __name__=="__main__":
	root=sys.argv[1]
	for d in traverseDirs(root):
		harvestDir(d)