Tất cả chúng ta đôi khi phải đối mặt với vấn đề này hay vấn đề khác mà tôi sẽ thảo luận dưới đây. Chúng tôi có hàng ngàn hình ảnh, một số trong số đó bị trùng lặp, tức là có cùng kích thước, cùng hình ảnh nhưng khác tên. Vì vậy, họ chiếm không gian. Bây giờ làm thế nào để giải quyết vấn đề này của bạn? Những hình ảnh này chiếm rất nhiều không gian quý giá của bạn. Tôi có một giải pháp cho vấn đề này của bạn. Hãy xem làm thế nào chúng ta có thể. Ta viết chương trình Python để xóa các ảnh có cùng kích thước, cùng ảnh nhưng khác tên.

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
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]])