ImportError: cannot import name 'ContentTypes' from 'aiogram.filters'

ошибка:

Traceback (most recent call last):
  File "D:\FORCHELUDS\SD_deepnude-main\bot.py", line 10, in <module>
    from aiogram.filters import Command, ContentTypes
ImportError: cannot import name 'ContentTypes' from 'aiogram.filters' (C:\Users\polpo\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\filters\__init__.py)

мой код

import base64
import httpx
import cv2
import torch
import numpy as np
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2 import model_zoo
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command, ContentTypes
import asyncio

# Вставьте ваш токен сюда
API_TOKEN = "***********************"

# Инициализация Telegram-бота
bot = Bot(token=API_TOKEN)
dp = Dispatcher()

# Инициализация модели Detectron2
def initialize_model():
    cfg = get_cfg()
    cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
    cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5  # Порог вероятности
    cfg.MODEL.ROI_HEADS.NUM_CLASSES = 80  # Вернемся к оригинальным 80 классам
    cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")
    cfg.MODEL.DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
    
    predictor = DefaultPredictor(cfg)
    return predictor

predictor = initialize_model()

# Обработка изображения
def preprocess(image: bytes):
    nparr = np.frombuffer(image, np.uint8)
    img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
    
    # Получение предсказаний от модели
    outputs = predictor(img)
    
    # Извлечение маски
    masks = outputs["instances"].pred_masks.to("cpu").numpy()
    
    # Объединение всех масок в одну
    combined_mask = np.zeros(masks.shape[1:], dtype=np.uint8)
    for mask in masks:
        combined_mask |= mask
    
    return combined_mask

# Функция inpaint
async def inpaint(image: bytes, mask: np.ndarray) -> bytes:
    image_base64 = base64.b64encode(image).decode()
    mask_base64 = base64.b64encode(mask).decode()

    async with httpx.AsyncClient(timeout=None) as client:
        r = await client.post(
            "http://localhost:7861/sdapi/v1/img2img",
            json={
                "init_images": [image_base64],
                "resize_mode": 1,
                "denoising_strength": 0.5,
                "mask": mask_base64,
                "mask_blur": 5,
                "prompt": "A realistic, fully nude, athletic woman with well-proportioned and natural-looking features.",
                "negative_prompt": "Avoid unrealistic or unnatural distortions.",
                "steps": 50,
                "model": r"D:\\ssffss\\stable-diffusion-webui-master\\models\\Stable-diffusion\\majicmixRealistic_v7.safetensors",
                "sampler_index": "DDIM",
                "inpaint_full_res": True,
            }
        )
    r.raise_for_status()
    
    result_image = r.json()["images"][0]
    return base64.b64decode(result_image)

# Запуск бота
async def on_startup(dp):
    print('Bot is starting...')

async def on_shutdown(dp):
    print('Bot is stopping...')

async def main():
    # Обработка сообщений и команд
    dp.message.register(send_welcome, Command(commands="start"))
    dp.message.register(handle_photo, ContentTypes(types.Photo))

    # Запуск бота
    await dp.start_polling(bot)

async def send_welcome(message: types.Message):
    await message.reply("Привет! Я бот.", parse_mode='HTML')

async def handle_photo(message: types.Message):
    # Получение фото из сообщения
    photo = message.photo[-1]
    file = await photo.download()
    image_bytes = file.read()

    # Обработка изображения
    mask = preprocess(image_bytes)

    # Выполнение inpaint
    inpainted_image = await inpaint(image_bytes, mask)

    # Отправка обработанного изображения
    await message.reply_photo(photo=inpainted_image, caption="Вот ваш обработанный снимок!", parse_mode='HTML')

if __name__ == "__main__":
    asyncio.run(main())

Ответы (1 шт):

Автор решения: wakaree

В aiogram 3.x нет такого фильтра, однако есть магические фильтры. В любом случае, советую полностью ознакомиться с документацией.

→ Ссылка