Esempio n. 1
0
    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)
Esempio n. 2
0
    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
Esempio n. 3
0
    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)
Esempio n. 4
0
        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
Esempio n. 7
0
    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()