Budget: 50 USD Deadline: 1 day
import os
import imagehash
from PIL import Image, ExifTags
import cv2
import requests
from io import BytesIO
# Путь к директории с изображениями
directory = 'path/to/your/images'
# Функция для получения хеша изображения
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)