LinzhouLi's picture
Update RealDenseFace image reconstruction demo (part 3)
7826761 verified
Raw History Blame Contribute Delete
1.36 kB
from __future__ import annotations
from pathlib import Path
import cv2
import numpy as np
import torch
from camera import Camera
from tracker.inference.preprocess import enlarge_bbox
from .visualizer import Visualizer
def render_reconstruction_panels(
visualizer: Visualizer,
camera: Camera,
image_rgb: np.ndarray,
inference,
vertices: torch.Tensor,
alpha: float = 0.5,
) -> np.ndarray:
alignment = visualizer.vis_align(image_rgb, inference.vertex_coord)
alignment = visualizer.vis_contour(alignment, inference.vertex_coord)
bbox = np.round(enlarge_bbox(inference.face_bbox, 1.3)).astype(np.int32)
cv2.rectangle(alignment, tuple(bbox[:2]), tuple(bbox[2:]), (255, 0, 0), 2)
overlay, shading = visualizer.vis_flame_shading_overlay(
camera, image_rgb, vertices, alpha=alpha, return_shading=True
)
return np.ascontiguousarray(
np.concatenate(
[
np.concatenate([image_rgb, alignment], axis=1),
np.concatenate([overlay, shading], axis=1),
],
axis=0,
)
)
def save_reconstruction_image(path: str | Path, image_rgb: np.ndarray) -> None:
path = Path(path)
if not cv2.imwrite(str(path), cv2.cvtColor(image_rgb, cv2.COLOR_RGB2BGR)):
raise OSError(f"Failed to write visualization image: {path}")