diff --git a/exp/dochi.py b/exp/dochi.py --- a/exp/dochi.py +++ b/exp/dochi.py @@ -3,12 +3,12 @@ import time import argparse import logging as log +import cv2 as cv import numpy as np import keras from keras.models import load_model -from PIL import Image,ImageDraw +from PIL import Image -from epoint import EPoint import exp_config as cfg from kerokero.k_util import averageDistance @@ -16,6 +16,7 @@ keras.losses.averageDistance=averageDist keras.metrics.averageDistance=averageDistance model=load_model(cfg.dochiModel) +SIDE=224 def locateGrid(img): @@ -28,7 +29,7 @@ def locateGrid(img): label=model.predict(np.reshape(npImg,(1,224,224,1))) points=[] for i in range(4): - points.append(EPoint((label[0][i][0]+1)*(width/2),(label[0][i][1]+1)*(height/2))) + points.append([(label[0][i][0]+1)*(width/2),(label[0][i][1]+1)*(height/2)]) t=time.time()-t1 log.info("grid located in {0:.3}s".format(t)) return points @@ -43,7 +44,10 @@ if __name__=="__main__": for image_path in args.input: image=Image.open(image_path) points=locateGrid(image) - drawer=ImageDraw.Draw(image) - for p in points: - drawer.ellipse((p.x-2,p.y-2,p.x+2,p.y+2),fill="#00ff00") - image.save(os.path.join(args.output_dir,os.path.basename(image_path))) + x1=SIDE*0.1 + x2=SIDE*0.9 + destPoints=[(x1,x1),(x1,x2),(x2,x2),(x2,x1)] + m=cv.getPerspectiveTransform(np.float32(points),np.float32(destPoints)) + img=cv.warpPerspective(np.uint8(image),m,(SIDE,SIDE)) + img=cv.cvtColor(img,cv.COLOR_BGR2RGB) + cv.imwrite(os.path.join(args.output_dir,os.path.basename(image_path)),img)