예제 #1
0
	def image_train(self, indir, outdir):
		''' image_train(self)

		convert image to patch for all images in imdir
		'''
		# loop for every images in directory
                mytime = timeLog('../timelogs/image_train')
                make_dir(outdir)
		for k, data in enumerate(self.data):
                        try:
                                print 'Image-Train:', data[0], k,'/',len(self.data)
                                imgname = data[0]
                                coor = data[1]
                                img = image_load(imgname, indir)
                                mytime.start(imgname)
                                patch_stack, label_stack = self.multiscale_patch_ext(img, coor)
                                patch_stack, label_stack = stack2array(patch_stack, label_stack)
                                data_save(patch_stack, label_stack,
                                        os.path.splitext(imgname)[0], outdir)
                        except:
                                continue
                        finally:
                                mytime.end()
		mail(self.mail_rec, '<Coding Message!!!>, image_train_finished')
                mytime.final('image train finished')
		return
예제 #2
0
        def geneHotmap(self, indir, outdir):
                '''geneHotmap(self, indir, outdir)

                convert stacks from image_test to hotmaps
                '''
                mytime = timeLog('../timelogs/testHotmap')
                make_dir(outdir)
                for k, data in enumerate(self.data):
                        try:
                                print 'Generate hotmaps:', data[0], k, '/', len(self.data)
                                imgname = data[0]
                                mytime.start(imgname)
                                imgname = os.path.splitext(imgname)[0]
                                s = pickle_load(imgname, indir)
                                pnt = stack2image(s[0])
                                blk = stack2image(s[1])
                                image_save(pnt, 'point'+imgname+'.png', outdir)
                                image_save(blk, 'block'+imgname+'.png', outdir)
                        except:
                                continue
                        finally:
                                mytime.end()
                mail(self.mail_rec, '<Coding Message!!!>, hotmap generation finished')
                mytime.final('hotmap generation finished')
                return
예제 #3
0
    def seed2image(self, roidir, imdir, rawdir, outdir):
        '''seed2image(self, indir, outdir)

                convert roi detection to image 
                '''

        mytime = timeLog('../timelogs/regionOfInterest')
        make_dir(outdir)
        for k, data in enumerate(self.data):
            print 'Generate region of interests:', data[0], k, '/', len(
                self.data)
            imgname = data[0]
            mytime.start(imgname)
            basename = os.path.splitext(imgname)[0]
            blkname = 'block' + basename + '.png'  # use block plot as hotmap
            roi = pickle_load(os.path.splitext(imgname)[0], roidir)
            raw = image_load(imgname, rawdir)
            img = image_load(blkname, imdir)
            bb = image2bb(img)
            bb = bbenlarge(bb, img.shape)
            img = roi2image(roi, bb, img.shape)
            image_save(img, imgname, outdir)
            mytime.end()
        mail(self.mail_rec, '<Coding Message!!!>, roi generation finished')
        mytime.final('roi generation finished')
        return
예제 #4
0
        def geneROI(self, imdir, indir, outdir, thre = 128):
                ''' geneROI(self, indir, outdir)

                crop the region of interest from the hotmap
                '''
                mytime = timeLog('../timelogs/regionOfInterest')
                make_dir(outdir)
                for k, data in enumerate(self.data):
                        print 'Generate region of interests:', data[0], k, '/', len(self.data)
                        imgname = data[0]
                        mytime.start(imgname)

                        basename = os.path.splitext(imgname)[0]
                        blkname = 'block' + basename + '.png' 
                        raw = image_load(imgname, imdir)
                        img = image_load(blkname, indir)
                        bb = image2bb(img, thre)
                        bb = bbenlarge(bb, img.shape)
                        roi_stack = image2roi(raw, bb)
                        pickle_save(roi_stack, basename, outdir)

                        mytime.end()
                mail(self.mail_rec, '<Coding Message!!!>, roi generation finished')
                mytime.final('roi generation finished')
                return
