美学自动裁切,基于 PyTorch 与人脸检测,支持任意比例裁切。
来源与致谢:本项目在 lih627/autocrop 的基础上改造与工程化,使用方式与示例可参考其 Demo 文档:https://github.com/lih627/autocrop?tab=readme-ov-file#Demo
- Python
3.12(Ubuntu 22.04) - PyTorch
2.5.1(CUDA12.4) - GPU 可选;无 GPU 时自动编译 CPU 版本的 C++ 扩展
- 安装 PyTorch(CUDA 12.4):
pip install torch==2.5.1+cu124 torchvision==0.20.1+cu124 --index-url https://download.pytorch.org/whl/cu124- CPU 仅需:
pip install torch==2.5.1 torchvision==0.20.1
- 编译并安装本项目:
python setup.py install
- 额外依赖:
pip install opencv-python
提示:setup.py 会根据 torch.cuda.is_available() 自动编译 CUDA/CPU 扩展,源码位于 autocrop/model/roi_align 与 autocrop/model/rod_align。
- GPU 版本(CUDA 12.4):
docker compose up -d- 访问
http://localhost:6000/crop - 容器镜像:
pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel
- CPU 版本:
docker compose -f docker-compose.cpu.yml up -d- 访问
http://localhost:6000/crop - 容器镜像:
pytorch/pytorch:2.5.1-cpu
说明:启动时会自动将仓库根目录下的 *.pth 权重复制至容器 /root/.cache/torch/hub/checkpoints,并安装依赖与启动 uvicorn。端口映射为宿主机 6000 → 容器 6006(见 docker-compose.yml 与 docker-compose.cpu.yml)。
网络与依赖安装:
- Compose 采用
pip多镜像级联(清华 → 阿里云 → 豆瓣)安装依赖,避免网络波动。 - 如网络受限,可在仓库根目录创建
wheels/并放入所需.whl包,Compose 会自动离线安装:pip install --no-index --find-links /wheels -r requirements.txt。 - 大模型权重(Git LFS):Compose 会在容器内尝试
apt-get install git git-lfs && git lfs pull;如受限,先在宿主机执行git lfs install && git lfs pull后再启动。
- 将以下权重文件移动到
/root/.cache/torch/hub/checkpoints:WIDERFace_DSFD_RES152.pth(人脸检测模型)mobilenet_0.625_... .pth(裁切评分模型)shufflenet_0.615_... .pth(裁切评分模型)
- 示例命令:
sudo mkdir -p /root/.cache/torch/hub/checkpointssudo cp WIDERFace_DSFD_RES152.pth /root/.cache/torch/hub/checkpoints/sudo cp mobilenet_*.pth /root/.cache/torch/hub/checkpoints/sudo cp shufflenet_*.pth /root/.cache/torch/hub/checkpoints/
说明:裁剪模型通过 torch.hub.load_state_dict_from_url 自动使用该缓存目录(见 autocrop/model/cropping_model.py:117-131);提前放置权重可避免在线下载与网络依赖。
-
Python 调用:
from autocrop import cropperautocropper = cropper.AutoCropper(model='mobilenetv2', cuda=True, use_face_detector=True)- 读入
BGR图并转RGB后,调用autocropper.crop(...)即可返回[xmin, ymin, xmax, ymax]
-
API 服务:
python apiServer.py- POST
/crop,参数:image_base64、ratio(如16:9、1:1或circular)
示例接口实现参考 apiServer.py:105-200;裁剪核心逻辑见 autocrop/cropper.py:124-169。
- 运行依赖(见
setup.py:90-96与environment.yml):torch、torchvision、numpy、opencv-python、face-detection- API:
fastapi、uvicorn、pydantic
- 编译要求:
- CPU:需要 C++ 编译环境(gcc/clang)
- GPU:需要 CUDA 12.4(
nvcc、CUDA_HOME),自动构建roi_align_api与rod_align_api
autocrop/核心库与模型、算子实现apiServer.pyFastAPI 服务端示例anyratio.py、cropImage.py简单脚本示例setup.py构建与依赖声明
- 参考与复现自 GAIC 与 DSFD,上游许可请见其仓库。