feat: Implement background depth distance feature for depth processing
- Added `background_depth_distance` property to `ActiveJob` and `RunJob` classes to manage background depth settings. - Updated job execution to handle background depth distance, allowing for fixed negative displacement in depth calculations. - Introduced new functions in the worker module to apply background depth distance to depth frames and manage original background depth. - Enhanced tests to cover new functionality, ensuring correct behavior of background depth processing and reference depth extraction. - Refactored job submission to run in a separate thread, improving responsiveness during execution.
This commit is contained in:
@@ -6,6 +6,7 @@ import shutil
|
||||
import socket
|
||||
import subprocess
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
import uuid
|
||||
from dataclasses import dataclass
|
||||
@@ -65,6 +66,7 @@ _client_id = uuid.uuid4().hex
|
||||
_host_auto_start = False
|
||||
_host_snapshot = {"state": "STOPPED", "message": "Stopped"}
|
||||
_local_opener = build_opener(ProxyHandler({}))
|
||||
_client_label = f"Blender {getattr(bpy.app, 'version_string', '')}".strip()
|
||||
|
||||
|
||||
def preferences():
|
||||
@@ -391,11 +393,10 @@ def ensure_host(timeout=60.0):
|
||||
last_launch = 0.0
|
||||
starting = False
|
||||
while time.monotonic() < deadline:
|
||||
connection, _health = _discover_live_host(timeout=0.5)
|
||||
connection, health = _discover_live_host(timeout=0.5)
|
||||
if connection is not None:
|
||||
_host_connection = connection
|
||||
_register_host_client(connection)
|
||||
health = _check_host(connection, timeout=0.5)
|
||||
_host_snapshot = _format_host_snapshot(connection, health)
|
||||
_redraw_host_ui()
|
||||
return connection
|
||||
@@ -415,7 +416,7 @@ def ensure_host(timeout=60.0):
|
||||
|
||||
|
||||
def submit_host_job(request):
|
||||
connection = ensure_host()
|
||||
connection = _host_connection or ensure_host()
|
||||
payload = dict(request.payload)
|
||||
payload["client_id"] = _client_id
|
||||
_host_http_request(
|
||||
@@ -564,6 +565,24 @@ def host_busy():
|
||||
return _host_snapshot.get("state") == "BUSY"
|
||||
|
||||
|
||||
def mark_host_job_complete(job_id):
|
||||
"""Release a stale local busy snapshot after its terminal status is observed."""
|
||||
global _host_snapshot
|
||||
|
||||
active = _host_snapshot.get("active_job")
|
||||
if active and active.get("job_id") != job_id:
|
||||
return
|
||||
if _host_snapshot.get("state") != "BUSY":
|
||||
return
|
||||
_host_snapshot = {
|
||||
**_host_snapshot,
|
||||
"busy": False,
|
||||
"active_job": None,
|
||||
"state": "READY",
|
||||
"message": "Ready",
|
||||
}
|
||||
|
||||
|
||||
def _service_host_timer():
|
||||
global _host_connection, _host_snapshot, _registered_instance_id
|
||||
|
||||
@@ -619,12 +638,11 @@ def _register_host_client(connection):
|
||||
|
||||
if _registered_instance_id == connection.instance_id:
|
||||
return
|
||||
label = f"Blender {getattr(bpy.app, 'version_string', '')}".strip()
|
||||
_host_http_request(
|
||||
connection,
|
||||
"POST",
|
||||
"/clients",
|
||||
payload={"client_id": _client_id, "label": label},
|
||||
payload={"client_id": _client_id, "label": _client_label},
|
||||
timeout=2.0,
|
||||
)
|
||||
_registered_instance_id = connection.instance_id
|
||||
@@ -641,6 +659,8 @@ def _format_host_snapshot(connection, health):
|
||||
|
||||
|
||||
def _redraw_host_ui():
|
||||
if threading.current_thread() is not threading.main_thread():
|
||||
return
|
||||
try:
|
||||
from .status_bar import redraw_ui
|
||||
|
||||
@@ -701,6 +721,7 @@ def remove_background_request(
|
||||
video_frames=None,
|
||||
start_frame=1,
|
||||
device=None,
|
||||
background_depth_distance=0.0,
|
||||
):
|
||||
return HostJobRequest(
|
||||
{
|
||||
@@ -718,6 +739,9 @@ def remove_background_request(
|
||||
else video_frames
|
||||
),
|
||||
"start_frame": start_frame,
|
||||
"background_depth_distance": float(
|
||||
background_depth_distance
|
||||
),
|
||||
},
|
||||
}
|
||||
)
|
||||
@@ -761,6 +785,7 @@ def reconstruct_request(
|
||||
process_res_method=None,
|
||||
use_ray_pose=None,
|
||||
remove_background=False,
|
||||
background_depth_distance=0.0,
|
||||
start_frame=1,
|
||||
device=None,
|
||||
):
|
||||
@@ -798,8 +823,9 @@ def reconstruct_request(
|
||||
"use_ray_pose": 1 if snapform_selected_ray_pose else 0,
|
||||
"ref_view_strategy": settings.ref_view_strategy,
|
||||
"remove_background_model_dir": "",
|
||||
"background_depth_distance": float(background_depth_distance),
|
||||
}
|
||||
if remove_background:
|
||||
if remove_background or background_depth_distance > 0.0:
|
||||
parameters["remove_background_model_dir"] = str(
|
||||
model_directory(BEN2_MODEL.key)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user