예제 #5
0
        def seed2image(self, roidir, imdir, rawdir, outdir):
                '''seed2image(self, indir, outdir)

                convert roi detection to image 
                '''

                mytime = timeLog('../timelogs/regionOfInterest')
                make_dir(outdir)
                for k, data in enumerate(self.data):
                        print 'Generate region of interests:', data[0], k, '/', len(self.data)
                        imgname = data[0]
                        mytime.start(imgname)
                        basename = os.path.splitext(imgname)[0]
                        blkname = 'block' + basename + '.png' # use block plot as hotmap
                        roi = pickle_load(os.path.splitext(imgname)[0], roidir)
                        raw = image_load(imgname, rawdir)
                        img = image_load(blkname, imdir)
                        bb = image2bb(img)
                        bb = bbenlarge(bb, img.shape)
                        img = roi2image(roi, bb, img.shape)
                        image_save(img, imgname, outdir)
                        mytime.end()
                mail(self.mail_rec, '<Coding Message!!!>, roi generation finished')
                mytime.final('roi generation finished')
                return
예제 #6
0
    def geneROI(self, imdir, indir, outdir, thre=128):
        ''' geneROI(self, indir, outdir)

                crop the region of interest from the hotmap
                '''
        mytime = timeLog('../timelogs/regionOfInterest')
        make_dir(outdir)
        for k, data in enumerate(self.data):
            print 'Generate region of interests:', data[0], k, '/', len(
                self.data)
            imgname = data[0]
            mytime.start(imgname)

            basename = os.path.splitext(imgname)[0]
            blkname = 'block' + basename + '.png'
            raw = image_load(imgname, imdir)
            img = image_load(blkname, indir)
            bb = image2bb(img, thre)
            bb = bbenlarge(bb, img.shape)
            roi_stack = image2roi(raw, bb)
            pickle_save(roi_stack, basename, outdir)

            mytime.end()
        mail(self.mail_rec, '<Coding Message!!!>, roi generation finished')
        mytime.final('roi generation finished')
        return
예제 #7
0
    def clf_test(self):
        ''' clf_test(self, clfname)

		test the classifier the features generated
		clfname:_string_ contains filename of the classifier 
		Return (pred, label) 1D_numpy_arrays for prediction and labels '''

        mytime = timeLog('../timelogs/clf_test')
        mytime.start()

        print 'Testing Classifier ...'
        plotdir = '../plot/' + time.ctime()
        make_dir(plotdir)
        # write classifier name to txt file
        open(os.path.join(plotdir, self.mode), 'a').close()
        if not 'decision_function' in dir(self.classifier):
            self.classifier.decision_function = self.classifier.predict

        self.prediction = self.classifier.decision_function(self.feature_test)
        #plot.pplot(self.prediction, self.label_test, plotdir)

        #if self.mode == 'adaboost':
        #	test_score = []
        #        train_score = []
        #	for pred in self.classifier.staged_decision_function(self.feature_test):
        #		test_score.append(self.classifier.loss_(self.label_test, pred))
        #        for pred in self.classifier.staged_decision_function(self.feature):
        #                train_score.append(self.classifier.loss_(self.label, pred))
        #	plot.eplot(test_score, train_score, plotdir)
        # report
        mail(MAIL_REC, '<Coding Message!!!>, clf_test_finished')
        mytime.end()
        mytime.final()
        return
예제 #8
0
    def geneHotmap(self, indir, outdir):
        '''geneHotmap(self, indir, outdir)

                convert stacks from image_test to hotmaps
                '''
        mytime = timeLog('../timelogs/testHotmap')
        make_dir(outdir)
        for k, data in enumerate(self.data):
            try:
                print 'Generate hotmaps:', data[0], k, '/', len(self.data)
                imgname = data[0]
                mytime.start(imgname)
                imgname = os.path.splitext(imgname)[0]
                s = pickle_load(imgname, indir)
                pnt = stack2image(s[0])
                blk = stack2image(s[1])
                image_save(pnt, 'point' + imgname + '.png', outdir)
                image_save(blk, 'block' + imgname + '.png', outdir)
            except:
                continue
            finally:
                mytime.end()
        mail(self.mail_rec, '<Coding Message!!!>, hotmap generation finished')
        mytime.final('hotmap generation finished')
        return
