Update InspireFace to 1.1.6

This commit is contained in:
tunm
2024-07-17 08:53:50 +08:00
parent b9c1d8bdba
commit 3a8dd7710f
30 changed files with 1278 additions and 426 deletions

View File

@@ -7,32 +7,31 @@
#include "inspireface/c_api/inspireface.h"
#include "../test_helper/test_tools.h"
TEST_CASE("test_FacePipelineAttribute", "[face_pipeline_attribute]") {
DRAW_SPLIT_LINE
TEST_PRINT_OUTPUT(true);
enum AGE_BRACKED {
AGE_0_2 = 0, ///< Age 0-2 years old
AGE_3_9, ///< Age 3-9 years old
AGE_10_19, ///< Age 10-19 years old
AGE_20_29, ///< Age 20-29 years old
AGE_30_39, ///< Age 30-39 years old
AGE_40_49, ///< Age 40-49 years old
AGE_50_59, ///< Age 50-59 years old
AGE_60_69, ///< Age 60-69 years old
MORE_THAN_70, ///< Age more than 70 years old
AGE_0_2 = 0, ///< Age 0-2 years old
AGE_3_9, ///< Age 3-9 years old
AGE_10_19, ///< Age 10-19 years old
AGE_20_29, ///< Age 20-29 years old
AGE_30_39, ///< Age 30-39 years old
AGE_40_49, ///< Age 40-49 years old
AGE_50_59, ///< Age 50-59 years old
AGE_60_69, ///< Age 60-69 years old
MORE_THAN_70, ///< Age more than 70 years old
};
enum GENDER {
FEMALE = 0, ///< Female
MALE, ///< Male
FEMALE = 0, ///< Female
MALE, ///< Male
};
enum RACE {
BLACK = 0, ///< Black
ASIAN, ///< Asian
LATINO_HISPANIC, ///< Latino/Hispanic
MIDDLE_EASTERN, ///< Middle Eastern
WHITE, ///< White
BLACK = 0, ///< Black
ASIAN, ///< Asian
LATINO_HISPANIC, ///< Latino/Hispanic
MIDDLE_EASTERN, ///< Middle Eastern
WHITE, ///< White
};
HResult ret;
@@ -57,15 +56,16 @@ TEST_CASE("test_FacePipelineAttribute", "[face_pipeline_attribute]") {
REQUIRE(multipleFaceData.detectedNum == 1);
// Run pipeline
ret = HFMultipleFacePipelineProcessOptional(session, imgHandle, &multipleFaceData, HF_ENABLE_FACE_ATTRIBUTE);
ret = HFMultipleFacePipelineProcessOptional(session, imgHandle, &multipleFaceData,
HF_ENABLE_FACE_ATTRIBUTE);
REQUIRE(ret == HSUCCEED);
HFFaceAttributeResult result = {0};
ret = HFGetFaceAttributeResult(session, &result);
REQUIRE(ret == HSUCCEED);
REQUIRE(result.num == 1);
// Check attribute
// Check attribute
CHECK(result.race[0] == BLACK);
CHECK(result.ageBracket[0] == AGE_10_19);
CHECK(result.gender[0] == FEMALE);
@@ -88,7 +88,8 @@ TEST_CASE("test_FacePipelineAttribute", "[face_pipeline_attribute]") {
REQUIRE(multipleFaceData.detectedNum == 2);
// Run pipeline
ret = HFMultipleFacePipelineProcessOptional(session, imgHandle, &multipleFaceData, HF_ENABLE_FACE_ATTRIBUTE);
ret = HFMultipleFacePipelineProcessOptional(session, imgHandle, &multipleFaceData,
HF_ENABLE_FACE_ATTRIBUTE);
REQUIRE(ret == HSUCCEED);
HFFaceAttributeResult result = {0};
@@ -96,14 +97,12 @@ TEST_CASE("test_FacePipelineAttribute", "[face_pipeline_attribute]") {
REQUIRE(ret == HSUCCEED);
REQUIRE(result.num == 2);
// Check attribute
for (size_t i = 0; i < result.num; i++)
{
// Check attribute
for (size_t i = 0; i < result.num; i++) {
CHECK(result.race[i] == WHITE);
CHECK(result.ageBracket[i] == AGE_20_29);
CHECK(result.gender[i] == FEMALE);
}
ret = HFReleaseImageStream(imgHandle);
REQUIRE(ret == HSUCCEED);
@@ -113,7 +112,49 @@ TEST_CASE("test_FacePipelineAttribute", "[face_pipeline_attribute]") {
ret = HFReleaseInspireFaceSession(session);
session = nullptr;
REQUIRE(ret == HSUCCEED);
}
TEST_CASE("test_FacePipelineRobustness", "[robustness]") {
DRAW_SPLIT_LINE
TEST_PRINT_OUTPUT(true);
SECTION("Exception") {
HResult ret;
HFSessionCustomParameter parameter = {0};
HFDetectMode detMode = HF_DETECT_MODE_ALWAYS_DETECT;
HFSession session;
ret = HFCreateInspireFaceSession(parameter, detMode, 3, -1, -1, &session);
REQUIRE(ret == HSUCCEED);
// Input exception data
HFImageStream nullHandle = {0};
HFMultipleFaceData nullfaces = {0};
ret =
HFMultipleFacePipelineProcessOptional(session, nullHandle, &nullfaces, HF_ENABLE_NONE);
REQUIRE(ret == HERR_INVALID_IMAGE_STREAM_HANDLE);
// Get a face picture
HFImageStream img1Handle;
auto img1 = cv::imread(GET_DATA("data/bulk/image_T1.jpeg"));
ret = CVImageToImageStream(img1, img1Handle);
REQUIRE(ret == HSUCCEED);
// Input correct Image and exception faces struct
ret =
HFMultipleFacePipelineProcessOptional(session, img1Handle, &nullfaces, HF_ENABLE_NONE);
REQUIRE(ret == HSUCCEED);
ret = HFReleaseImageStream(img1Handle);
REQUIRE(ret == HSUCCEED);
ret = HFReleaseInspireFaceSession(session);
REQUIRE(ret == HSUCCEED);
// Multiple release
ret = HFReleaseInspireFaceSession(session);
REQUIRE(ret == HERR_INVALID_CONTEXT_HANDLE);
HFDeBugShowResourceStatistics();
}
}
TEST_CASE("test_FacePipeline", "[face_pipeline]") {
@@ -172,14 +213,11 @@ TEST_CASE("test_FacePipeline", "[face_pipeline]") {
REQUIRE(ret == HSUCCEED);
img2Handle = nullptr;
ret = HFReleaseInspireFaceSession(session);
session = nullptr;
REQUIRE(ret == HSUCCEED);
}
SECTION("face mask detect") {
HResult ret;
HFSessionCustomParameter parameter = {0};
@@ -213,7 +251,6 @@ TEST_CASE("test_FacePipeline", "[face_pipeline]") {
REQUIRE(ret == HSUCCEED);
img1Handle = nullptr;
// no mask face
HFImageStream img2Handle;
auto img2 = cv::imread(GET_DATA("data/bulk/face_sample.png"));
@@ -225,7 +262,7 @@ TEST_CASE("test_FacePipeline", "[face_pipeline]") {
REQUIRE(ret == HSUCCEED);
ret = HFGetFaceMaskConfidence(session, &confidence);
REQUIRE(ret == HSUCCEED);
// spdlog::info("mask {}", confidence.confidence[0]);
// spdlog::info("mask {}", confidence.confidence[0]);
CHECK(confidence.num > 0);
CHECK(confidence.confidence[0] < 0.1);
@@ -233,7 +270,6 @@ TEST_CASE("test_FacePipeline", "[face_pipeline]") {
REQUIRE(ret == HSUCCEED);
img2Handle = nullptr;
ret = HFReleaseInspireFaceSession(session);
session = nullptr;
REQUIRE(ret == HSUCCEED);
@@ -259,7 +295,8 @@ TEST_CASE("test_FacePipeline", "[face_pipeline]") {
REQUIRE(ret == HSUCCEED);
REQUIRE(multipleFaceData.detectedNum > 0);
ret = HFMultipleFacePipelineProcessOptional(session, superiorHandle, &multipleFaceData, option);
ret =
HFMultipleFacePipelineProcessOptional(session, superiorHandle, &multipleFaceData, option);
REQUIRE(ret == HSUCCEED);
HFloat quality;
@@ -294,7 +331,6 @@ TEST_CASE("test_FacePipeline", "[face_pipeline]") {
ret = HFReleaseInspireFaceSession(session);
REQUIRE(ret == HSUCCEED);
}
}
TEST_CASE("test_FaceReaction", "[face_reaction]") {
@@ -326,20 +362,19 @@ TEST_CASE("test_FaceReaction", "[face_reaction]") {
// Predict eyes status
ret = HFMultipleFacePipelineProcess(session, imgHandle, &multipleFaceData, parameter);
REQUIRE(ret == HSUCCEED);
// Get results
HFFaceIntereactionResult result;
ret = HFGetFaceIntereactionResult(session, &result);
HFFaceIntereactionState result;
ret = HFGetFaceIntereactionStateResult(session, &result);
REQUIRE(multipleFaceData.detectedNum == result.num);
REQUIRE(ret == HSUCCEED);
// Check
// Check
CHECK(result.leftEyeStatusConfidence[0] > 0.5f);
CHECK(result.rightEyeStatusConfidence[0] > 0.5f);
ret = HFReleaseImageStream(imgHandle);
REQUIRE(ret == HSUCCEED);
}
SECTION("close eyes") {
@@ -358,20 +393,19 @@ TEST_CASE("test_FaceReaction", "[face_reaction]") {
// Predict eyes status
ret = HFMultipleFacePipelineProcess(session, imgHandle, &multipleFaceData, parameter);
REQUIRE(ret == HSUCCEED);
// Get results
HFFaceIntereactionResult result;
ret = HFGetFaceIntereactionResult(session, &result);
HFFaceIntereactionState result;
ret = HFGetFaceIntereactionStateResult(session, &result);
REQUIRE(multipleFaceData.detectedNum == result.num);
REQUIRE(ret == HSUCCEED);
// Check
// Check
CHECK(result.leftEyeStatusConfidence[0] < 0.5f);
CHECK(result.rightEyeStatusConfidence[0] < 0.5f);
ret = HFReleaseImageStream(imgHandle);
REQUIRE(ret == HSUCCEED);
}
SECTION("Close one eye and open the other") {
@@ -390,23 +424,21 @@ TEST_CASE("test_FaceReaction", "[face_reaction]") {
// Predict eyes status
ret = HFMultipleFacePipelineProcess(session, imgHandle, &multipleFaceData, parameter);
REQUIRE(ret == HSUCCEED);
// Get results
HFFaceIntereactionResult result;
ret = HFGetFaceIntereactionResult(session, &result);
HFFaceIntereactionState result;
ret = HFGetFaceIntereactionStateResult(session, &result);
REQUIRE(multipleFaceData.detectedNum == result.num);
REQUIRE(ret == HSUCCEED);
// Check
// Check
CHECK(result.leftEyeStatusConfidence[0] < 0.5f);
CHECK(result.rightEyeStatusConfidence[0] > 0.5f);
ret = HFReleaseImageStream(imgHandle);
REQUIRE(ret == HSUCCEED);
}
ret = HFReleaseInspireFaceSession(session);
REQUIRE(ret == HSUCCEED);
}
}