skeleton 코드
[python] 이미지 유사도 체크 코드
DanGEE
2023. 3. 24. 15:59
두 개의 폴더 비교하여 중복 있을 경우 리스팅
1) opencv 사용 (structural similarity -- opencv-python 은 c++을 python으로 감싼거라서 속도는 거의 비슷 )
2) structural similarity -- 갱장히 느림. multiprocessing 으로 속도 상향 . (core 수 최대로 잡음 유의)
3) 이중 for문 사용, 이전 인덱스는 비교하지 않음 ( 이미 비교 됬으니까 )
4) 멀티프로세싱시에 파일에 쓰는게 안되서 일단은 그냥 출력하고 그거 긁어다가 사용...
출력 저장 왜 안되능가?
from skimage.metrics import structural_similarity
import cv2
import numpy as np
import os
from tqdm import tqdm
import shutil
import multiprocessing
#path1='./RGB_001/images/'
#path2='./RGB_002/images/'
path1='./total/'
path2='./006/images/'
flist1=os.listdir(path1)
flist2=os.listdir(path2)
flist1.sort()
flist2.sort()
h=108
w=192
def process_file(f2_idx):
f2 = flist2[f2_idx]
#print(f2)
second_gray = cv2.imread(path2+f2, cv2.IMREAD_GRAYSCALE)
second_gray = cv2.resize(second_gray, dsize=(w, h))
#cnt=0
for f1 in flist1[f2_idx:]:
first_gray = cv2.imread(path1+f1, cv2.IMREAD_GRAYSCALE)
first_gray = cv2.resize(first_gray, dsize=(w, h))
score, diff = structural_similarity(first_gray, second_gray, full=True)
#if cnt>20:
# break
#cnt+=1
if score * 100 > 50:
if f2 != f1:
#print(" score:", "{:.3f}%".format(score * 100), "i2", f2, "i1", f1, file=samelist)
#samelist.write(f" score: {score * 100}, i2: {f2} i1: {f1}\n")
print(" score:", score, "i1,i2 : ", f1, f2)
else:
print("no file")
if __name__ == '__main__':
pool = multiprocessing.Pool()
for _ in tqdm(pool.imap_unordered(process_file, range(len(flist2))), total=len(flist2)):
pass
pool.close()
pool.join()
#samelist.close()
print("done")
두개의 이미지 유사도 검사하기
from skimage.metrics import structural_similarity
import cv2
import numpy as np
import os
import sys
#f1=sys.argv[1]
#f2=sys.argv[2]
#f1=sys.argv[1]
#f2=sys.argv[2]
#f2="/mnt/myhdd/ir/"+sys.argv[2]
#f2="./006/images/"+sys.argv[2]
f1="./total/"+sys.argv[1]
f2="./total/"+sys.argv[2]
#f1=sys.argv[1]
#f2=sys.argv[2]
#f1='2.jpg'
#f2='3.jpg'
#flist1=os.listdir(path1)
#flist2=os.listdir(path2)
first = cv2.imread(f1)
second = cv2.imread(f2)
# Convert images to grayscale
first_gray = cv2.cvtColor(first, cv2.COLOR_BGR2GRAY)
second_gray = cv2.cvtColor(second, cv2.COLOR_BGR2GRAY)
#img_sub=cv2.subtract(first_gray, second_gray)
score, diff = structural_similarity(first_gray, second_gray, full=True)
#retval, imgbi =cv2.threshold(img_sub, 50, 255, cv2.THRESH_BINARY)
#cntpix = np.sum(imgbi == 0)
h, w= first_gray.shape
#print(float(cntpix)*100/(w*h))
print(score*100)
cv2.imwrite('img1.jpg',first)
cv2.imwrite('img2.jpg',second)