Example #1
0
def binarize_file_adaptive(filename, outFolder):
    FileHelper.create_or_clear_dir(outFolder)
    fullFilename = filename
    path, filename = os.path.split(filename)
    filename_base, filename_ext = os.path.splitext(filename)
    for neighbours, shift in itertools.product(range(3, 17, 2), range(10)):
        image = load_image_adaptive(fullFilename, neighbours, shift, binary_type=cv2.THRESH_TRUNC)
        ffsave = "%s_%d_%d%s" % (filename_base, neighbours, shift, filename_ext)
        cv2.imwrite(os.path.join(outFolder, ffsave), image)
Example #2
0
def binarize_file_threshold(filename, outFolder):
    FileHelper.create_or_clear_dir(outFolder)
    fullFilename = filename
    path, filename = os.path.split(filename)
    filename_base, filename_ext = os.path.splitext(filename)
    for threshold in range(30, 200, 20):
        image = load_image_thresholding(fullFilename, threshold, binary_type=cv2.THRESH_BINARY)
        ffsave = "%s_%d%s" % (filename_base, threshold, filename_ext)
        cv2.imwrite(os.path.join(outFolder, ffsave), image)
Example #3
0
def process_folder_group(folder, output, saveStructure=False, rules=default_sample):
    FileHelper.create_or_clear_dir(output)
    for d in os.listdir(folder):
        if os.path.isdir(os.path.join(folder, d)):
            files = process_folder(os.path.join(folder, d), rules)
            if saveStructure:
                copyto = os.path.join(output, d)
                os.makedirs(copyto)
            else:
                copyto = output

            for f in files:
                shutil.copy2(os.path.join(folder, d, f), copyto)
Example #4
0
def process_sample(classifier, inputFolder, outputFolder=None, jobs=-1, saveCorrects=False):
    logger = logging.getLogger("TestClassifier")

    positiveInput = os.path.join(inputFolder, 'positive')
    negativeInput = os.path.join(inputFolder, 'negative')

    falseNegativeOutput, falsePositiveOutput = None, None
    trueNegativeOutput, truePositiveOutput = None, None
    if outputFolder:
        falsePositiveOutput = os.path.join(outputFolder, 'falsePositive')
        falseNegativeOutput = os.path.join(outputFolder, 'falseNegative')
        FileHelper.create_or_clear_dir(falsePositiveOutput)
        FileHelper.create_or_clear_dir(falseNegativeOutput)
        if saveCorrects:
            truePositiveOutput = os.path.join(outputFolder, 'truePositive')
            trueNegativeOutput = os.path.join(outputFolder, 'trueNegative')
            FileHelper.create_or_clear_dir(truePositiveOutput)
            FileHelper.create_or_clear_dir(trueNegativeOutput)

    logger.debug('Process positive examples')
    truePositive, falseNegative = process_folder(classifier, positiveInput, False, truePositiveOutput, falseNegativeOutput, jobs)
    logger.info('True positives: %d; False negatives: %d' % (truePositive, falseNegative))
    logger.debug('Process negative examples')
    trueNegative, falsePositive = process_folder(classifier, negativeInput, True, falsePositiveOutput, trueNegativeOutput, jobs)
    logger.info('False positives: %d; True negatives: %d' % (falsePositive, trueNegative))

    return truePositive, falseNegative, trueNegative, falsePositive
Example #5
0
 def process_folder(self, folder):
     """
     Process folder
     Returns: (positive, negative)
         Tuple with two lists: positive and negative file names
     """
     return self.process_file_list(FileHelper.read_images_in_dir(folder))
def hashtagGetGenerator(folder):
    for dir, filename in FileHelper.read_images_in_dir_recursively(folder):
        if dir[-1] == '\\':
            dir = dir[:-1]
        path, dwt = os.path.split(dir)

        yield dir, filename, getTagCoordinates(dwt)
