update docs

This commit is contained in:
Jules Youngberg 2022-06-12 17:36:21 -07:00
parent e1fb87c23c
commit 2ed73eff58

View File

@ -18,9 +18,16 @@ mod bindings;
use bindings::*; use bindings::*;
type GraphType = mediagraph_GraphType; /// The C++ mediagraph graph type.
pub type GraphType = mediagraph_GraphType;
/// The C++ mediagraph landmark type.
pub type Landmark = mediagraph_Landmark; pub type Landmark = mediagraph_Landmark;
pub const FACE_GRAPH_TYPE: GraphType = mediagraph_GraphType_FACE;
pub const HANDS_GRAPH_TYPE: GraphType = mediagraph_GraphType_HANDS;
pub const POSE_GRAPH_TYPE: GraphType = mediagraph_GraphType_POSE;
impl Default for Landmark { impl Default for Landmark {
fn default() -> Self { fn default() -> Self {
Self { Self {
@ -74,13 +81,15 @@ impl Default for FaceMesh {
} }
} }
/// Graph calculator which interacts with the C++ library.
pub struct Mediagraph { pub struct Mediagraph {
graph: *mut mediagraph_Mediagraph, graph: *mut mediagraph_Mediagraph,
num_landmarks: u32, num_landmarks: u32,
} }
impl Mediagraph { impl Mediagraph {
fn new(graph_type: GraphType, graph_config: &str, output_node: &str) -> Self { /// Creates a new Mediagraph with the given config.
pub fn new(graph_type: GraphType, graph_config: &str, output_node: &str) -> Self {
let graph_config = CString::new(graph_config).expect("CString::new failed"); let graph_config = CString::new(graph_config).expect("CString::new failed");
let output_node = CString::new(output_node).expect("CString::new failed"); let output_node = CString::new(output_node).expect("CString::new failed");
@ -89,9 +98,9 @@ impl Mediagraph {
}; };
let num_landmarks = match graph_type { let num_landmarks = match graph_type {
mediagraph_GraphType_POSE => 33, FACE_GRAPH_TYPE => 478,
mediagraph_GraphType_HANDS => 42, HANDS_GRAPH_TYPE => 42,
mediagraph_GraphType_FACE => 478, POSE_GRAPH_TYPE => 33,
_ => 0, _ => 0,
}; };
@ -101,6 +110,7 @@ impl Mediagraph {
} }
} }
/// Processes the input frame, returns a slice of landmarks if any are detected.
pub fn process(&mut self, input: &Mat) -> &[Landmark] { pub fn process(&mut self, input: &Mat) -> &[Landmark] {
let mut data = input.clone(); let mut data = input.clone();
let raw_landmarks = unsafe { let raw_landmarks = unsafe {
@ -172,7 +182,7 @@ pub mod pose {
impl PoseDetector { impl PoseDetector {
pub fn new(mode: bool, smooth: bool, detection_con: f32, track_con: f32) -> Self { pub fn new(mode: bool, smooth: bool, detection_con: f32, track_con: f32) -> Self {
let graph = Mediagraph::new( let graph = Mediagraph::new(
mediagraph_GraphType_POSE, POSE_GRAPH_TYPE,
include_str!("pose_tracking_cpu.txt"), include_str!("pose_tracking_cpu.txt"),
"pose_landmarks", "pose_landmarks",
); );
@ -208,7 +218,7 @@ pub mod pose {
} }
pub mod face_mesh { pub mod face_mesh {
//! Face mesh utilities. //! Face detection utilities.
use super::*; use super::*;
pub struct FaceMeshDetector { pub struct FaceMeshDetector {
@ -227,7 +237,7 @@ pub mod face_mesh {
min_track_con: f32, min_track_con: f32,
) -> Self { ) -> Self {
let graph = Mediagraph::new( let graph = Mediagraph::new(
mediagraph_GraphType_FACE, FACE_GRAPH_TYPE,
include_str!("face_mesh_desktop_live.txt"), include_str!("face_mesh_desktop_live.txt"),
"multi_face_landmarks", "multi_face_landmarks",
); );
@ -302,7 +312,7 @@ pub mod hands {
impl HandDetector { impl HandDetector {
pub fn new(mode: bool, max_hands: usize, detection_con: f32, min_track_con: f32) -> Self { pub fn new(mode: bool, max_hands: usize, detection_con: f32, min_track_con: f32) -> Self {
let graph = Mediagraph::new( let graph = Mediagraph::new(
mediagraph_GraphType_HANDS, HANDS_GRAPH_TYPE,
include_str!("hand_tracking_desktop_live.txt"), include_str!("hand_tracking_desktop_live.txt"),
"hand_landmarks", "hand_landmarks",
); );