云计算期末大作业 论文图像复用的机器自动检查 魏如蓝 10172100262
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 

89 lignes
2.8 KiB

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