return specialized structs rather than landmark slices
This commit is contained in:
parent
6d42300104
commit
3aff0ea5fa
|
@ -63,13 +63,12 @@ mod examples {
|
|||
opencv::core::flip(&rgb_frame, &mut flip_frame, 1)?; // horizontal
|
||||
|
||||
println!("processing");
|
||||
let data = detector.process(&flip_frame);
|
||||
println!("received {} landmarks", data.len());
|
||||
let result = detector.process(&flip_frame);
|
||||
|
||||
highgui::imshow(window, &mut flip_frame)?;
|
||||
|
||||
if data.len() > 0 {
|
||||
println!("LANDMARK: {} {} {}", data[0].x, data[0].y, data[0].z);
|
||||
if let Some(fm) = result {
|
||||
println!("LANDMARK: {} {} {}", fm.data[0].x, fm.data[0].y, fm.data[0].z);
|
||||
}
|
||||
} else {
|
||||
println!("WARN: Skip empty frame");
|
||||
|
@ -111,13 +110,12 @@ mod examples {
|
|||
opencv::core::flip(&rgb_frame, &mut flip_frame, 1)?; // horizontal
|
||||
|
||||
println!("processing");
|
||||
let data = detector.process(&flip_frame);
|
||||
println!("received {} landmarks", data.len());
|
||||
let result = detector.process(&flip_frame);
|
||||
|
||||
highgui::imshow(window, &mut flip_frame)?;
|
||||
|
||||
if data.len() > 0 {
|
||||
println!("LANDMARK: {} {} {}", data[0].x, data[0].y, data[0].z);
|
||||
if let Some(hands) = result {
|
||||
println!("LANDMARK: {} {} {}", hands[0].data[0].x, hands[0].data[0].y, hands[0].data[0].z);
|
||||
}
|
||||
} else {
|
||||
println!("WARN: Skip empty frame");
|
||||
|
@ -159,13 +157,12 @@ mod examples {
|
|||
opencv::core::flip(&rgb_frame, &mut flip_frame, 1)?; // horizontal
|
||||
|
||||
println!("processing");
|
||||
let data = detector.process(&rgb_frame);
|
||||
println!("received {} landmarks", data.len());
|
||||
let result = detector.process(&rgb_frame);
|
||||
|
||||
highgui::imshow(window, &mut rgb_frame)?;
|
||||
|
||||
if data.len() > 0 {
|
||||
println!("LANDMARK: {} {} {}", data[0].x, data[0].y, data[0].z);
|
||||
if let Some(pose) = result {
|
||||
println!("LANDMARK: {} {} {}", pose.data[0].x, pose.data[0].y, pose.data[0].z);
|
||||
}
|
||||
} else {
|
||||
println!("WARN: Skip empty frame");
|
||||
|
|
50
src/lib.rs
50
src/lib.rs
|
@ -20,7 +20,7 @@ mod bindings;
|
|||
pub use bindings::*;
|
||||
|
||||
type GraphType = mediagraph_GraphType;
|
||||
type Landmark = mediagraph_Landmark;
|
||||
pub type Landmark = mediagraph_Landmark;
|
||||
|
||||
impl Default for Landmark {
|
||||
fn default() -> Self {
|
||||
|
@ -34,8 +34,8 @@ impl Default for Landmark {
|
|||
}
|
||||
}
|
||||
|
||||
struct Pose {
|
||||
data: [Landmark; 33],
|
||||
pub struct Pose {
|
||||
pub data: [Landmark; 33],
|
||||
}
|
||||
|
||||
impl Default for Pose {
|
||||
|
@ -46,8 +46,8 @@ impl Default for Pose {
|
|||
}
|
||||
}
|
||||
|
||||
struct Hand {
|
||||
data: [Landmark; 21],
|
||||
pub struct Hand {
|
||||
pub data: [Landmark; 21],
|
||||
}
|
||||
|
||||
impl Default for Hand {
|
||||
|
@ -58,8 +58,8 @@ impl Default for Hand {
|
|||
}
|
||||
}
|
||||
|
||||
struct FaceMesh {
|
||||
data: [Landmark; 478],
|
||||
pub struct FaceMesh {
|
||||
pub data: [Landmark; 478],
|
||||
}
|
||||
|
||||
impl Default for FaceMesh {
|
||||
|
@ -180,9 +180,16 @@ pub mod pose {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn process(&mut self, input: &Mat) -> &[Landmark] {
|
||||
pub fn process(&mut self, input: &Mat) -> Option<Pose> {
|
||||
let landmarks = self.graph.process(input);
|
||||
landmarks
|
||||
|
||||
if landmarks.is_empty() {
|
||||
return None;
|
||||
}
|
||||
|
||||
let mut pose = Pose::default();
|
||||
pose.data.copy_from_slice(&landmarks[..]);
|
||||
Some(pose)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -226,9 +233,16 @@ pub mod face_mesh {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn process(&mut self, input: &Mat) -> &[Landmark] {
|
||||
pub fn process(&mut self, input: &Mat) -> Option<FaceMesh> {
|
||||
let landmarks = self.graph.process(input);
|
||||
landmarks
|
||||
|
||||
if landmarks.is_empty() {
|
||||
return None;
|
||||
}
|
||||
|
||||
let mut face_mesh = FaceMesh::default();
|
||||
face_mesh.data.copy_from_slice(&landmarks[..]);
|
||||
Some(face_mesh)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -291,9 +305,19 @@ pub mod hands {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn process(&mut self, input: &Mat) -> &[Landmark] {
|
||||
pub fn process(&mut self, input: &Mat) -> Option<[Hand; 2]> {
|
||||
let landmarks = self.graph.process(input);
|
||||
landmarks
|
||||
|
||||
if landmarks.is_empty() {
|
||||
return None;
|
||||
}
|
||||
|
||||
let mut lh = Hand::default();
|
||||
let mut rh = Hand::default();
|
||||
lh.data.copy_from_slice(&landmarks[0..21]);
|
||||
rh.data.copy_from_slice(&landmarks[21..42]);
|
||||
|
||||
Some([lh, rh])
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user