Example #7
0
    def tag_folder(self, folder, output):
        print folder
        if folder[-1] == '\\':
            folder = folder[:-1]
        self.currentFolder = folder
        self.uplevelFolder = os.path.split(folder)[-1]
        try:
            self.currentTag = getTagCoordinates(self.uplevelFolder, YX=False)
        except ValueError:
            pass

        self.negativePath = os.path.join(output, 'negative')
        self.goodPath = os.path.join(output, 'good')
        self.badPath = os.path.join(output, 'bad')
        self.awfulPath = os.path.join(output, 'awful')
        self.twitterPath = os.path.join(output, 'twitter')
        self.facebookPath = os.path.join(output, 'facebook')
        self.atPath = os.path.join(output, 'at')

        self.filelist = sorted(FileHelper.read_images_in_dir(folder, includeDir=True))
        if not self.show_next():
            shutil.rmtree(folder)
            return True
        while True:
            action = self.wait_for_action()
            if action == 'break':
                return False
            elif action == 'next':
                if not self.show_next():
                    shutil.rmtree(folder)
                    return True
Example #8
0
    def __load_prepare_templates(self):
        """Load templates. Template MUST be white on black background"""
        templates = []
        filelist = sorted(FileHelper.read_images_in_dir(self.templates_dir))
        for filename in filelist:
            templ = self.__load_template(os.path.join(self.templates_dir, filename))
            if templ is not None:
                templates.append(templ)

        return templates
Example #9
0
    def __getFeaturesFromTemplates(self):

        features = {}
        images = FileHelper.read_images_in_dir(self.templates_dir)
        for filename in images:
            im = cv2.imread(os.path.join(self.templates_dir, filename), cv2.IMREAD_GRAYSCALE)
            kp, desc = self.detector.detectAndCompute(im, None)
            logging.debug('{0} - {1} features'.format(filename, len(kp)))
            # features.append((kp, desc))
            features[filename] = (kp, desc)
        return features
import os

from image.pattern_matcher import PatternMatcher
from misc.file_helper import FileHelper

if __name__ == "__main__":
    import sys

    # for dir, filename in FileHelper.read_images_in_dir_recursively('frames_tagged_291013_goodbad'):
    #     pm = PatternMatcher()
    #     pattern_dir = 'frames_tagged_291013_goodbad_ht/' + '/'.join((dir.split('/')[1:]))
    #     bfn, ext = os.path.splitext(filename)
    #
    #     pm.load_patterns([os.path.join(pattern_dir, bfn+'_ht'+ext)], convert2GS=True)
    #     pm.match(os.path.join(dir, filename), generateHist=True)

    pm = PatternMatcher()
    # pm.load_patterns([sys.argv[1]], convert2GS=True)
    pm.load_patterns_folder(sys.argv[1])
    if os.path.isdir(sys.argv[2]):
        for dir, filename in FileHelper.read_images_in_dir_recursively(sys.argv[2]):
            print os.path.join(dir, filename)
            pm.match(os.path.join(dir, filename), visualise=True)
    else:
        pm.match(sys.argv[2], visualise=True)
Example #11
0
def process_folder(classifier, inputFolder, countPositive, positiveOutputFolder=None, negativeOutputFolder=None, jobs=-1):
    filelist = [os.path.join(inputFolder, fn) for fn in FileHelper.read_images_in_dir(inputFolder)]
    return process_file_list(classifier, filelist, countPositive, positiveOutputFolder, negativeOutputFolder, jobs)
Example #12
0
def binarize_folder_threshold(inFolder, outFolder):
    fileList = FileHelper.read_images_in_dir(inFolder)
    FileHelper.create_or_clear_dir(outFolder)
    for filename in fileList:
        image = load_image_thresholding(os.path.join(inFolder, filename), 190)
        cv2.imwrite(os.path.join(outFolder, filename), image)
    for r, (x1, y1, x2, y2) in result:
        cv2.rectangle(image, (y1, x1), (y2, x2), colorMap[r], 1)

    path, bf = os.path.split(filename)
    cv2.imwrite(os.path.join(output, bf), image)

