alymbeks's picture
add logger
9cac0ea
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()