Budżet: 50 USD Termin: 1 dzień
import os
import imagehash
from PIL import Image, ExifTags
import cv2
import requests
from io import BytesIO
# Ścieżka do katalogu z obrazami
directory = 'ścieżka/do/twoich/obrazów'
# Funkcja do uzyskiwania skrótu obrazu
def get_image_hash(image_path):
image = Image.open(image_path)
return imagehash.average_hash(image)
# Sprawdzanie duplikatów
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
# Sprawdzanie obecności znaków wodnych
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 # Prosta metoda heurystyczna
# Sprawdzanie metadanych
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 {}
# Główna logika
image_paths = [os.path.join(directory, f) for f in os.listdir(directory) if f.endswith(('jpg', 'jpeg', 'png'))]
# 1. Sprawdzanie duplikatów
duplicates = find_duplicates(image_paths)
print("Duplikaty:", duplicates)
# 2. Sprawdzanie umieszczenia na stronach ze zdjęciami (pseudokod, wymaga 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. Sprawdzanie znaków wodnych
watermarked = [path for path in image_paths if check_watermark(path)]
print("Z znakami wodnymi:", watermarked)
# 4. Sprawdzanie metadanych
metadata_info = {path: check_metadata(path) for path in image_paths}
print("Metadane:", metadata_info)