Add image perspective editing and related tools

- Implemented the Image Perspective tool for editing image corners in Blender.
- Created a new operator `EditImagePerspective` to handle the perspective transformation.
- Added a preview feature for the perspective adjustment.
- Introduced the `ImagePolylineTool` for editing image masks with polylines.
- Developed backend support for Real-ESRGAN model inference, including ONNX integration.
- Added functionality for image masking and background removal.
- Created unit tests for the Real-ESRGAN ONNX model to ensure correct preprocessing and inference.
This commit is contained in:
2026-08-22 22:17:10 +08:00
parent f42cba1932
commit 1613bd3194
45 changed files with 1802 additions and 1133 deletions

View File

@@ -68,14 +68,14 @@ class PackTest(unittest.TestCase):
self.assertIn("operators/mesh_plane.py", names)
self.assertIn("operators/image.py", names)
self.assertIn("operators/balloon/operator.py", names)
self.assertIn("operators/image_extract/__init__.py", names)
self.assertIn("operators/image_extract/common.py", names)
self.assertIn("operators/image_extract/region.py", names)
self.assertIn("operators/image_extract/box.py", names)
self.assertIn("operators/image_extract/lasso.py", names)
self.assertIn("operators/image_extract/perspective.py", names)
self.assertNotIn("operators/image_lasso.py", names)
self.assertNotIn("operators/image_perspective.py", names)
self.assertIn("operators/image_edit/__init__.py", names)
self.assertIn("operators/image_edit/common.py", names)
self.assertIn("operators/image_edit/mask.py", names)
self.assertIn("operators/image_edit/box.py", names)
self.assertIn("operators/image_edit/lasso.py", names)
self.assertIn("operators/image_edit/line.py", names)
self.assertIn("operators/image_edit/polyline.py", names)
self.assertIn("operators/image_edit/perspective.py", names)
self.assertIn("operators/surface.py", names)
self.assertIn(
"assets/O_AnyImage.blend",
@@ -86,8 +86,7 @@ class PackTest(unittest.TestCase):
self.assertIn("server/geometry/grid_mesh.py", names)
self.assertIn("server/geometry/surface.py", names)
self.assertIn("server/jobs/background.py", names)
self.assertIn("server/jobs/image_extract.py", names)
self.assertNotIn("server/jobs/image_lasso.py", names)
self.assertIn("server/jobs/image_mask.py", names)
self.assertIn("server/models/ben2.py", names)
self.assertIn("server/models/da3.py", names)
self.assertIn("server/models/moge2.py", names)
@@ -96,6 +95,7 @@ class PackTest(unittest.TestCase):
self.assertIn("server/jobs/debug_da3.py", names)
self.assertIn("server/jobs/debug_moge2.py", names)
self.assertIn("server/jobs/debug_ben2.py", names)
self.assertIn("server/jobs/debug_realesrgan.py", names)
self.assertNotIn("server/processing.py", names)
self.assertNotIn("server/progress.py", names)
self.assertIn("model_catalog.py", names)
@@ -103,6 +103,8 @@ class PackTest(unittest.TestCase):
self.assertIn("server/models/onnx_ben2.py", names)
self.assertIn("server/models/onnx_da3.py", names)
self.assertIn("server/models/onnx_moge2.py", names)
self.assertIn("server/models/onnx_realesrgan.py", names)
self.assertIn("server/models/realesrgan.py", names)
self.assertNotIn("server/da3.py", names)
self.assertNotIn("server/moge2.py", names)
self.assertIn("server/__init__.py", names)