| | import numpy as np |
| | import pandas as pd |
| | import torch |
| | from PIL import Image |
| | from skimage.feature import graycomatrix, graycoprops |
| | from torchvision import transforms |
| |
|
| | |
| | model = torch.jit.load("SuSy.pt") |
| |
|
| | |
| | image = Image.open("midjourney-images-example.jpg") |
| |
|
| | |
| | top_k_patches = 5 |
| | patch_size = 224 |
| |
|
| | |
| | width, height = image.size |
| |
|
| | |
| | num_patches_x = width // patch_size |
| | num_patches_y = height // patch_size |
| |
|
| | |
| | patches = np.zeros((num_patches_x * num_patches_y, patch_size, patch_size, 3), dtype=np.uint8) |
| | for i in range(num_patches_x): |
| | for j in range(num_patches_y): |
| | x = i * patch_size |
| | y = j * patch_size |
| | patch = image.crop((x, y, x + patch_size, y + patch_size)) |
| | patches[i * num_patches_y + j] = np.array(patch) |
| |
|
| | |
| | dissimilarity_scores = [] |
| | for patch in patches: |
| | transform_patch = transforms.Compose([transforms.PILToTensor(), transforms.Grayscale()]) |
| | grayscale_patch = transform_patch(Image.fromarray(patch)).squeeze(0) |
| | glcm = graycomatrix(grayscale_patch, [5], [0], 256, symmetric=True, normed=True) |
| | dissimilarity_scores.append(graycoprops(glcm, "contrast")[0, 0]) |
| |
|
| | |
| | sorted_indices = np.argsort(dissimilarity_scores)[::-1] |
| |
|
| | |
| | top_patches = patches[sorted_indices[:top_k_patches]] |
| | top_patches = torch.from_numpy(np.transpose(top_patches, (0, 3, 1, 2))) / 255.0 |
| |
|
| | |
| | model.eval() |
| | with torch.no_grad(): |
| | preds = model(top_patches) |
| |
|
| | |
| | classes = ['authentic', 'dalle-3-images', 'diffusiondb', 'midjourney-images', 'midjourney_tti', 'realisticSDXL'] |
| | result = pd.DataFrame(preds.numpy(), columns=classes) |
| | print(result) |