svjack's picture
Upload folder using huggingface_hub
d015578 verified
import numpy as np
# Demo libs
from spiga.demo.visualize.layouts.plot_basics import BasicLayout
class LandmarkLayout(BasicLayout):
BasicLayout.thickness_dft['lnd'] = 3
def __init__(self):
super().__init__()
def draw_landmarks(self, image, landmarks, visible=None, mask=None,
thick=None, colors=(BasicLayout.colors['green'], BasicLayout.colors['red'])):
# Initialize variables if need it
if visible is None:
visible = np.ones(len(landmarks))
if mask is None:
mask = np.ones(len(landmarks))
if thick is None:
thick = self.thickness['lnd']
if isinstance(landmarks, (list, tuple)):
landmarks = np.array(landmarks)
if isinstance(visible, (list, tuple)):
visible = np.array(visible)
if isinstance(mask, (list, tuple)):
mask = np.array(mask)
# Clean and split landmarks
ldm_vis, ldm_notvis = self._split_lnd_by_vis(landmarks, visible, mask)
# PIL images to OpenCV
if image.shape[0] == 3:
image = image.transpose(1, 2, 0)
# Plot landmarks
canvas = self.draw_circles(image, ldm_vis, color=colors[0], thick=thick)
canvas = self.draw_circles(canvas, ldm_notvis, color=colors[1], thick=thick)
return canvas
@ staticmethod
def _split_lnd_by_vis(landmarks, visible, mask):
mask = np.array(mask, dtype=bool)
visible = np.array(visible, dtype=bool)
landmarks = landmarks[mask]
visible = visible[mask]
ldm_vis = landmarks[visible]
not_visible = np.logical_not(visible)
ldm_notvis = landmarks[not_visible]
return ldm_vis, ldm_notvis