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() | |