예제 #9
0
    def image_train(self, indir, outdir):
        ''' image_train(self)

		convert image to patch for all images in imdir
		'''
        # loop for every images in directory
        mytime = timeLog('../timelogs/image_train')
        make_dir(outdir)
        for k, data in enumerate(self.data):
            try:
                print 'Image-Train:', data[0], k, '/', len(self.data)
                imgname = data[0]
                coor = data[1]
                img = image_load(imgname, indir)
                mytime.start(imgname)
                patch_stack, label_stack = self.multiscale_patch_ext(img, coor)
                patch_stack, label_stack = stack2array(patch_stack,
                                                       label_stack)
                data_save(patch_stack, label_stack,
                          os.path.splitext(imgname)[0], outdir)
            except:
                continue
            finally:
                mytime.end()
        mail(self.mail_rec, '<Coding Message!!!>, image_train_finished')
        mytime.final('image train finished')
        return
예제 #10
0
	def clf_test(self):
		''' clf_test(self, clfname)

		test the classifier the features generated
		clfname:_string_ contains filename of the classifier 
		Return (pred, label) 1D_numpy_arrays for prediction and labels '''

                mytime = timeLog('../timelogs/clf_test')
                mytime.start()

		print 'Testing Classifier ...'
		plotdir = '../plot/'+time.ctime()
		make_dir(plotdir)
		# write classifier name to txt file
		open(os.path.join(plotdir, self.mode), 'a').close()
                if not 'decision_function' in dir(self.classifier):
                        self.classifier.decision_function = self.classifier.predict

		self.prediction = self.classifier.decision_function(self.feature_test)
                #plot.pplot(self.prediction, self.label_test, plotdir)

                #if self.mode == 'adaboost':
                #	test_score = []
                #        train_score = []
                #	for pred in self.classifier.staged_decision_function(self.feature_test):
                #		test_score.append(self.classifier.loss_(self.label_test, pred))
                #        for pred in self.classifier.staged_decision_function(self.feature):
                #                train_score.append(self.classifier.loss_(self.label, pred))
                #	plot.eplot(test_score, train_score, plotdir)
		# report 
		mail(MAIL_REC, '<Coding Message!!!>, clf_test_finished')
                mytime.end()
                mytime.final()
		return 
예제 #11
0
        def data_load(self, datadir):
                mytime = timeLog('../timelogs/data_load')
                mytime.start()
		print 'Loading data ....',
		P, L = data_load(datadir)
		P = numpy.uint8(P)
		L = numpy.uint8(L)
                P_train, P_test, L_train, L_test = train_test_split(P, L, train_size = 0.8, test_size = 0.2, random_state = 22)
                self.feature = P_train
                self.label = L_train
                self.feature_test = P_test
                self.label_test = L_test
                mytime.end()
                mytime.final()
예제 #12
0
 def data_load(self, datadir):
     mytime = timeLog('../timelogs/data_load')
     mytime.start()
     print 'Loading data ....',
     P, L = data_load(datadir)
     P = numpy.uint8(P)
     L = numpy.uint8(L)
     P_train, P_test, L_train, L_test = train_test_split(P,
                                                         L,
                                                         train_size=0.8,
                                                         test_size=0.2,
                                                         random_state=22)
     self.feature = P_train
     self.label = L_train
     self.feature_test = P_test
     self.label_test = L_test
     mytime.end()
     mytime.final()
예제 #13
0
 def imageprocess(self, indir, outdir, clf):
     mytime = timeLog('../timelogs/image_test')
     make_dir(outdir)
     # loop for every images in directory
     if not 'decision_function' in dir(clf):
         clf.decision_function = clf.predict
         print 'decision function created!'
     for k, data in enumerate(self.data):
         print 'Image-Process:', data[0], k, '/', len(self.data)
         imgname = data[0]
         image = data[1]
         mytime.start(imgname)
         img = image_load(imgname, indir)
         res_stack = self.multiscale_test2(img, image)
         pickle_save(res_stack, os.path.splitext(imgname)[0], outdir)
         mytime.end()
     mail(self.mail_rec, '<Coding Message!!!>, image_test_finished!')
     mytime.final('image test finished')
     return
예제 #14
0
    def clf_train(self):
        '''  clf_train(self, clfname, mode = 'adaboost')

		train the classifier with feature generated
		clfname: _string_ contains filename of the classifier to save
		mode: {'adaboost', 'SVM', 'vjcascade', 'gridSearch'} _string_, 
			classifier type, where gridSearch is searched over 
			different types of SVM classifiers. '''

        mytime = timeLog('../timelogs/clf_train')
        mytime.start()

        print 'Training Classifier on ',
        print len(self.label), 'Samples'
        self.classifier = self.classifier.fit(self.feature, self.label)
        mail(MAIL_REC, '<Coding Message!!!>, clf_train_finished')
        mytime.end()
        mytime.final()
        return
예제 #15
0
	def imageprocess(self, indir, outdir, clf):
                mytime = timeLog('../timelogs/image_test')
                make_dir(outdir)
                # loop for every images in directory
                if not 'decision_function' in dir(clf):
                        clf.decision_function = clf.predict
                        print 'decision function created!'
                for k, data in enumerate(self.data):
                        print 'Image-Process:', data[0], k,'/',len(self.data)
                        imgname = data[0]
                        image = data[1]
                        mytime.start(imgname)
                        img = image_load(imgname, indir)
                        res_stack = self.multiscale_test2(img, image)
                        pickle_save(res_stack, os.path.splitext(imgname)[0], outdir)
                        mytime.end()
                mail(self.mail_rec, '<Coding Message!!!>, image_test_finished!')
                mytime.final('image test finished')
		return
예제 #16
0
	def clf_train(self):

		'''  clf_train(self, clfname, mode = 'adaboost')

		train the classifier with feature generated
		clfname: _string_ contains filename of the classifier to save
		mode: {'adaboost', 'SVM', 'vjcascade', 'gridSearch'} _string_, 
			classifier type, where gridSearch is searched over 
			different types of SVM classifiers. '''

                mytime = timeLog('../timelogs/clf_train')
                mytime.start()

		print 'Training Classifier on ',
                print len(self.label), 'Samples'
		self.classifier = self.classifier.fit(self.feature, self.label)
		mail(MAIL_REC, '<Coding Message!!!>, clf_train_finished')
                mytime.end()
                mytime.final()
                return
예제 #17
0
    def roi_test2(self, indir, outdir, clf):
        ''' roi_test2(self, indir, outdir, clf)

                apply detection on region of interest
		'''
        mytime = timeLog('../timelogs/image_test')
        make_dir(outdir)
        # loop for every images in directory
        if not 'decision_function' in dir(clf):
            clf.decision_function = clf.predict
            print 'decision function created!'

        for k, data in enumerate(self.data):
            print 'Image-Test:', data[0], k, '/', len(self.data)
            imgname = data[0]
            mytime.start(imgname)
            roiname = os.path.splitext(imgname)[0]
            roistack = pickle_load(roiname, indir)

            predpnt_stack = []
            predblk_stack = []
            for img in roistack:
                patch = self.image2feat(img,
                                        self.psize,
                                        self.ssize,
                                        self.nob,
                                        self.codebook,
                                        target=self.featureMode,
                                        edgeMode=self.edgeMode)
                pred = self.feat2pred(img, patch, clf)
                predpnt = self.label2image(img, pred, mode='point')
                predblk = self.label2image(img, pred, mode='block')
                predpnt_stack.append(predpnt)
                predblk_stack.append(predblk)

            pickle_save((predpnt_stack, predblk_stack),
                        os.path.splitext(imgname)[0], outdir)
            mytime.end()
        mail(self.mail_rec, '<Coding Message!!!>, image_test_finished!')
        mytime.final('image test finished')
        return
