Xóa các hình ảnh tương tự khỏi một thư mục bằng Python
Logic cơ bản đằng sau chương trình python này là tạo giá trị băm cho mỗi hình ảnh không dựa trên tên của nó mà dựa trên giá trị và số lượng pixel của nó. Dựa trên giá trị băm này, chúng tôi sẽ lưu trữ các hình ảnh trong một từ điển có khóa sẽ là giá trị băm được tạo và giá trị sẽ giữ giá trị nhị phân của chính hình ảnh đó.
Bây giờ, dựa trên điều này, chúng tôi lưu trữ các hình ảnh trong từ điển hoặc nếu chúng tôi thấy hình ảnh này là bản sao, chúng tôi chỉ cần đặt hình ảnh này vào danh sách trùng lặp có dạng nhị phân chỉ mục và hình ảnh. Sau đó, chúng tôi xóa danh sách hình ảnh này dựa trên giá trị chỉ mục của chúng
Bây giờ, dựa trên điều này, chúng tôi lưu trữ các hình ảnh trong từ điển hoặc nếu chúng tôi thấy hình ảnh này là bản sao, chúng tôi chỉ cần đặt hình ảnh này vào danh sách trùng lặp có dạng nhị phân chỉ mục và hình ảnh. Sau đó, chúng tôi xóa danh sách hình ảnh này dựa trên giá trị chỉ mục của chúng
import hashlib import matplotlib.pyplot as plt from matplotlib.pyplot import imread import matplotlib.gridspec as gridspec import numpy as np import os def file_hash(filename): with open(filename,'rb') as f: return hashlib.md5(f.read()).hexdigest() os.getcwd() os.chdir(r'C:\photos') os.getcwd() files_list = os.listdir('.') print (len(files_list)) duplicates=[] hash_keys=dict() for index, filename in enumerate(os.listdir('.')): if os.path.isfile(filename): with open(filename, 'rb') as f: filehash = hashlib.md5(f.read()).hexdigest() if filehash not in hash_keys: hash_keys[filehash]=index else: duplicates.append((index,hash_keys[filehash])) print(duplicates) # for file_indexes in duplicates[:30]: # try: # plt.subplot(121),plt.imshow(imread(files_list[file_indexes[1]])) # plt.title(file_indexes[1]),plt.xticks([]),plt.yticks([]) # plt.subplot(122),plt.imshow(imread(files_list[file_indexes[0]])) # plt.title(str(file_indexes[0])+ 'duplicate'),plt.xticks([]),plt.yticks([]) # plt.show() # except OSError as e: # continue for index in duplicates: os.remove(files_list[index[0]])