示例#1
0
class Pipeline(object):
	def __init__(self, args):
		'''
		sum of step is: 4:0-4
		:param n_step:
		'''
		self.n_step = args.n_step
		self.pool_size = args.pool_size
		self.args = args
		self.hash = Hash(hash_size=self.args.hash_size)
		self.schedule()
		
	def multi(self, F, iterable):
		pool = Pool(size=self.pool_size)
		res = pool.imap(F, iterable)
		return res
	
	def schedule(self):
		ori_p = self.args.ori_p
		enc_p = self.args.enc_p
		if os.path.isfile(enc_p) and self.n_step == 0:
			enc_img = self.step_preprocess(enc_p)
			enc_img = self.step_encode(enc_img)
			hash_str = self.step_hash(enc_img)
			# res_list = self.step_query(hash_str)
			# return res_list
			return hash_str
		else:
			if self.n_step >= 1:
				try:
					if self.args.ori_p != "":
						self.step_preprocess_n(ori_p)
				except:
					raise print("请输入正确的原始图像路径!!!")
				if self.args.train == 1:
					self.step_train()
			if self.n_step >= 2:
				imgs = self.multi(cv.imread, [self.args.enc_p + m for m in os.listdir(self.args.enc_p)])
				enc_imgs = [i for i in self.step_encode_n(imgs)]
				# print(enc_imgs)
				# enc_imgs = []
				# for i in self.step_encode_n(imgs):
				# 	enc_imgs.append(i)
			else:
				return None
			
			if self.n_step >=3:
				hash_strs = [i for i in self.step_hash_n(enc_imgs)]
				# hash_strs = []
				# for i in self.step_hash_n(enc_imgs):
				# 	hash_strs.append(i)
			else:
				return enc_imgs
			if self.n_step >= 4:
				self.step_index(hash_strs)
			else:
				return hash_strs
	
	def step_preprocess(self, ori_p):
		img = img_cut(ori_p)
		img = cv.resize(img, (self.args.img_size, self.args.img_size))
		return img
	
	def step_preprocess_n(self, ori_p):
		img_migrate(ori_p=ori_p)
		img_reshape(self.args)
		
	def step_train(self):
		train(self.args)
		
	def step_encode(self, img):
		encode = encode_transform(img, self.args)
		return encode
	
	def step_encode_n(self, imgs):
		return self.multi(self.step_encode, imgs)
	
	def step_hash(self, img):
		h = self.hash.ahash(img)
		return h
	
	def step_hash_n(self, imgs):
		return self.multi(self.step_hash, imgs)
	
	def step_index(self, hash_strs):
		self.hash.index()
		
	def step_query(self, hash_str):
		self.hash.query()
示例#2
0
文件: tests.py 项目: 1uvu/AAE-Hash
'''
import cv2 as cv
from torchvision.utils import save_image

from setting import TEST_DIR
from aae import encode_transform
from hash import Hash
from main import args

img_1 = cv.imread(TEST_DIR + "enc/1.jpg")
img_2 = cv.imread(TEST_DIR + "enc/2.jpg")
enc_1 = encode_transform(img_1, args)
enc_2 = encode_transform(img_2, args)

my_hash = Hash()
ah_1 = my_hash.ahash(enc_1)
ah_2 = my_hash.ahash(enc_2)
print("1 and 2:\t\n", ah_1, "\n", ah_2)
a1 = my_hash.compare(ah_1.__str__(), ah_2.__str__())
print("1 and 2 similarity:\t", a1)

img_3 = cv.imread(TEST_DIR + "enc/3.jpg")
img_4 = cv.imread(TEST_DIR + "enc/4.jpg")
enc_3 = encode_transform(img_3, args)
enc_4 = encode_transform(img_4, args)

my_hash = Hash()
ah_3 = my_hash.ahash(enc_3)
ah_4 = my_hash.ahash(enc_4)
print("3 and 4:\t\n", ah_3, "\n", ah_4)
a2 = my_hash.compare(ah_3.__str__(), ah_4.__str__())