Files
AnyImage/docs/development.md
nan f42cba1932 Add image extraction functionality with background removal
- Implemented ExtractImageRegion operator for extracting image regions using box or lasso selection.
- Added RemoveImageRegionBackground job for background removal from selected image regions.
- Created utility functions for polygon bounds, selection canvas creation, and applying selection masks.
- Integrated image processing using PIL and numpy for efficient pixel manipulation.
- Enhanced user experience with modal drawing and status updates during extraction.
2026-08-22 15:47:34 +08:00

4.5 KiB
Raw Blame History

程序设计、开发与许可证

程序设计

AnyImage 分为 Blender 交互层、BlendJob Runtime 和 Job Server 计算层。

flowchart LR
    UI["菜单 / Panel"] --> Operator["Feature Operator"]
    Operator --> Runtime["JobRuntime"]
    Runtime --> Job["Server Job"]
    Job --> Files["Job Directory"]
    Files --> Response["Operator Response"]
    Response --> Scene["Blender Scene"]

Blender 交互层管理 UI、RNA 状态、任务参数和结果导入。Runtime 管理 Environment、Server、队列、进度与取消。Server Job 组合媒体、模型、几何和输出模块。完整运行设计见 Job Server。

代码组织

位置 内容
__init__.py Blender 类型、菜单与 Runtime 注册
clipboard_image/ 剪贴板读取、上下文粘贴与快捷键
menu.py、panel.py 用户入口
preferences.py、properties.py 扩展配置与 Scene 状态
runtime.py JobRuntime 配置
operators/ Blender 功能与结果导入
server/jobs/ Server 工作流
server/models/ ONNX 模型适配
server/geometry/ 纯数据几何处理
server/outputs/ 文件序列化
server/media/ 媒体输入
assets/O_AnyImage.blend Geometry Nodes 与材质资产

Mesh Plane、Depth Plane、Surface、Background 和 Balloon 按功能组织。一个功能的入口、请求和 Blender 回写放在一起;跨功能的图片、材质和参数处理放在 operators/common.py、operators/image.py 与 operators/material.py。

Server 的模型模块返回 Prediction,几何模块处理数组与网格,输出模块写文件。Blender 数据只在 Operator Response 的主线程阶段创建。

Image Box、Lasso 与 Perspective 位于 operators/image_extract/ 功能包。模块职责、交互状态、像素管线、背景清理和 Empty 定位见 Image 工具技术实现。

项目结构

.
├── README.md
├── docs/
├── pack.py
├── sync_models.py
├── src/anyimage/
│   ├── blender_manifest.toml
│   ├── runtime.py
│   ├── menu.py
│   ├── panel.py
│   ├── preferences.py
│   ├── properties.py
│   ├── clipboard_image/
│   ├── operators/
│   ├── server/
│   ├── assets/
│   └── wheels/
├── tests/
└── tools/

开发命令

在项目根目录使用 Git Bash:

uv sync
uv run pytest
uv run pytest tests/test_addon.py tests/test_manifest.py tests/test_pack.py -v
uv run python pack.py

pack.py 为 Windows x64、macOS Apple Silicon 与 Linux x64 构建扩展 ZIP 到 dist/。依赖、wheel 或 Manifest 改变后,应同步检查 pyproject.toml、uv.lock、blender_manifest.toml 与打包测试。

CI 分为三条流程:

  • test.yml:在 push、Pull Request 与手动触发时运行测试
  • build.yml:响应 v* tag,测试后构建并上传 Release
  • docs.yml:文档变化后构建并部署站点

文档

本地预览和严格构建:

uv run --only-group docs mkdocs serve
uv run --only-group docs mkdocs build

版本化发布可使用 Mike:

uv run --only-group docs mike deploy <version> -p
uv run --only-group docs mike set-default <version> -p

自动部署将 MkDocs 站点发布到专用 Cloudflare Worker。仓库需要配置 CLOUDFLARE_ACCOUNT_ID、CLOUDFLARE_API_TOKEN 和 CLOUDFLARE_WORKER_NAME。Worker 路由对应 docs.omoolab.xyz/anyimage/*。

资产构建与验证

tools/ 中的资产脚本依赖 bpy,应由 Blender 执行:

BLENDER_BIN="/c/Program Files/Blender Foundation/Blender 4.5/blender.exe"

"$BLENDER_BIN" --background --python tools/build_geometry_nodes_asset.py
"$BLENDER_BIN" --background --python tools/validate_depth_plane_asset.py
"$BLENDER_BIN" --background --python tools/validate_mesh_plane_asset.py
"$BLENDER_BIN" --background --python tools/validate_geometry_nodes_asset.py
"$BLENDER_BIN" --background --python tools/validate_balloon_asset.py
"$BLENDER_BIN" --background --python tools/validate_moge_depth_plane.py
"$BLENDER_BIN" --background --python tools/validate_moge_surface.py

修改节点组、材质组或资产接口后,运行对应验证脚本和完整测试。Python、文档或打包逻辑变化无需重建 .blend 资产。

上游与许可证

  • Depth Anything 3 代码采用 Apache 2.0
  • BEN2 ONNX 模型采用其仓库声明的 Apache 2.0 License
  • AnyImage Extension 代码采用 GPL-3.0-or-later
  • 模型权重许可证由所选 Hugging Face 模型仓库决定