def match(args):
    '''Search the database for matching files'''
    # open the shelve database
    db = shelve.open(args["shelve"])

    # load the query image, compute the difference image hash, and
    # and grab the images from the database that have the same hash
    # value
    query = Image.open(args["query"])

    if args['hash_name'] == 'grayscale':
        h = imagehash.grayscale_hash(query)
        db_hash = db['grayscale']
    elif args['hash_name'] == 'color':
        h = imagehash.color_hash(query)
        db_hash = db['color']


    filenames = db_hash[str(h)]
    print("Found %d images" % (len(filenames)))

    # loop over the images
    for filename in filenames:
        print(filename)
        #image = Image.open(args["dataset"] + "/" + filename)
        #image.show()

    # close the shelve database
    db.close()
def index(args):
    '''Process and index a dataset for futher inspection'''
    # open the shelve database
    db = shelve.open(args["shelve"], writeback=True)
    db['grayscale'] = db.get('grayscale', {})
    db['color'] = db.get('color', {})

    # loop over the image dataset
    for imagePath in glob.iglob(os.path.join(args['dataset'], '*.JPG')):
        # load the image and compute the difference hash
        image = Image.open(imagePath)
        ghash = str(imagehash.grayscale_hash(image))
        chash = str(imagehash.color_hash(image))

        # extract the filename from the path and update the database
        # using the hash as the key and the filename append to the
        # list of values
        filename = os.path.abspath(imagePath)
        db['grayscale'][ghash] = db['grayscale'].get(ghash, []) + [filename]
        db['color'][chash] = db['color'].get(chash, []) + [filename]

    print('{} files indexed'.format(len(db['color'].items())))

    # close the shelf database
    db.close()
def search(args):
    '''Search the database for similar files'''
    # open the shelve database
    db = shelve.open(args["shelve"])

    query = Image.open(args["query"])

    if args['hash_name'] == 'grayscale':
        h = imagehash.grayscale_hash(query)
        db_hash = db['grayscale']
    elif args['hash_name'] == 'color':
        h = imagehash.color_hash(query)
        db_hash = db['color']

    print(collections.Counter(len(hex) for hex, image in db_hash.items()).most_common())
    l = [(h - imagehash.hex_to_hash(hex), hex)  for hex, image in db_hash.items()]

    c = collections.Counter(item[0] for item in l)
    print(sorted(c.most_common(), key=lambda item: item[0]))

    command = []
    for strength, item in sorted(l, key=lambda item: item[0]):
        if args['threshold'] < 0 or strength <= args['threshold']:
            print('{} count: {} stength: {}'.format(db_hash[item][0], len(db_hash[item]), strength))
            command.append(db_hash[item][0])
    if command:
        subprocess.call(['feh', '-t', '-F', '-y 150', '-E 150'] + command)
Exemple #4
0
def match(args):
    '''Search the database for matching files'''
    # open the shelve database
    db = shelve.open(args["shelve"])

    # load the query image, compute the difference image hash, and
    # and grab the images from the database that have the same hash
    # value
    query = Image.open(args["query"])

    if args['hash_name'] == 'grayscale':
        h = imagehash.grayscale_hash(query)
        db_hash = db['grayscale']
    elif args['hash_name'] == 'color':
        h = imagehash.color_hash(query)
        db_hash = db['color']

    filenames = db_hash[str(h)]
    print("Found %d images" % (len(filenames)))

    # loop over the images
    for filename in filenames:
        print(filename)
        #image = Image.open(args["dataset"] + "/" + filename)
        #image.show()

    # close the shelve database
    db.close()
Exemple #5
0
def search(args):
    '''Search the database for similar files'''
    # open the shelve database
    db = shelve.open(args["shelve"])

    query = Image.open(args["query"])

    if args['hash_name'] == 'grayscale':
        h = imagehash.grayscale_hash(query)
        db_hash = db['grayscale']
    elif args['hash_name'] == 'color':
        h = imagehash.color_hash(query)
        db_hash = db['color']

    print(
        collections.Counter(len(hex)
                            for hex, image in db_hash.items()).most_common())
    l = [(h - imagehash.hex_to_hash(hex), hex)
         for hex, image in db_hash.items()]

    c = collections.Counter(item[0] for item in l)
    print(sorted(c.most_common(), key=lambda item: item[0]))

    command = []
    for strength, item in sorted(l, key=lambda item: item[0]):
        if args['threshold'] < 0 or strength <= args['threshold']:
            print('{} count: {} stength: {}'.format(db_hash[item][0],
                                                    len(db_hash[item]),
                                                    strength))
            command.append(db_hash[item][0])
    if command:
        subprocess.call(['feh', '-t', '-F', '-y 150', '-E 150'] + command)
Exemple #6
0
def index(args):
    '''Process and index a dataset for futher inspection'''
    # open the shelve database
    db = shelve.open(args["shelve"], writeback=True)
    db['grayscale'] = db.get('grayscale', {})
    db['color'] = db.get('color', {})

    # loop over the image dataset
    for imagePath in glob.iglob(os.path.join(args['dataset'], '*.JPG')):
        # load the image and compute the difference hash
        image = Image.open(imagePath)
        ghash = str(imagehash.grayscale_hash(image))
        chash = str(imagehash.color_hash(image))

        # extract the filename from the path and update the database
        # using the hash as the key and the filename append to the
        # list of values
        filename = os.path.abspath(imagePath)
        db['grayscale'][ghash] = db['grayscale'].get(ghash, []) + [filename]
        db['color'][chash] = db['color'].get(chash, []) + [filename]

    print('{} files indexed'.format(len(db['color'].items())))

    # close the shelf database
    db.close()
Exemple #7
0
 def test_yellow_returns_all_yellow(self):
     self.assertEqual(str(imagehash.grayscale_hash(self.yellow, 2)),
                      'e1e1e1e1')
Exemple #8
0
 def test_green_returns_all_green(self):
     self.assertEqual(str(imagehash.grayscale_hash(self.green, 2)),
                      '4b4b4b4b')
Exemple #9
0
 def test_red_returns_all_red(self):
     self.assertEqual(str(imagehash.grayscale_hash(self.red, 2)),
                      '4c4c4c4c')
Exemple #10
0
 def test_blue_returns_all_blue(self):
     self.assertEqual(str(imagehash.grayscale_hash(self.blue, 2)),
                      '1d1d1d1d')
Exemple #11
0
 def test_black_returns_all_zeros(self):
     self.assertEqual(str(imagehash.grayscale_hash(self.black, 2)),
                      '00000000')
Exemple #12
0
 def test_white_returns_all_fs(self):
     self.assertEqual(str(imagehash.grayscale_hash(self.white, 2)),
                      'ffffffff')