def predcit(self, img, label, index): if self.debug: cv2.circle(img[0], (int(label[0]), int(label[1])), 3, (255, 0, 0), -1) print "img.shape: ", img.shape print "label.shape: ", label.shape pred = self.model.predict(img, verbose=1) print "pred.shape: ", pred.shape img = ut.plotTarget(img[0], label, ifSquareOnly=True, ifGreen=True) # img = ut.plotTarget(img, ut.deNormalize(labels, self.imSize), self.imSize, ifSquareOnly = True, ifGreen = True) # cv2.imwrite(self.evaluationOutputDir + 'inputTestImg' + str(saveCount) + '.jpg', img) labelImg = ut.plotTarget(img, ut.deNormalize(pred[0], self.imSize), self.imSize, ifSquareOnly=True) # cv2.imshow("img", img) # cv2.waitKey(0) print "saving" + self.evaluationOutputDir + str( index) + 'Pred' + '.jpg' # cv2.imwrite(self.evaluationOutputDir + str(index) + 'Input' + '.jpg', img) cv2.imwrite(self.evaluationOutputDir + str(index) + 'Pred' + '.jpg', labelImg)
def predcit(self): saveCount = 0 for iter in range(self.MaxTestIters): test_start = iter * self.batch_size test_end = (iter + 1) * self.batch_size # if iter == self.MaxTestIters - 1: # test_end = len(self.DataTe) print "test_start, test_end: ", test_start, test_end if self.ifMenpo39DataSet: X_batch_T, label_BB_T, Z_Names_T = self.DataGenBB( train_start=test_start, train_end=test_end) elif self.ifpreProcessedSemifrontal: X_batch_T, label_BB_T, Z_Names_T = self.DataGenBB( train_start=test_start, train_end=test_end) else: X_batch_T, label_BB_T, Z_Names_T = self.DataGenBB( DataStrs=self.DataTe, train_start=test_start, train_end=test_end) # print "X_batch_T.shape: ", X_batch_T.shape # print "label_BB_T.shape: ", label_BB_T.shape pred = self.model.predict(X_batch_T, verbose=1) # print "type(pred): ", type(pred) # print "pred.shape: ", pred.shape # print "Z_Names_T.shape: ", Z_Names_T.shape # print "X_batch_T[-1]: ", X_batch_T[-1] # print "label_BB_T[-1]: ", label_BB_T[-1] # raise "debug" for i in range(self.batch_size): labels = label_BB_T[i] img = X_batch_T[i] index = Z_Names_T[i].split(" ")[0] img = ut.plotTarget(img, labels, self.imSize, ifSquareOnly=True, ifGreen=True) # img = ut.plotTarget(img, ut.deNormalize(labels, self.imSize), self.imSize, ifSquareOnly = True, ifGreen = True) # cv2.imwrite(self.evaluationOutputDir + 'inputTestImg' + str(saveCount) + '.jpg', img) # labelImg = ut.plotTarget(img, ut.deNormalize(pred[i], self.imSize), self.imSize, ifSquareOnly = True) cv2.imshow("img", img) cv2.waitKey(0) # print 'save predTestLabelImg' + str(saveCount) + '.jpg to: ' + self.evaluationOutputDir cv2.imwrite( self.evaluationOutputDir + str(index) + 'Input' + '.jpg', img) # cv2.imwrite(self.evaluationOutputDir + str(index) + 'Pred' + '.jpg', labelImg) saveCount += 1
def loop(self): for i in range(len(self.imgs)): imgName = self.imgs[i] # print "imgName: ", imgName fileHeader = imgName.split('.')[0] print "self.ImgDir + imgName: ", self.ImgDir + imgName img = cv2.imread(self.ImgDir + imgName) print "self.labelDir + imgNameHeader + .txt: ", self.labelDir + fileHeader + ".txt" label = np.loadtxt(self.labelDir + fileHeader + ".txt") if self.debug: img = ut.plotTarget(img, label, ifSquareOnly=True, ifGreen=True) cv2.imshow("img", img) cv2.waitKey(0) if img != None: # print "img.shape: ", img.shape w, h, _ = img.shape xMean, yMean, edge = label xMean = xMean / w yMean = yMean / h edge = edge / w img = cv2.resize(img, (self.imSize, self.imSize)) xMean = xMean * self.imSize yMean = yMean * self.imSize edge = edge * self.imSize label = np.asarray([xMean, yMean, edge]) else: print "cannot find : ", imgName InputData = np.zeros([1, self.imSize, self.imSize, 3], dtype=np.float32) InputLabel = np.zeros([1, 3], dtype=np.float32) InputData[0] = img self.predcit(InputData, label, fileHeader)
img = Image.fromarray(img.astype(np.uint8)) cropImg = img.crop((newXMin, newYMin, newXMax, newYMax)) cropImg = np.array(cropImg) if debug: cv2.circle(cropImg, (int(xMean), int(yMean)), 2, (0, 0, 255), -1) label = np.asarray([xMean, yMean, edge]) # # NOTE: its img[y: y + h, x: x + w] and *not* img[x: x + w, y: y + h] if debug: img = plotTarget(img, [newXMin, newYMin, newXMax, newYMax]) img = ut.plotTarget(img, [xMean, yMean, newEdge], ifSquareOnly=True) # img = ut.plotTarget(img, label, ifSquareOnly = True, ifGreen = True) # img = plotTarget(cropImg, [xMean - xEdge/2.0, yMean - yEdge/2.0, xMean + xEdge/2.0, yMean + yEdge/2.0], ifGreen = True) img = ut.plotTarget(cropImg, label, ifSquareOnly=True, ifGreen=True) img = ut.plotTarget(img, label, ifSquareOnly=True, ifGreen=True) cv2.imshow("img", img) cv2.imshow("cropped", cropImg) cv2.waitKey(0) np.savetxt(labelOutputDir + fileHeader + '.txt', label) cv2.imwrite(imgOutputDir + fileHeader + '.jpg', cropImg)
import os import cv2 import numpy as np import random import utility as ut files = ["2430.rec"] ImgDir = 'data/preProcessedSemifrontal/img/' labelDir = 'data/preProcessedSemifrontal/label/' imgName = "2430.jpg" fileHeader = imgName.split('.')[0] print "self.ImgDir + imgName: ", ImgDir + imgName img = cv2.imread(ImgDir + imgName) print "self.labelDir + imgNameHeader + .txt: ", labelDir + fileHeader + ".txt" label = np.loadtxt(labelDir + fileHeader + ".txt") img = ut.plotTarget(img, label, ifSquareOnly=True, ifGreen=True) cv2.imshow("img", img) cv2.waitKey(0)
print "pts: ", pts print "w, h: ", w, h x1, y1, x2, y2 = [int(i) for i in pts] x1, x2 = x1 / w, x2 / w y1, y2 = y1 / h, y2 / h w, h, _ = img.shape x1, x2 = x1 * w, x2 * w y1, y2 = y1 * h, y2 * h x_mean = (x1 + x2) / float(2) y_mean = (y1 + y2) / float(2) edge = max(y2 - y1, x2 - x1) * 1.5 new_img = ut.plotTarget(img, (x_mean, y_mean, edge), ifSquareOnly=True) print "int(y_mean - edge/2.0), int(y_mean + edge/2.0), int(x_mean - edge/2.0), int(x_mean + edge/2.0)" print int(y_mean - edge / 2.0), int(y_mean + edge / 2.0), int( x_mean - edge / 2.0), int(x_mean + edge / 2.0) y_min = int(y_mean - edge / 2.0) if int(y_mean - edge / 2.0) >= 0 else 0 y_max = int(y_mean + edge / 2.0) if int(y_mean + edge / 2.0) <= w else w x_min = int(x_mean - edge / 2.0) if int(x_mean - edge / 2.0) >= 0 else 0 x_max = int(x_mean + edge / 2.0) if int(x_mean + edge / 2.0) <= h else h print "y_min, y_max, x_min, x_max: ", y_min, y_max, x_min, x_max
def train_on_batch(self, nb_epoch, MaxIters): if os.path.exists(self.modelDir) == False: os.mkdir(self.modelDir) testCount = 0 trainCount = 0 for e in range(nb_epoch): shuffle(self.DataTr) iterTest = 0 for iter in range(self.MaxIters): train_start = iter * self.batch_size train_end = (iter + 1) * self.batch_size X_batch, label_BB, Z_Names = self.DataGenBB( self.DataTr, train_start=train_start, train_end=train_end) # for i in range(self.batch_size): # labels = label_BB[i] # img = X_batch[i] # labelImg = ut.plotTarget(img, ut.deNormalize(labels, self.imSize), self.imSize, ifSquareOnly = True) # cv2.imwrite(self.outputDir + 'inputTrainlabelImg' + str(trainCount) + '.jpg', labelImg) loss, tras, pred = self.model.train_on_batch(X_batch, label_BB) trainCount += 1 if trainCount >= 20: trainCount = 0 # if loss in [None, float("inf"), float("-inf"), Decimal('Infinity')] or "nan" in str(loss): # print "-----model reset weights-----" # self.reset_weights(self.model) # self.reset_model(self.model) # self.model.reset_states() # print "*****" print "loss, train: ", loss if iter % 1000 == 0: logInfo = "" if os.path.exists(self.outputDir + 'log.txt') and self.init == False: f = open(self.outputDir + 'log.txt', 'a') else: f = open(self.outputDir + 'log.txt', 'w') self.init = False iterationInfo = ("^^^^^" + "\n" + 'iteration: ' + str(iter)) logInfo += iterationInfo print iterationInfo # labelImg = ut.plotTarget(X_batch[0], pred[0]) index = random.randint(0, self.batch_size - 1) labelImg = ut.plotTarget(X_batch[index], ut.deNormalize( pred[index], self.imSize), self.imSize, ifSquareOnly=True) print 'save predTrainLabelImg' + str( testCount) + '.jpg to: ' + self.outputDir # cv2.imwrite(self.outputDir + 'predTrainLabelImg' + str(testCount) + '.jpg', labelImg) test_start = iterTest * self.batch_size test_end = (iterTest + 1) * self.batch_size X_batch_T, label_BB_T, Z_Names_T = self.DataGenBB( self.DataTe, train_start=test_start, train_end=test_end) loss, tras, pred = self.model.evaluate( X_batch_T, label_BB_T) testCount += 1 if testCount >= 20: testCount = 0 index = random.randint(0, self.batch_size - 1) labelImg = ut.plotTarget(X_batch_T[index], ut.deNormalize( pred[index], self.imSize), self.imSize, ifSquareOnly=True) print 'save predTestLabelImg' + str( testCount) + '.jpg to: ' + self.outputDir # cv2.imwrite(self.outputDir + 'predTestLabelImg' + str(testCount) + '.jpg', labelImg) testInfo = ("====" + "\n" + "loss, TEST: " + str(loss)) logInfo += testInfo print testInfo iterTest += self.batch_size iterTest %= self.MaxTestIters f.write(logInfo) f.close()