Уведомления

Группа в Telegram: @pythonsu

#1 Май 7, 2023 08:19:55

AnteFil
Зарегистрирован: 2023-05-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с циклами

Есть вот такой код который берет все изображения в папке и сравнивает все между собой.

 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')
Дальше не могу ни чего на гуглить помогите пожалуйста

Офлайн

#2 Май 7, 2023 14:33:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Помогите с циклами

AnteFil
Есть вот такой код
Ну, говнокод какой-то есть.

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

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

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

AnteFil
я только с помощью гугл пишу
Хорошо. Продолжайте вести наблюдение в гугле.
Можешь ещё чат-гпт привлечь для разнообразия. Что то, что это ахинею выдаёт, которую надо чистить изрядно и переделывать на девяносто процентов.



Отредактировано py.user.next (Май 7, 2023 14:35:12)

Офлайн

#3 Май 7, 2023 17:17:35

AnteFil
Зарегистрирован: 2023-05-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с циклами

py.user.next
Этот код берёт из папки все картинки и сравнивает друг с другом их, а мне нужно одну картинку со всеми сравнить. Тобиш в цикле перебрать все картинки и картинку1 с картинкой 2,3,4 и тд

Офлайн

#4 Май 7, 2023 17:58:49

AnteFil
Зарегистрирован: 2023-05-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с циклами

Вот здесь затуп я хз как ещё обьяснить. Должно быть так.
Картинка №1 сравнивается с Картинкой №2 итог сходство 10%
Картинка №1 сравнивается с Картинкой №3 итог сходство 10%
Картинка №1 сравнивается с Картинкой №4 итог сходство 10%
Картинка №1 сравнивается с Картинкой №5 итог сходство 10%
Картинка №1 сравнивается с Картинкой №6 итог сходство 10%

………….
Вот так должно быть

Офлайн

#5 Май 7, 2023 19:40:48

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1372
Репутация: +  122  -
Профиль   Отправить e-mail  

Помогите с циклами

выложи 5 картинок сюда с которыми работаешь

Офлайн

#6 Май 8, 2023 01:23:04

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Помогите с циклами

AnteFil
Этот код берёт из папки все картинки и сравнивает друг с другом их
Как ты понял, что этот код работает вообще и работает правильно? Я вот об этом говорю.

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

Так что дело вот в этом. Сбрось картинки, xam1816 потренируется из интереса.



Отредактировано py.user.next (Май 8, 2023 01:24:41)

Офлайн

#7 Май 8, 2023 09:17:59

AnteFil
Зарегистрирован: 2023-05-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с циклами

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 (Май 8, 2023 09:18:41)

Офлайн

#8 Май 8, 2023 09:38:20

AnteFil
Зарегистрирован: 2023-05-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с циклами

Блин почему PYTHON такой трудный. Не понятно вообще где цикл где нет его. На php всё просто и понятно.
На php всё решаеться в две строчки

 foreach ($array as $value) {
    // code to be executed for each $value
}
С этим долбаным PYTHON мучаюсь уже 4 день

Офлайн

#9 Май 8, 2023 10:15:12

AnteFil
Зарегистрирован: 2023-05-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с циклами

Написал вот так

 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)

Офлайн

#10 Май 8, 2023 12:06:20

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Помогите с циклами

AnteFil
Блин почему PYTHON такой трудный. Не понятно вообще где цикл где нет его. На php всё просто и понятно.
На php всё решаеться в две строчки
Питон лучше, чем PHP.
В нормальном коде тоже всё красиво выглядит. Просто то, что ты скачал через Гугл, писал какой-то даун зарубежный. Работать-то оно работает, но это не значит, что писал это программист. Так что ты по его коду и делаешь выводы о питоне.

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

AnteFil
  
odin_image = Image.open('2323.jpg')
Вот здесь тебе надо путь к картинке записать, а не открывание картинки. Может быть, тогда сработает, если ты говоришь, что код работает вообще.



Отредактировано py.user.next (Май 8, 2023 12:07:43)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version