update
This commit is contained in:
169
ComparisonAnalysis.py
Normal file
169
ComparisonAnalysis.py
Normal file
@ -0,0 +1,169 @@
|
||||
import os.path
|
||||
import shutil
|
||||
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
|
||||
def showHist(err, correct, date):
|
||||
err = np.array(err)
|
||||
correct = np.array(correct)
|
||||
|
||||
fig, axs = plt.subplots(2, 1)
|
||||
axs[0].hist(err, bins=50, edgecolor='black')
|
||||
axs[0].set_xlim([0, 1])
|
||||
axs[0].set_title('err')
|
||||
axs[1].hist(correct, bins=50, edgecolor='black')
|
||||
axs[1].set_xlim([0, 1])
|
||||
axs[1].set_title('correct')
|
||||
plt.title(date)
|
||||
plt.savefig('comparisonResult/Hist_' + date + '.png')
|
||||
plt.show()
|
||||
|
||||
|
||||
def showgrid(recall, prec, date):
|
||||
x = np.linspace(start=-0, stop=1, num=11, endpoint=True).tolist()
|
||||
plt.figure(figsize=(10, 6))
|
||||
plt.plot(x, recall, color='red', label='recall')
|
||||
plt.plot(x, prec, color='blue', label='PrecisePos')
|
||||
plt.legend()
|
||||
plt.xlabel('threshold')
|
||||
plt.title(date)
|
||||
# plt.ylabel('Similarity')
|
||||
plt.grid(True, linestyle='--', alpha=0.5)
|
||||
# plt.savefig('accuracy_recall_grid.png')
|
||||
plt.savefig('comparisonResult/grid_' + date + '.png')
|
||||
plt.show()
|
||||
plt.close()
|
||||
|
||||
|
||||
def read_txt_file(filePth):
|
||||
with open(filePth, 'r', encoding='utf-8') as f:
|
||||
lines = f.readlines()
|
||||
dict = {}
|
||||
all_list = []
|
||||
barcode_list = []
|
||||
similarity_list = []
|
||||
split_flag = False
|
||||
clean_lines = [line.strip().replace("'", '').replace('"', '') for line in lines]
|
||||
for line in clean_lines:
|
||||
stripped_line = line.strip()
|
||||
if not stripped_line:
|
||||
split_flag = False
|
||||
all_list.append(dict)
|
||||
dict = {}
|
||||
barcode_list, similarity_list = [], []
|
||||
continue
|
||||
|
||||
label = line.split(':')[0]
|
||||
value = line.split(':')[1]
|
||||
if label == 'SeqDir':
|
||||
dict['SeqDir'] = value
|
||||
if label == 'Deleted':
|
||||
dict['Deleted'] = value
|
||||
if label == 'List':
|
||||
split_flag = True
|
||||
continue
|
||||
if split_flag:
|
||||
dict['barcode'] = barcode_list
|
||||
dict['similarity'] = similarity_list
|
||||
barcode_list.append(label)
|
||||
similarity_list.append(value)
|
||||
all_list.append(dict)
|
||||
all_list = [d for d in all_list if d]
|
||||
return all_list
|
||||
|
||||
|
||||
def move_file(seqdirs, filePth):
|
||||
comparisonData = os.path.basename(filePth).split('.')[0]
|
||||
comparisonData = os.sep.join(['D:\Project\ieemoo\image_quality_assessment\comparisonData', comparisonData])
|
||||
print('comparisonData', comparisonData)
|
||||
for seqdir in seqdirs:
|
||||
print(seqdir[0], seqdir[1])
|
||||
err_pair = os.sep.join([comparisonData, 'err_pair', seqdir[1]])
|
||||
if not os.path.exists(err_pair):
|
||||
os.makedirs(err_pair)
|
||||
for comparison in os.listdir(comparisonData):
|
||||
print(os.sep.join([comparisonData, comparison]))
|
||||
print(os.sep.join([err_pair, comparison]))
|
||||
try:
|
||||
if seqdir[0] in comparison:
|
||||
shutil.copytree(os.sep.join([comparisonData, comparison]),
|
||||
os.sep.join([err_pair, comparison]))
|
||||
if seqdir[1] in comparison:
|
||||
shutil.copytree(os.sep.join([comparisonData, comparison]),
|
||||
os.sep.join([err_pair, comparison]))
|
||||
except Exception as e:
|
||||
continue
|
||||
|
||||
|
||||
def compute_recall_precision(err_similarity, correct_similarity, date=None):
|
||||
# ths = np.linspace(0, 1, 11)
|
||||
ths = np.linspace(start=-0, stop=1, num=11, endpoint=True).tolist()
|
||||
recall, prec = [], []
|
||||
for th in ths:
|
||||
TP = len([num for num in correct_similarity if num >= th])
|
||||
FP = len([num for num in err_similarity if num >= th])
|
||||
if (TP + FP) == 0:
|
||||
prec.append(1)
|
||||
recall.append(0)
|
||||
else:
|
||||
prec.append(TP / (TP + FP))
|
||||
recall.append(TP / (len(err_similarity) + len(correct_similarity)))
|
||||
# print(recall)
|
||||
# print(prec)
|
||||
showgrid(recall, prec, date)
|
||||
return recall, prec
|
||||
|
||||
|
||||
def deal_one_file(filePth):
|
||||
date = filePth.split('\\')[-1].split('.')[0]
|
||||
all_list = read_txt_file(filePth)
|
||||
num = 0
|
||||
err_barcode_list, correct_barcode_list, err_similarity, correct_similarity, seqdirs = [], [], [], [], []
|
||||
for s_list in all_list:
|
||||
seqdir = s_list['SeqDir'].strip()
|
||||
delete = s_list['Deleted'].strip()
|
||||
barcodes = [s.strip() for s in s_list['barcode']]
|
||||
similarity = [float(s.strip()) for s in s_list['similarity']]
|
||||
if delete in barcodes[:1]:
|
||||
num += 1
|
||||
correct_barcode_list.append(delete)
|
||||
correct_similarity.append(similarity[0])
|
||||
else:
|
||||
seqdirs.append((seqdir, delete))
|
||||
err_barcode_list.append(delete)
|
||||
err_similarity.append(similarity[0])
|
||||
|
||||
compute_recall_precision(err_similarity, correct_similarity, date)
|
||||
showHist(err_similarity, correct_similarity, date)
|
||||
move_file(seqdirs, filePth) # 统计错误对
|
||||
return err_similarity, correct_similarity
|
||||
|
||||
|
||||
def main(filesPth):
|
||||
err_similarities, correct_similarities = [], []
|
||||
dir_lists = os.listdir(filesPth)
|
||||
# dir_lists = ['deletedBarcode_10_0716_pm_3.txt']
|
||||
for name in dir_lists:
|
||||
filePth = os.sep.join([filesPth, name])
|
||||
err_similarity, correct_similarity = deal_one_file(filePth)
|
||||
err_similarities += err_similarity
|
||||
correct_similarities += correct_similarity
|
||||
compute_recall_precision(err_similarities, correct_similarities, date='zong')
|
||||
showHist(err_similarities, correct_similarities, date='zong')
|
||||
print('END')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# filePth = 'D:\Project\ieemoo\image_quality_assessment\comparisonResult\deletedBarcode_10_0722_pm_01.txt'
|
||||
# read_txt_file(filePth)
|
||||
|
||||
filesPth = 'comparisonResult'
|
||||
main(filesPth)
|
||||
|
||||
# for name in os.listdir('comparisonData\deletedBarcode_15_0628_pm\err_pair'):
|
||||
# path = os.sep.join(['comparisonData\deletedBarcode_15_0628_pm\err_pair', name])
|
||||
# print(len(os.listdir(path)))
|
||||
# if len(os.listdir(path)) < 2:
|
||||
# print(path)
|
Reference in New Issue
Block a user