from PIL import Image
|
|
from multiprocessing import Process
|
|
import sim.histogram as htg
|
|
import sim.aHash as ah
|
|
import sim.pHash as ph
|
|
import sim.dHash as dh
|
|
import os
|
|
import feature
|
|
from flask import redirect,url_for
|
|
|
|
|
|
# if __name__ == '__main__':
|
|
|
|
class simi:
|
|
def similarity(self, path):
|
|
print("begin")
|
|
# print(m)
|
|
# print(path)
|
|
|
|
folder_path = "upload/" + path
|
|
dirs = os.listdir(folder_path)
|
|
|
|
# 文件夹下有tmp张图片
|
|
tmp = 0
|
|
for item in dirs:
|
|
if os.path.isfile(os.path.join(folder_path, item)):
|
|
tmp += 1
|
|
# print(tmp)
|
|
|
|
list = [[] for j in range(int(tmp*(tmp-1)*0.5))] # [[], [], [], [], [], []]
|
|
|
|
index = 0
|
|
for i in range(1,tmp+1):
|
|
for j in range(i+1,tmp+1):
|
|
str1 = folder_path + '/img' + str(i) + '.png'
|
|
str2 = folder_path + '/img' + str(j) + '.png'
|
|
# print(str1)
|
|
# print(index)
|
|
# print('------------------')
|
|
list[index].append(str1)
|
|
list[index].append(str2)
|
|
|
|
img1 = Image.open(str1)
|
|
img2 = Image.open(str2)
|
|
img1_htg = htg.regularizeImage(img1)
|
|
img2_htg = htg.regularizeImage(img2)
|
|
hg1 = img1_htg.histogram()
|
|
hg2 = img2_htg.histogram()
|
|
|
|
# draw the histogram in a no-blocking way
|
|
sub_thread = Process(target=htg.drawHistogram, args=(hg1, hg2,))
|
|
sub_thread.start()
|
|
|
|
# print the histogram similarity
|
|
htg_result = htg.calMultipleHistogramSimilarity(img1_htg, img2_htg)
|
|
list[index].append(htg_result)
|
|
print('依据图片直方图距离计算相似度:{}'.format(htg_result))
|
|
|
|
# aHash Calculation
|
|
ah_result = ah.calaHashSimilarity(img1, img2)
|
|
list[index].append(ah_result)
|
|
print('依据平均哈希算法计算相似度:{}/{}'.format(ah_result, 64))
|
|
|
|
# pHash Calculation
|
|
ph_result = ph.calpHashSimilarity(img1, img2)
|
|
list[index].append(ph_result)
|
|
print('依据感知哈希算法计算相似度:{}/{}'.format(ph_result, 64))
|
|
|
|
# dHash Calculation
|
|
dh_result = dh.caldHashSimilarity(img1, img2)
|
|
list[index].append(dh_result)
|
|
print('依据差异哈希算法计算相似度:{}/{}'.format(dh_result, 64))
|
|
|
|
index = index + 1
|
|
# print(list)
|
|
# print(index)
|
|
# print(tmp)
|
|
|
|
the_feature = feature.feat()
|
|
message = the_feature.call_feature_extraction_1(folder_path,list,index,tmp)
|
|
|
|
# return redirect(url_for('call_feature',alist = list))
|
|
return message
|
|
|
|
|
|
|
|
|
|
|
|
|