from controlnet_aux import OpenposeDetector | |
from PIL import Image | |
import torch | |
def generate_openpose( | |
input_image_path: str, | |
output_image_path: str = None, | |
device: str = "cuda" if torch.cuda.is_available() else "cpu", | |
show_result: bool = False | |
) -> Image.Image: | |
""" | |
Генерирует OpenPose карту позы из входного изображения. | |
Параметры: | |
input_image_path (str): Путь к исходному изображению | |
output_image_path (str, optional): Путь для сохранения результата. Если None - не сохраняется. | |
device (str): Устройство для обработки ('cuda' или 'cpu') | |
show_result (bool): Показывать ли результат сразу | |
Возвращает: | |
Image.Image: Изображение с OpenPose картой позы | |
""" | |
openpose = OpenposeDetector.from_pretrained("lllyasviel/ControlNet").to(device) | |
image = Image.open(input_image_path).convert("RGB") | |
openpose_map = openpose(image) | |
if output_image_path: | |
openpose_map.save(output_image_path) | |
if show_result: | |
openpose_map.show() | |
return image | |