Source code for menpo.landmark.labels.human.face_3d

from collections import OrderedDict
import numpy as np

from ..base import labeller_func, validate_input, connectivity_from_array


[docs]@labeller_func(group_label="face_bu3dfe_83") def face_bu3dfe_83_to_face_bu3dfe_83(pcloud): r""" Apply the BU-3DFE (Binghamton University 3D Facial Expression) Database 83-point facial semantic labels. The semantic labels applied are as follows: - right_eye - left_eye - right_eyebrow - left_eyebrow - right_nose - left_nose - nostrils - outer_mouth - inner_mouth - jaw References ---------- .. [1] http://www.cs.binghamton.edu/~lijun/Research/3DFE/3DFE_Analysis.html """ from menpo.shape import LabelledPointUndirectedGraph n_expected_points = 83 validate_input(pcloud, n_expected_points) reye_indices = np.arange(0, 8) leye_indices = np.arange(8, 16) rbrow_indices = np.arange(16, 26) lbrow_indices = np.arange(26, 36) rnose_indices = np.arange(36, 39) lnose_indices = np.arange(39, 42) nostril_indices = np.arange(42, 48) outermouth_indices = np.arange(48, 60) innermouth_indices = np.arange(60, 68) jaw_indices = np.arange(68, 83) reye_connectivity = connectivity_from_array(reye_indices, close_loop=True) leye_connectivity = connectivity_from_array(leye_indices, close_loop=True) rbrow_connectivity = connectivity_from_array(rbrow_indices, close_loop=True) lbrow_connectivity = connectivity_from_array(lbrow_indices, close_loop=True) rnose_connectivity = connectivity_from_array(rnose_indices) nostril_connectivity = connectivity_from_array(nostril_indices) lnose_connectivity = connectivity_from_array(lnose_indices) outermouth_connectivity = connectivity_from_array( outermouth_indices, close_loop=True ) innermouth_connectivity = connectivity_from_array( innermouth_indices, close_loop=True ) jaw_connectivity = connectivity_from_array(jaw_indices) all_connectivity = np.vstack( [ reye_connectivity, leye_connectivity, rbrow_connectivity, lbrow_connectivity, rnose_connectivity, nostril_connectivity, lnose_connectivity, outermouth_connectivity, innermouth_connectivity, jaw_connectivity, ] ) mapping = OrderedDict() mapping["right_eye"] = reye_indices mapping["left_eye"] = leye_indices mapping["right_eyebrow"] = rbrow_indices mapping["left_eyebrow"] = lbrow_indices mapping["right_nose"] = rnose_indices mapping["left_nose"] = lnose_indices mapping["nostrils"] = nostril_indices mapping["outer_mouth"] = outermouth_indices mapping["inner_mouth"] = innermouth_indices mapping["jaw"] = jaw_indices new_pcloud = LabelledPointUndirectedGraph.init_from_indices_mapping( pcloud.points, all_connectivity, mapping ) return new_pcloud, mapping