Найти - Пользователи
Полная версия: Помогите с циклами
Начало » Python для новичков » Помогите с циклами
1 2
AnteFil
Есть вот такой код который берет все изображения в папке и сравнивает все между собой.
 from sentence_transformers import SentenceTransformer, util
from PIL import Image
import glob
import os
# Load the OpenAI CLIP Model
print('Loading CLIP Model...')
model = SentenceTransformer('clip-ViT-B-32')
# Next we compute the embeddings
# To encode an image, you can use the following code:
# from PIL import Image
# encoded_image = model.encode(Image.open(filepath))
image_names = list(glob.glob('./*.jpg'))
print("Images:", len(image_names))
encoded_image = model.encode([Image.open(filepath) for filepath in image_names], batch_size=128, convert_to_tensor=True, show_progress_bar=True)
# Now we run the clustering algorithm. This function compares images aganist 
# all other images and returns a list with the pairs that have the highest 
# cosine similarity score
processed_images = util.paraphrase_mining_embeddings(encoded_image)
NUM_SIMILAR_IMAGES = 10 
# =================
# DUPLICATES
# =================
print('Finding duplicate images...')
# Filter list for duplicates. Results are triplets (score, image_id1, image_id2) and is scorted in decreasing order
# A duplicate image will have a score of 1.00
# It may be 0.9999 due to lossy image compression (.jpg)
duplicates = [image for image in processed_images if image[0] >= 0.999]
# Output the top X duplicate images
for score, image_id1, image_id2 in duplicates[0:NUM_SIMILAR_IMAGES]:
    print("\nScore: {:.3f}%".format(score * 100))
    print(image_names[image_id1])
    print(image_names[image_id2])
# =================
# NEAR DUPLICATES
# =================
print('Finding near duplicate images...')
# Use a threshold parameter to identify two images as similar. By setting the threshold lower, 
# you will get larger clusters which have less similar images in it. Threshold 0 - 1.00
# A threshold of 1.00 means the two images are exactly the same. Since we are finding near 
# duplicate images, we can set it at 0.99 or any number 0 < X < 1.00.
threshold = 0.99
near_duplicates = [image for image in processed_images if image[0] < threshold]
for score, image_id1, image_id2 in near_duplicates[0:NUM_SIMILAR_IMAGES]:
    print("\nScore: {:.3f}%".format(score * 100))
    print(image_names[image_id1])
    print(image_names[image_id2])
Мне нужно что бы один файл сравнивался со всеми остальными. Мои познания не очень по этому я только с помощью гугл пишу. Нагуглил вот
Открываю пути к изображениям из файла
 filename = "massiv_img.txt"
# Открываем файл для чтения
with open(filename, "r") as f:
    # Считываем все строки из файла и сохраняем их в список
    image_names = [line.rstrip() for line in f]
Я создал список затем получаю изображение которое нужно сравнить
 query_image = Image.open('2323.jpg')
Дальше не могу ни чего на гуглить помогите пожалуйста
py.user.next
AnteFil
Есть вот такой код
Ну, говнокод какой-то есть.

AnteFil
Мои познания не очень по этому я только с помощью гугл пишу.
Понятно.

AnteFil
Дальше не могу ни чего на гуглить
Нагуглить что?

AnteFil
Мне нужно что бы один файл сравнивался со всеми остальными.
Ты сначала сформулируй задачу конкретно. Только после того, как задача поставлена точно, можно приступать к её решению.

AnteFil
я только с помощью гугл пишу
Хорошо. Продолжайте вести наблюдение в гугле.
Можешь ещё чат-гпт привлечь для разнообразия. Что то, что это ахинею выдаёт, которую надо чистить изрядно и переделывать на девяносто процентов.
AnteFil
py.user.next
Этот код берёт из папки все картинки и сравнивает друг с другом их, а мне нужно одну картинку со всеми сравнить. Тобиш в цикле перебрать все картинки и картинку1 с картинкой 2,3,4 и тд
AnteFil
Вот здесь затуп я хз как ещё обьяснить. Должно быть так.
Картинка №1 сравнивается с Картинкой №2 итог сходство 10%
Картинка №1 сравнивается с Картинкой №3 итог сходство 10%
Картинка №1 сравнивается с Картинкой №4 итог сходство 10%
Картинка №1 сравнивается с Картинкой №5 итог сходство 10%
Картинка №1 сравнивается с Картинкой №6 итог сходство 10%