예제 #18
0
        def prepareImg(self, dataStack, indir, outdir):
                ''' image_pretest(self)

                test and show the ground truth label images from the training and testing data
                before we start the training process.	
                '''
                mytime = timeLog('../timelogs/prepare_img')
                make_dir(outdir)
                # loop for every images in directory
                for k, data in enumerate(dataStack):
                        imgname, coor = data
                        print imgname, str(k), '/', len(dataStack)
                        mytime.start(imgname)
                        img = image_load(imgname, indir)
                        img, coor = imsize_reduce((1400, 1400), img, coor)
                        image_save(img, imgname, outdir)
                        dataStack[k] = (imgname, coor)
                        mytime.end()
                mail(MAIL_REC, '<Coding Message!!!>, image_pretest_finished')
                mytime.final('prepare images finished.')
                return dataStack
예제 #19
0
        def roi_test2(self, indir, outdir, clf):
		''' roi_test2(self, indir, outdir, clf)

                apply detection on region of interest
		'''
                mytime = timeLog('../timelogs/image_test')
                make_dir(outdir)
                # loop for every images in directory
                if not 'decision_function' in dir(clf):
                        clf.decision_function = clf.predict
                        print 'decision function created!'

                for k, data in enumerate(self.data):
                        print 'Image-Test:', data[0], k,'/',len(self.data)
                        imgname = data[0]
                        mytime.start(imgname)
                        roiname = os.path.splitext(imgname)[0]
                        roistack = pickle_load(roiname, indir)

                        predpnt_stack = []
                        predblk_stack = []
                        for img in roistack:
                                patch = self.image2feat(img,
                                        self.psize, self.ssize,
                                        self.nob, self.codebook,
                                        target = self.featureMode,
                                        edgeMode = self.edgeMode)
                                pred = self.feat2pred(img, patch, clf)
                                predpnt = self.label2image(img, pred, mode = 'point')
                                predblk = self.label2image(img, pred, mode = 'block')
                                predpnt_stack.append(predpnt)
                                predblk_stack.append(predblk)

                        pickle_save((predpnt_stack, predblk_stack), os.path.splitext(imgname)[0], outdir)
                        mytime.end()
                mail(self.mail_rec, '<Coding Message!!!>, image_test_finished!')
                mytime.final('image test finished')
		return
예제 #20
0
    def geneTxt(self, indir, outdir, thre=128):
        '''geneTxt(self, indir, outdir)

                generate csv file from the hotmaps to be in ICDAR standard format
                '''
        mytime = timeLog('../timelogs/testTxtFile')
        make_dir(outdir)
        for k, data in enumerate(self.data):
            print 'Generate txt files:', data[0], k, '/', len(self.data)
            imgname = data[0]
            mytime.start(imgname)

            basename = os.path.splitext(imgname)[0]
            blkname = 'block' + basename + '.png'  # use block plot as hotmap
            txtname = 'res_img_' + basename + '.txt'

            img = image_load(blkname, indir)
            bb = image2bb(img, thre)
            s = bb2string(bb)
            txt_save(s, txtname, outdir)
            mytime.end()
        mail(self.mail_rec, '<Coding Message!!!>, txt generation finished')
        mytime.final('txt file generation finished')
        return
예제 #21
0
        def geneROI2(self, imdir, indir, outdir, thre = 128):
                ''' geneROI2(self, indir, outdir)

                crop the region of interest from the stack
                '''
                
                mytime = timeLog('../timelogs/testHotmap')
                make_dir(outdir)
                for k, data in enumerate(self.data):
                        print 'Generate roi:', data[0], k, '/', len(self.data)
                        imgname = data[0]
                        mytime.start(imgname)
                        imgname = os.path.splitext(imgname)[0]
                        s = pickle_load(imgname, indir)[1]
                        roi_stack = []
                        for layer in s:
                                bb = image2bb(img, thre)
                                bb = bbenlarge(bb, img.shape)
                                roi_stack.append(image2roi(raw, bb))
                        pickle_save(roi_stack, basename, outdir)
                        mytime.end()
                mail(self.mail_rec, '<Coding Message!!!>, hotmap generation finished')
                mytime.final('hotmap generation finished')
                return
