'''

'''

import os
import cv2
import argparse
import shutil
from pathlib import Path
from tqdm import tqdm

from animeinsseg import AnimeInsSeg

# 设置模型路径
ckpt = r'models/AnimeInstanceSegmentation/rtmdetl_e60.ckpt'
mask_thres = 0.3
instance_thres = 0.3
refine_kwargs = {'refine_method': 'refinenet_isnet'}  # 如果不使用 refinenet,设置为 None
# refine_kwargs = None

# 初始化模型
net = AnimeInsSeg(ckpt, mask_thr=mask_thres, refine_kwargs=refine_kwargs)

def has_instances(image_path):
    # 读取图像
    img = cv2.imread(image_path)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    
    # 推理
    instances = net.infer(
        img,
        output_type='numpy',
        pred_score_thr=instance_thres
    )

    # 如果没有检测到对象,返回 False
    if instances.bboxes is None:
        return False
    return True

def copy_images_without_instances(input_path, output_dir):
    input_path = Path(input_path)
    output_dir = Path(output_dir)

    if not output_dir.exists():
        output_dir.mkdir(parents=True)

    image_paths = list(input_path.rglob("*.png")) + list(input_path.rglob("*.jpg"))
    for image_path in tqdm(image_paths, desc="Processing images"):
        if not has_instances(image_path):
            # 拷贝不包含实例的图片到目标文件夹
            shutil.copy(image_path, output_dir / image_path.name)

def main():
    parser = argparse.ArgumentParser(description="Copy images without instances to a target directory")
    parser.add_argument("input_path", type=str, help="Path to the input image or folder")
    parser.add_argument("output_dir", type=str, help="Path to the output directory")
    args = parser.parse_args()

    copy_images_without_instances(args.input_path, args.output_dir)

if __name__ == "__main__":
    main()