MCPcopy Create free account
hub / github.com/HyperInspire/InspireFace / main

Function main

cpp/sample/cpp_api/cpp_sample_face_track.cpp:8–65  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6#include <inspireface/inspireface.hpp>
7
8int main(int argc, char** argv) {
9 if (argc != 3) {
10 std::cout << "Usage: " << argv[0] << " <model_path> <image_path>" << std::endl;
11 return -1;
12 }
13
14 std::string model_path = argv[1];
15 std::string image_path = argv[2];
16
17 // Global init(only once)
18 INSPIREFACE_CONTEXT->Reload(model_path);
19
20 // Create image and frame process
21 inspirecv::Image image = inspirecv::Image::Create(image_path);
22 inspirecv::FrameProcess process =
23 inspirecv::FrameProcess::Create(image.Data(), image.Height(), image.Width(), inspirecv::BGR, inspirecv::ROTATION_90);
24
25 // Create session
26 inspire::CustomPipelineParameter param;
27 param.enable_recognition = true;
28 param.enable_liveness = true;
29 param.enable_mask_detect = true;
30 param.enable_face_attribute = true;
31 param.enable_face_quality = true;
32 std::shared_ptr<inspire::Session> session(inspire::Session::CreatePtr(inspire::DETECT_MODE_ALWAYS_DETECT, 100, param, 640));
33 session->SetTrackPreviewSize(640);
34
35 INSPIREFACE_CHECK_MSG(session != nullptr, "Session is not valid");
36
37 // Detect and track
38 std::vector<inspire::FaceTrackWrap> results;
39 int32_t ret;
40 ret = session->FaceDetectAndTrack(process, results);
41 INSPIREFACE_CHECK_MSG(ret == 0, "FaceDetectAndTrack failed");
42
43 // Run pipeline for each face
44 ret = session->MultipleFacePipelineProcess(process, param, results);
45 INSPIREFACE_CHECK_MSG(ret == 0, "MultipleFacePipelineProcess failed");
46
47 for (auto& result : results) {
48 std::cout << "result: " << result.trackId << std::endl;
49 std::cout << "quality: " << result.quality[0] << ", " << result.quality[1] << ", " << result.quality[2] << ", " << result.quality[3] << ", "
50 << result.quality[4] << std::endl;
51 inspirecv::Rect2i rect = inspirecv::Rect2i::Create(result.rect.x, result.rect.y, result.rect.width, result.rect.height);
52 std::cout << rect << std::endl;
53 image.DrawRect(rect, inspirecv::Color::Red);
54 inspirecv::TransformMatrix trans = inspirecv::TransformMatrix::Create(result.trans.m00, result.trans.m01, result.trans.tx, result.trans.m10, result.trans.m11, result.trans.ty);
55 std::cout << "trans: " << trans.GetInverse() << std::endl;
56
57 std::vector<inspirecv::Point2f> landmark = session->GetFaceDenseLandmark(result);
58 for (auto& point : landmark) {
59 image.DrawCircle(point.As<int>(), 2, inspirecv::Color::Green);
60 }
61 }
62 image.Write("result.jpg");
63
64 return 0;
65}

Callers

nothing calls this directly

Calls 6

CreatePtrFunction · 0.85
ReloadMethod · 0.80
SetTrackPreviewSizeMethod · 0.45
FaceDetectAndTrackMethod · 0.45
GetFaceDenseLandmarkMethod · 0.45

Tested by

no test coverage detected