Pull to refresh
0
0
Send message

Сравнил я две модели Florence-2-large и moondream2 .
Florence-2 довольно таки сильно проигрывает в создании большого описания изображения. moondream2 более органично это делает прям хорошо, а с выходом новой модели от 2025 года года вообще красота.

Вроде как да, но я все готовлю на компе а потом уже на сток заливаю. Например в StockSubmitter импортирую csv файл предварительно там открыв папку с всеми картинками которые были проанализированы. Ну это я экспериментировал как импорт работает если в IMStoker получить csv для того, чтобы свою программку сделать

Вот мой код c Florence-2-large

при запуске скрипта он попросит в терминале вставить скопированный путь к картинкам и потом ещё указать имя csv файла, только потом файл будет без расширения csv, но excel откроет, создаст он его в корне пакет там же где и будет сам файл скрита питона.
Может кто ума даст этому коду

import os
import csv
import torch
from PIL import Image
from transformers import AutoProcessor, AutoModelForCausalLM

def analyze_image(image_path, model, processor):
    """
    Анализирует изображение с использованием Florence-2-large.
    """
    image = Image.open(image_path)
    prompt = "<OD>"

    inputs = processor(text=prompt, images=image, return_tensors="pt").to(device)

    generated_ids = model.generate(
        input_ids=inputs["input_ids"],
        pixel_values=inputs["pixel_values"],
        max_new_tokens=4096,
        num_beams=3,
        do_sample=False
    )
    generated_text = processor.batch_decode(generated_ids, skip_special_tokens=False)[0]

    parsed_answer = processor.post_process_generation(generated_text, task="<OD>", image_size=(image.width, image.height))
    
    # Разделяем описание и ключевые слова, если они в одном тексте
    if "\n" in parsed_answer:
        description, keywords = parsed_answer.split("\n", 1)
    else:
        description, keywords = parsed_answer, ""
    
    return description, keywords

def generate_metadata(input_folder, output_csv, model, processor):
    """
    Анализирует изображения в папке и создает CSV файл с метаданными.
    """
    supported_formats = (".jpeg", ".jpg", ".png")
    image_files = [f for f in os.listdir(input_folder) if f.lower().endswith(supported_formats)]

    if not image_files:
        print("Нет изображений в указанной папке.")
        return

    with open(output_csv, mode='w', newline='', encoding='utf-8') as csvfile:
        csvwriter = csv.writer(csvfile)

        for image_file in image_files:
            image_path = os.path.join(input_folder, image_file)
            try:
                description, keywords = analyze_image(image_path, model, processor)

                csvwriter.writerow([
                    image_file,
                    description,
                    f'"{description}"',
                    f'"{keywords}"'
                ])
                print(f"Обработано: {image_file}")
            except Exception as e:
                print(f"Ошибка при обработке {image_file}: {e}")

if __name__ == "__main__":
    device = "cuda:0" if torch.cuda.is_available() else "cpu"
    model = AutoModelForCausalLM.from_pretrained("microsoft/Florence-2-large", trust_remote_code=True).to(device)
    processor = AutoProcessor.from_pretrained("microsoft/Florence-2-large", trust_remote_code=True)

    input_folder = input("Введите путь к папке с изображениями: ").strip()
    output_csv = input("Введите имя выходного CSV файла (например, output.csv): ").strip()

    generate_metadata(input_folder, output_csv, model, processor)

я смог подключиться к Florence-2-large, она возвращает данные в виде сложной структуры, которая включает метки объектов (например, bboxes, labels) и другие подробности, такие как координаты, а не просто текстовые описания и ключевые слова. Уже пол дня мучаюсь как получить все это в тексте.

Попробую ещё ваш вариант с moondream2

а как установить локально модель Florence-2-large и подкллючиться на напитоне?
Я посмотрел по ссылке и ни чего не понял

Спасибо. Буду экспериментировать.

Добрый день. Подскажите, пожалуйста, мне вот тоже самое надо сделать, но только, чтобы просто из одной папки картинки брались и атрибутированные с записанными метаданными клались в другую папку, это что надо поправить в коде? У вас ключевание идет по называнию папок, а мне надо просто описание то, что на картинке и ключевые слова.

Information

Rating
Does not participate
Registered
Activity