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 нет такого фильтра, однако есть магические фильтры. В любом случае, советую полностью ознакомиться с документацией.