Exemple #1
0
    def saveCsvBySrc(self, srcBase=None):
        if not srcBase:
            srcBase = self.rawPath

        files = os.listdir(srcBase)
        images = []
        imgPaths = []
        dao = ImageDao()

        for index, file in enumerate(files):
            fileName = os.path.splitext(file)
            src = srcBase + file
            type = int(fileName) % 10
            image = ImageInfo(str(index).zfill(5), file, src, type)
            images.append(image)
            imgPaths.append(src)

        dao.insertImg(images)

        images = []
        shutil.rmtree('DataSetRaw')
        os.mkdir('DataSetRaw')
        for index, newPath in enumerate(imgPaths):
            print "add " + str(index) + " picture " + newPath
            img = self.loadImage(newPath)
            images.append(img)

            if len(images) == self.picturePerFile or index == (len(imgPaths) -
                                                               1):
                dataFileName = 'DataSetRaw/data' + str(
                    index / self.picturePerFile) + '.csv'
                np.savetxt(dataFileName, images, delimiter=',')
                images = []
Exemple #2
0
    def assessWithoutDist(self):
        print "reading data..."
        pictures = readCsv(self.dataBaseUrl + "data", self.totalNum)

        dao = ImageDao()
        imgs = dao.getAll()
        typeDict = {}
        for img in imgs:
            typeDict[img.imgId] = img.imgType

        print "training..."
        trainSet = pictures[:self.trainNum]
        self.knn.train(trainSet)

        testSet = pictures[self.trainNum:self.totalNum]

        accuracyList = []
        heads = ['distance', 'accuracy', 'averageK']

        print "predicting..."
        for d in range(2000, 4000, 20):
            accuracy, avgK = self.knn.predictForManyWithDist(
                testSet, self.trainNum, d, typeDict)

            item = [d, accuracy, avgK]
            accuracyList.append(item)

            print "distance:%d     accuracy:%f%%       averageK:%f" % (
                d, accuracy * 100, avgK)

        saveCsv(self.resultBasePath + 'assessDist_Radius10_5000-1000.csv',
                heads, accuracyList)
Exemple #3
0
    def assess(self, k=None):
        if not k:
            k = self.k
        print "reading data..."
        pictures = readCsv(self.dataBaseUrl + "data", self.totalNum)

        dao = ImageDao()
        imgs = dao.getAll()
        typeDict = {}
        for img in imgs:
            typeDict[img.imgId] = img.imgType

        print "training..."
        trainSet = pictures[:self.trainNum]
        self.knn.train(trainSet)

        testSet = pictures[self.trainNum:self.totalNum]

        zerNp = np.zeros([k, self.testNum])
        testLabel = np.arange(self.trainNum, self.totalNum)
        for i in range(len(testLabel)):
            testLabel[i] = typeDict[str(testLabel[i]).zfill(5)]
        testLabel = (zerNp + testLabel).astype('int').T

        print "predicting..."
        accuracy, avgCriDist = self.knn.predictForManyWithK(
            testSet, testLabel, k, typeDict)

        print "accuracy:%f%%       averageCriticalDist:%f" % (accuracy * 100,
                                                              avgCriDist)
Exemple #4
0
    def saveCsvWithGaussianBlur(self, srcBase=None, tarBase=None, radius=None):
        if not srcBase:
            srcBase = self.rawPath
        if not tarBase:
            tarBase = self.newPath
        if not radius:
            radius = self.radius

        files = os.listdir(srcBase)
        images = []
        gauImgPaths = []
        dao = ImageDao()

        shutil.rmtree(tarBase[:-1])
        os.mkdir(tarBase[:-1])
        for index, file in enumerate(files):
            fileName = os.path.splitext(file)[0]
            src = srcBase + file

            print "blur", index, "picture", src
            image = Image.open(src)
            image = image.filter(MyGaussianBlur(radius=radius))
            tar = tarBase + file
            image.save(tar)

            type = int(fileName) % 10
            image = ImageInfo(str(index).zfill(5), file, src, type)
            images.append(image)
            gauImgPaths.append(tar)

        dao.insertImg(images)

        images = []
        shutil.rmtree('DataSet')
        os.mkdir('DataSet')
        for index, newPath in enumerate(gauImgPaths):
            print "add", str(index), "picture", newPath
            img = self.loadImage(newPath)
            images.append(img)

            if len(images) == self.picturePerFile or index == (
                    len(gauImgPaths) - 1):
                dataFileName = 'DataSet/data' + str(
                    index / self.picturePerFile) + '.csv'
                np.savetxt(dataFileName, images, delimiter=',')
                images = []
