Skeletal Animation Multithread Face
face.h
Go to the documentation of this file.
1#pragma once
2
3#include <iostream>
4#include <filesystem>
5#include <future>
6#include <eigen3/Eigen/Dense>
7
8#include <iostream>
9#include <stdio.h>
10#include <sys/socket.h>
11#include <arpa/inet.h>
12#include <unistd.h>
13#include <string.h>
14
15
16#include <filesystem>
17#include "./nlohmann/json.hpp"
18#include "euler_rotations.h"
19#include "utils.h"
20
25class Face
26{
27
28public:
30 Face();
31
32 // Update face data.
33 void update(void);
34
36 Eigen::MatrixXd get_vertices(void);
37
43 Eigen::MatrixXi get_surface_indices(void) { return m_surf_indices; }
44
46 Eigen::MatrixXd translation_matrix(const Eigen::Vector3d& offset,
47 size_t vert_num);
48
49private:
50
52 std::filesystem::path m_vertices_connections_abs_path;
53
56 "share/vertices_connections.csv";
57
59 Eigen::MatrixXi m_faces;
60
61private:
63 void setup_tcp_communication(void);
64
66 std::string m_local_ip_address = "127.0.1.1";
67
70 const int m_tcp_port = 5052;
71
73 int m_socket = 0;
74
75private:
76
79 const int m_buffer_size = 40000;
80
82 const int m_vertices_num = 468;
83
85 Eigen::MatrixXi m_surf_indices;
86
87private:
89 std::future<Eigen::MatrixXd> m_future_fun;
90
93
95 Eigen::MatrixXd incoming_data_callback(void);
96
98 Eigen::MatrixXd m_vol_mesh_vertices;
99
101 Eigen::Matrix3d m_rot_mat = Eigen::Matrix3d::Identity();
102
104 double m_face_mesh_scale = 6.0;
105 Eigen::Vector3d m_face_offset = Eigen::Vector3d({0.0, -2.0, 0.0});
106 Eigen::Matrix3d m_scale_mat =
107 m_face_mesh_scale * Eigen::Matrix3d::Identity();
108};
This class runs the client that handles the vertices coming from the python server face_mesh_server....
Definition: face.h:26
Eigen::MatrixXd incoming_data_callback(void)
Read incoming data.
Definition: face.cpp:63
const int m_vertices_num
Number of vertices provided by the mediapipe. This is constant.
Definition: face.h:82
const int m_buffer_size
Definition: face.h:79
Eigen::MatrixXi m_surf_indices
The surface element indices of the incoming mesh.
Definition: face.h:85
Eigen::MatrixXd get_vertices(void)
Get face vertices.
Definition: face.cpp:41
int m_socket
Socket handle.
Definition: face.h:73
void update(void)
Eigen::Matrix3d m_rot_mat
Face rotation matrix.
Definition: face.h:101
Eigen::Matrix3d m_scale_mat
Definition: face.h:106
double m_face_mesh_scale
Face scale matrix.
Definition: face.h:104
Eigen::MatrixXi m_faces
Face landmarking indices matrix.
Definition: face.h:59
std::string m_vertices_connections_rel_filename
Relative name of vertices connection files.
Definition: face.h:55
Eigen::Vector3d m_face_offset
Definition: face.h:105
Eigen::MatrixXd translation_matrix(const Eigen::Vector3d &offset, size_t vert_num)
This function offset a set of vertices by a given offset.
Definition: face.cpp:176
std::string m_local_ip_address
Start tcp client at this ip adress (localhost).
Definition: face.h:66
Eigen::MatrixXd m_vol_mesh_vertices
Volume mesh data.
Definition: face.h:98
const int m_tcp_port
Definition: face.h:70
bool m_return_value
Termination flag for callback function.
Definition: face.h:92
Eigen::MatrixXi get_surface_indices(void)
Get the surface indices of the face mesh.
Definition: face.h:43
void setup_tcp_communication(void)
Setup communication with python server.
Definition: face.cpp:143
std::future< Eigen::MatrixXd > m_future_fun
Future function handle.
Definition: face.h:89
std::filesystem::path m_vertices_connections_abs_path
Absolute name of vertices connection files.
Definition: face.h:52
Face()
Constructor.
Definition: face.cpp:9