Files
@ 6d82b1080379
Branch filter:
Location: OneEye/exp/keras/prepare_data.py - annotation
6d82b1080379
1.4 KiB
text/x-python
neural network grid detection
6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 6d82b1080379 | 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)
|