Exemple #5
0
    def assessWithoutRadius(self, k=None):
        if not k:
            k = self.k
        accuracyList = []
        heads = ['radius', 'accuracy', 'averageCriticalDist']

        for radius in range(5, 15):
            print radius, ':'
            print "blurring ..."
            data = MyData()
            data.saveCsvWithGaussianBlur(radius=radius)

            dao = ImageDao()
            imgs = dao.getAll()
            typeDict = {}
            for img in imgs:
                typeDict[img.imgId] = img.imgType

            zerNp = np.zeros([k, self.testNum])
            testLabel = np.arange(self.trainNum, self.totalNum)
            for i in range(len(testLabel)):
                testLabel[i] = typeDict[str(testLabel[i]).zfill(5)]
            testLabel = (zerNp + testLabel).astype('int').T

            pictures = readCsv(self.dataBaseUrl + "data", self.totalNum)

            print "training..."
            trainSet = pictures[:self.trainNum]
            self.knn.train(trainSet)

            testSet = pictures[self.trainNum:self.totalNum]

            print "predicting..."
            accuracy, avgCriDist = self.knn.predictForManyWithK(
                testSet, testLabel, k, typeDict)

            item = [radius, accuracy, avgCriDist]
            accuracyList.append(item)

            print "k:%d     radius:%f    accuracy:%f%%   averageCriticalDist:%f" % (
                k, radius, accuracy * 100, avgCriDist)

        saveCsv(self.resultBasePath + 'assessRadiusK' + str(k) + '.csv', heads,
                accuracyList)
Exemple #6
0
    def assessFeaWithBlurWithoutK(self):
        print "reading neaFeaData..."
        netFea = readCsv(self.dataBaseUrl + "netFea", self.totalNum) * 256 * 40
        print "reading data..."
        pictures = readCsv(self.dataBaseUrl + "data", self.totalNum)
        pictures = np.append(pictures, netFea, axis=1)
        print pictures.shape
        dao = ImageDao()
        imgs = dao.getAll()
        typeDict = {}
        for img in imgs:
            typeDict[img.imgId] = img.imgType

        print "training..."
        trainSet = pictures[:self.trainNum]
        self.knn.train(trainSet)

        testSet = pictures[self.trainNum:self.totalNum]

        accuracyList = []
        heads = ['k', 'accuracy', 'averageCriticalDist']

        print "predicting..."
        for k in range(1, 101):
            zerNp = np.zeros([k, self.testNum])
            testLabel = np.arange(self.trainNum, self.totalNum)
            for i in range(len(testLabel)):
                testLabel[i] = typeDict[str(testLabel[i]).zfill(5)]
            testLabel = (zerNp + testLabel).astype('int').T

            accuracy, avgCriDist = self.knn.predictForManyWithK(
                testSet, testLabel, k, typeDict)

            item = [k, accuracy, avgCriDist]
            accuracyList.append(item)

            print "k:%d     accuracy:%f%%       averageCriticalDist:%f" % (
                k, accuracy * 100, avgCriDist)

        saveCsv(self.resultBasePath + 'assessFeaWithBlurWithoutK.csv', heads,
                accuracyList)
Exemple #7
0
def readCsv(baseFileName, dataNum, picturePerFile=1000):
    if dataNum == 0:
        return None
    if dataNum == -1:
        dao = ImageDao()
        dataNum = dao.getImgCount()

    print 'image count', dataNum

    fileName = baseFileName + str(0) + ".csv"
    print "reading" + fileName
    imgs = np.loadtxt(open(fileName, "rb"), delimiter=",", skiprows=0)

    fileNum = (dataNum - 1) / picturePerFile + 1

    for item in range(1, fileNum):
        fileName = baseFileName + str(item) + ".csv"
        print "reading" + fileName
        data = np.loadtxt(open(fileName, "rb"), delimiter=",", skiprows=0)
        imgs = np.append(imgs, data, axis=0)

    imgs = imgs[:dataNum]

    return imgs
Exemple #8
0
k = 0

optimalDist = 2200
optimalLeastK = 12
dataNum = -1
radius = 10

print "reading data..."
data = MyData()
pictures = readCsv(dataBaseUrl + "data", dataNum)

print "training..."
knn = KNearestNeighbor()
knn.train(pictures)

dao = ImageDao()
imgs = dao.getAll()
typeDict = {}
for img in imgs:
    typeDict[img.imgId] = img.imgUrl

# server.config['UPLOAD_FOLDER'] = os.getcwd()


@server.route('/', methods=['GET', 'POST'])
def home():
    print "start..."
    pictureURL = url_for('static', filename=imgBaseURL + "empty.jpg")
    return render_template('main.html',
                           picture=pictureURL,
                           select=select,