예제 #22
0
    def geneROI2(self, imdir, indir, outdir, thre=128):
        ''' geneROI2(self, indir, outdir)

                crop the region of interest from the stack
                '''

        mytime = timeLog('../timelogs/testHotmap')
        make_dir(outdir)
        for k, data in enumerate(self.data):
            print 'Generate roi:', data[0], k, '/', len(self.data)
            imgname = data[0]
            mytime.start(imgname)
            imgname = os.path.splitext(imgname)[0]
            s = pickle_load(imgname, indir)[1]
            roi_stack = []
            for layer in s:
                bb = image2bb(img, thre)
                bb = bbenlarge(bb, img.shape)
                roi_stack.append(image2roi(raw, bb))
            pickle_save(roi_stack, basename, outdir)
            mytime.end()
        mail(self.mail_rec, '<Coding Message!!!>, hotmap generation finished')
        mytime.final('hotmap generation finished')
        return
예제 #23
0
        def geneTxt(self, indir, outdir, thre = 128):
                '''geneTxt(self, indir, outdir)

                generate csv file from the hotmaps to be in ICDAR standard format
                '''
                mytime = timeLog('../timelogs/testTxtFile')
                make_dir(outdir)
                for k, data in enumerate(self.data):
                        print 'Generate txt files:', data[0], k, '/', len(self.data)
                        imgname = data[0]
                        mytime.start(imgname)

                        basename = os.path.splitext(imgname)[0]
                        blkname = 'block'+basename+'.png' # use block plot as hotmap
                        txtname = 'res_img_'+basename+'.txt'

                        img = image_load(blkname, indir)
                        bb = image2bb(img, thre)
                        s = bb2string(bb)
                        txt_save(s, txtname, outdir)
                        mytime.end()
                mail(self.mail_rec, '<Coding Message!!!>, txt generation finished')
                mytime.final('txt file generation finished')
                return
예제 #24
0
        def roi_test(self, indir, rawdir, outdir, clf):
		''' roi_test(self, indir, outdir, clf)

                apply detection on region of interest
		'''
                mytime = timeLog('../timelogs/image_test')
                make_dir(outdir)
                # loop for every images in directory
                if not 'decision_function' in dir(clf):
                        clf.decision_function = clf.predict
                        print 'decision function created!'

                for k, data in enumerate(self.data):
                        try:
                                print 'ROI test:', data[0], k, '/', len(self.data)
                                imgname = data[0]
                                img = data[2] 
                                mytime.start(imgname)
                                raw = image_load(imgname, rawdir)
                                stackname = os.path.splitext(imgname)[0]
                                s = pickle_load(stackname, indir)[1]
                                layer_stack = []
                                for layer in s:
                                        bb = image2bb(layer)
                                        #bb = bbenlarge(bb, layer.shape)
                                        raw = img_resize(raw, layer.shape)
                                        rois = image2roi(raw, bb)
                                        predpnt_stack = []
                                        #predblk_stack = []
                                        for rimg00 in rois:
                                                rimg0 = imreduce(64, rimg00)
                                                predpnt = numpy.zeros_like(rimg0)
                                                for ang in [-6, -4, -2, 0, 2, 4, 6]:
                                                        rimg = rotate(rimg0, ang)
                                                        patch = self.image2feat(rimg,
                                                                self.psize, self.ssize,
                                                                self.nob, self.codebook,
                                                                target = self.featureMode,
                                                                edgeMode = self.edgeMode)
                                                        pred = self.feat2pred(rimg, patch, clf)
                                                        predpnt0 = self.label2image(rimg, pred, mode = 'point')
                                                        predpnt = predpnt + rotate(predpnt0, -ang)
                                                for asp in [0.6, 0.8, 1, 1.2, 1.4]:
                                                        rimg = img_resize(rimg0, [int(rimg0.shape[0]*asp), rimg0.shape[1]])
                                                        patch = self.image2feat(rimg,
                                                                self.psize, self.ssize,
                                                                self.nob, self.codebook,
                                                                target = self.featureMode,
                                                                edgeMode = self.edgeMode)
                                                        pred = self.feat2pred(rimg, patch, clf)
                                                        predpnt0 = self.label2image(rimg, pred, mode = 'point')
                                                        predpnt = predpnt+img_resize(predpnt0, rimg0.shape)
                                                predcc = pnt2cc(rimg0, predpnt)
                                                predcc = img_resize(predcc, rimg00.shape)
                                                #predblk = self.label2image(img, pred, mode = 'block')
                                                predpnt_stack.append(predcc)
                                                #predblk_stack.append(predblk)
                                        layer_stack.append(roi2image(predpnt_stack, bb, layer.shape))
                                img = stack2image(layer_stack, img)
                                pickle_save(layer_stack, stackname, outdir)
                                image_save(img, imgname.split('.')[0]+'.png', outdir)
                                mytime.end()
                        except:
                                mytime.end()
                                continue
                mail(self.mail_rec, '<Coding Message!!!>, hotmap generation finished')
                mytime.final('hotmap generation finished')
                return
