Spaces:
Runtime error
Runtime error
from sentence_transformers import SentenceTransformer, util | |
from PIL import Image | |
import pickle | |
import os | |
import gradio as gr | |
import zipfile | |
import logging | |
import datetime | |
logger = logging.getLogger(__name__) | |
# Load CLIP model | |
text_model = SentenceTransformer('clip-ViT-B-32-multilingual-v1') | |
image_model = SentenceTransformer('clip-ViT-B-32') | |
image_model.parallel_tokenization = False | |
img_folder = '.\\photos\\' | |
if not os.path.exists(img_folder) or len(os.listdir(img_folder)) == 0: | |
os.makedirs(img_folder, exist_ok=True) | |
photo_filename = 'unsplash-25k-photos.zip' | |
if not os.path.exists(photo_filename): # Download dataset if does not exist | |
util.http_get('http://sbert.net/datasets/' + | |
photo_filename, photo_filename) | |
# Extract all images | |
with zipfile.ZipFile(photo_filename, 'r') as zf: | |
for member in zf.infolist(): | |
zf.extract(member, img_folder) | |
emb_filename = ".\\unsplash-25k-photos-embeddings.pkl" | |
if not os.path.exists(emb_filename): | |
util.http_get( | |
'http://sbert.net/datasets/unsplash-25k-photos-embeddings.pkl', emb_filename) | |
with open(emb_filename, 'rb') as fIn: | |
img_names, img_emb = pickle.load(fIn) | |
img_folder = ".\\photos\\" | |
duplicates = util.paraphrase_mining_embeddings(img_emb) | |
def search_duplicates(threshold=100): | |
current_time = datetime.datetime.now() | |
logger.warning(f"{current_time} : {threshold}") | |
threshold /= 100 | |
near_duplicates = [entry for entry in duplicates if entry[0] <= threshold] | |
images = [] | |
for score, idx1, idx2 in near_duplicates[0:5]: | |
img1_path = os.path.join(img_folder, img_names[idx1]) | |
img2_path = os.path.join(img_folder, img_names[idx2]) | |
img1 = Image.open(img1_path) | |
img2 = Image.open(img2_path) | |
images.append((img1, "")) | |
images.append((img2, score)) | |
return images | |
description = ''' | |
Приложение для поиска одинаковых изображений - это мощный инструмент, который помогает пользователям выявлять одинаковые изображения и, например, управлять ими. | |
Это приложение использует передовые алгоритмы компьютерного зрения и машинного обучения для обнаружения похожих или идентичных изображений и представляет их в понятном и организованном виде. | |
Пользователи могут загружать изображения в приложение и быстро определять похожие изображения либо дупликаты, которые могут существовать в их коллекции. | |
Приложение может потенциально предоставить инструменты для управления дубликатами, например, возможность их удаления или объединения. | |
Приложение для поиска дубликатов изображений идеально подходит для тех, кому необходимо управлять большой коллекцией изображений, например, для фотографов, графических дизайнеров или менеджеров социальных сетей. | |
Выявляя дубликаты изображений и управляя ими, пользователи могут сэкономить время и оптимизировать свои рабочие процессы. | |
Благодаря удобному интерфейсу и мощным алгоритмам приложение для поиска дубликатов изображений является отличным примером того, как ИИ может быть использован для повышения производительности и оптимизации рабочих процессов. | |
''' | |
iface_duplicates = gr.Interface( | |
title="Поиск похожих изображений - d8a.ai", | |
description=description, | |
allow_flagging="never", | |
fn=search_duplicates, | |
inputs=[gr.inputs.Slider(91, 100, step=1, default=100, | |
label="Процент вероятности")], | |
outputs=gr.Gallery( | |
label="Найденные похожие изображения", elem_id="gallery" | |
).style(grid=[2], height="auto") | |
) | |
iface_duplicates.launch() | |