if __name__ == '__main__':
    parser = ArgParserWithDefaultHelp(description='Visualising tool for pattern matcher and classifier')
    parser.add_argument('folder', help='Folder, that contains folders with frames')
    parser.add_argument('patterns', help='Folder with patterns')
    parser.add_argument('classifier', help='Classifier')
    parser.add_argument('output', help='Output folder for processed images')
    parser.add_argument('-j', '--jobs', default=-1, type=int, help='Processes amount for parallel processing')
    args = parser.parse_args()

    classifier = load(args.classifier)
    FileHelper.create_or_clear_dir(args.output)

    wfc = WindowedFeatureClassifier(classifier)

    pm = PatternMatcher()
    pm.load_patterns_folder(args.patterns)

    tasks = []
    for dir, filename in FileHelper.read_images_in_dir_recursively(args.folder):
        tasks.append(delayed(process_image)(wfc, pm, os.path.join(dir, filename), args.output))

    p = Parallel(n_jobs=args.jobs, verbose=100)
    p(tasks)
Example #14
0
def process_folder(folder, rules=default_sample):
    files = FileHelper.read_images_in_dir(folder)
    return get_ruled_files(files, rules)
Example #15
0
    base_template = drawContours(base_template, template_contours)
    cv2.imwrite('/home/valeriy/projects/hashtag/logos/bw/twitter_big_template_contours.png', base_template)

    if len(template_contours) > 1:
        print 'Warning: too complex template'

    template_contours = template_contours[0]
    # print len(template_contours)
    print '%0.3f %3d %0.2f %0.2f ' % (0.0, len(template_contours), contourSolidity(template_contours), contourExtent(template_contours))

    # template_contours = approxContour(template_contours)

    inFolder = '/home/valeriy/projects/hashtag/logos/twitter_frames/'
    outFolder = '/home/valeriy/projects/hashtag/logos/bin_twitter_frames/'
    FileHelper.create_or_clear_dir(outFolder)
    for filename in sorted(FileHelper.read_images_in_dir(inFolder))[:3]:
        print filename
        basefile = os.path.join(inFolder, filename)
        basefile_without_ext = os.path.join(outFolder, os.path.splitext(filename)[0])

        # image = binarization.load_image_adaptive(basefile, 11, 10, inverse=False)
        image = binarization.load_image_thresholding(basefile, 180)
        # image = binarization.load_image_thresholding(basefile, 200, binary_type=cv2.THRESH_BINARY_INV)
        contour_image = image.copy()
        contours, hierarchy = cv2.findContours(contour_image, cv2.RETR_TREE, findContourMethod)
        image_drawed = drawContours(image, contours)
        # cv2.imwrite(basefile_without_ext + '_bin_thresh_100.jpg', image_drawed)
        # cv2.imwrite(basefile_without_ext + '_contour.jpg', contour_image)

        # contours = approxAllContours(contours)
Example #16
0
    def load_patterns_folder(self, folder):
        pattern_filelist = []
        for dir, filename in FileHelper.read_images_in_dir_recursively(folder):
            pattern_filelist.append(os.path.join(dir, filename))

        self.load_patterns(pattern_filelist)
    imageShowed = cv2.imread(filename)
    for r, (x1, y1, x2, y2) in result:
        cv2.rectangle(imageShowed, (y1, x1), (y2, x2), colorMap[r], 1)

    path, filename = os.path.split(filename)
    bfn, ext = os.path.splitext(filename)
    cv2.imwrite(os.path.join(output, bfn+'_wclrd'+ext), imageShowed)

    # cv2.imshow('image', imageShowed)
    # key = 255
    # while key != 27:
    #     key = cv2.waitKey(20) & 0xFF


if __name__ == '__main__':
    import sys
    classifier = load(sys.argv[1])
    output = sys.argv[3]
    FileHelper.create_or_clear_dir(output)

    colorMap = ColorMap((0, 255, 255), (0, 0, 255), 0.0, 1.0)
    wfc = WindowedFeatureClassifier(classifier)
    if os.path.isdir(sys.argv[2]):
        dir = sys.argv[2]
        for filename in os.listdir(dir):
            if os.path.isfile(os.path.join(dir, filename)):
                process_file(wfc, os.path.join(dir, filename), output)
    else:
        process_file(wfc, sys.argv[2], output)