예제 #25
0
    def roi_test(self, indir, rawdir, outdir, clf):
        ''' roi_test(self, indir, outdir, clf)

                apply detection on region of interest
		'''
        mytime = timeLog('../timelogs/image_test')
        make_dir(outdir)
        # loop for every images in directory
        if not 'decision_function' in dir(clf):
            clf.decision_function = clf.predict
            print 'decision function created!'

        for k, data in enumerate(self.data):
            try:
                print 'ROI test:', data[0], k, '/', len(self.data)
                imgname = data[0]
                img = data[2]
                mytime.start(imgname)
                raw = image_load(imgname, rawdir)
                stackname = os.path.splitext(imgname)[0]
                s = pickle_load(stackname, indir)[1]
                layer_stack = []
                for layer in s:
                    bb = image2bb(layer)
                    #bb = bbenlarge(bb, layer.shape)
                    raw = img_resize(raw, layer.shape)
                    rois = image2roi(raw, bb)
                    predpnt_stack = []
                    #predblk_stack = []
                    for rimg00 in rois:
                        rimg0 = imreduce(64, rimg00)
                        predpnt = numpy.zeros_like(rimg0)
                        for ang in [-6, -4, -2, 0, 2, 4, 6]:
                            rimg = rotate(rimg0, ang)
                            patch = self.image2feat(rimg,
                                                    self.psize,
                                                    self.ssize,
                                                    self.nob,
                                                    self.codebook,
                                                    target=self.featureMode,
                                                    edgeMode=self.edgeMode)
                            pred = self.feat2pred(rimg, patch, clf)
                            predpnt0 = self.label2image(rimg,
                                                        pred,
                                                        mode='point')
                            predpnt = predpnt + rotate(predpnt0, -ang)
                        for asp in [0.6, 0.8, 1, 1.2, 1.4]:
                            rimg = img_resize(
                                rimg0,
                                [int(rimg0.shape[0] * asp), rimg0.shape[1]])
                            patch = self.image2feat(rimg,
                                                    self.psize,
                                                    self.ssize,
                                                    self.nob,
                                                    self.codebook,
                                                    target=self.featureMode,
                                                    edgeMode=self.edgeMode)
                            pred = self.feat2pred(rimg, patch, clf)
                            predpnt0 = self.label2image(rimg,
                                                        pred,
                                                        mode='point')
                            predpnt = predpnt + img_resize(
                                predpnt0, rimg0.shape)
                        predcc = pnt2cc(rimg0, predpnt)
                        predcc = img_resize(predcc, rimg00.shape)
                        #predblk = self.label2image(img, pred, mode = 'block')
                        predpnt_stack.append(predcc)
                        #predblk_stack.append(predblk)
                    layer_stack.append(
                        roi2image(predpnt_stack, bb, layer.shape))
                img = stack2image(layer_stack, img)
                pickle_save(layer_stack, stackname, outdir)
                image_save(img, imgname.split('.')[0] + '.png', outdir)
                mytime.end()
            except:
                mytime.end()
                continue
        mail(self.mail_rec, '<Coding Message!!!>, hotmap generation finished')
        mytime.final('hotmap generation finished')
        return