………….
Вот так должно быть
xam1816
выложи 5 картинок сюда с которыми работаешь
py.user.next
AnteFil
Этот код берёт из папки все картинки и сравнивает друг с другом их
Как ты понял, что этот код работает вообще и работает правильно? Я вот об этом говорю.

AnteFil
Вот здесь затуп я хз как ещё обьяснить. Должно быть так.
Картинка №1 сравнивается с Картинкой №2 итог сходство 10%
Картинка №1 сравнивается с Картинкой №3 итог сходство 10%
Сложно что-либо посоветовать тебе, это надо за тебя писать всё, ты же сам только в Гугле ищешь и всё.
Ну что я тебе скажу? Ну, сделай функцию перебора путей картинок. Ну, сделай ещё функцию сравнения двух картинок по содержимому. Ну, сделай ещё третью функцию, которая вызывает функцию перебора путей картинок и каждый путь вместе с путём к первой картинке передаёт в функцию сравнения двух картинок по содержимому. Ты же это всё не сделаешь сам, а в Гугле этого нет.

Так что дело вот в этом. Сбрось картинки, xam1816 потренируется из интереса.
AnteFil
xam1816
выложи сюда с которыми работаешь
https://yandex.ru/images/search?from=tabbar&lr=1091&text=%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B8
Любые 5 10, 20, 100, 500 картинок
py.user.next
Как ты понял, что этот код работает вообще и работает правильно? Я вот об этом говорю.
Я работал с ним код рабочий
AnteFil
Блин почему PYTHON такой трудный. Не понятно вообще где цикл где нет его. На php всё просто и понятно.
На php всё решаеться в две строчки

 foreach ($array as $value) {
    // code to be executed for each $value
}
С этим долбаным PYTHON мучаюсь уже 4 день
AnteFil
Написал вот так
 filename = "massiv_img.txt"
# Открываем файл для чтения
with open(filename, "r") as f:
    # Считываем все строки из файла и сохраняем их в список
    image_1 = [line.rstrip() for line in f]
 
odin_image = Image.open('2323.jpg')
 
for item in image_1:
    image_names = [odin_image, item]
    ncoded_image = model.encode([Image.open(filepath) for filepath in image_names], batch_size=128, convert_to_tensor=True, show_progress_bar=True)
    processed_images = util.paraphrase_mining_embeddings(ncoded_image)
    NUM_SIMILAR_IMAGES = 10
........... дальше код ...........
Падает ошибка
 File "img.py", line 28, in <module>
    ncoded_image = model.encode([Image.open(filepath) for filepath in image_names], batch_size=128, convert_to_tensor=True, show_progress_bar=True)
  File "img.py", line 28, in <listcomp>
    ncoded_image = model.encode([Image.open(filepath) for filepath in image_names], batch_size=128, convert_to_tensor=True, show_progress_bar=True)
  File "python3.7/site-packages/PIL/Image.py", line 3245, in open
    prefix = fp.read(16)
py.user.next
AnteFil
Блин почему PYTHON такой трудный. Не понятно вообще где цикл где нет его. На php всё просто и понятно.
На php всё решаеться в две строчки
Питон лучше, чем PHP.
В нормальном коде тоже всё красиво выглядит. Просто то, что ты скачал через Гугл, писал какой-то даун зарубежный. Работать-то оно работает, но это не значит, что писал это программист. Так что ты по его коду и делаешь выводы о питоне.

AnteFil
Падает ошибка
Так ты пытаешься уже открытую картинку открыть снова.

AnteFil
  
odin_image = Image.open('2323.jpg')
Вот здесь тебе надо путь к картинке записать, а не открывание картинки. Может быть, тогда сработает, если ты говоришь, что код работает вообще.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB