Бюджет: 50 USD Термін: 1 день
import os
import imagehash
from PIL import Image, ExifTags
import cv2
import requests
from io import BytesIO
# Шлях до каталогу з зображеннями
directory = 'шлях/до/ваших/зображень'
# Функція для отримання хешу зображення
def get_image_hash(image_path):
image = Image.open(image_path)
return imagehash.average_hash(image)
# Пошук дублікатів
def find_duplicates(image_paths):
hashes = {}
duplicates = []
for path in image_paths:
img_hash = get_image_hash(path)
if img_hash in hashes:
duplicates.append((hashes[img_hash], path))
else:
hashes[img_hash] = path
return duplicates
# Перевірка наявності водяних знаків
def check_watermark(image_path):
image = cv2.imread(image_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 100, 200)
return cv2.countNonZero(edges) > 1000 # Простий евристичний метод
# Перевірка метатегів
def check_metadata(image_path):
image = Image.open(image_path)
try:
exif = {ExifTags.TAGS[k]: v for k, v in image._getexif().items() if k in ExifTags.TAGS}
return exif
except AttributeError:
return {}
# Основна логіка
image_paths = [os.path.join(directory, f) for f in os.listdir(directory) if f.endswith(('jpg', 'jpeg', 'png'))]
# 1. Перевірка на дублікати
duplicates = find_duplicates(image_paths)
print("Дублікати:", duplicates)
# 2. Перевірка на розміщення на фотостоках (псевдокод, потребує API)
# def check_stock_photo(image_path):
# response = requests.post('https://api.example.com/search', files={'file': open(image_path, 'rb')})
# return response.json()
# stock_photos = [check_stock_photo(path) for path in image_paths]
# 3. Перевірка на водяні знаки
watermarked = [path for path in image_paths if check_watermark(path)]
print("З водяними знаками:", watermarked)
# 4. Перевірка метатегів
metadata_info = {path: check_metadata(path) for path in image_paths}
print("Метадані:", metadata_info)