This commit is contained in:
tunm
2025-05-22 16:07:26 +08:00
parent efb5639ec6
commit 7e25e4e482
168 changed files with 6434 additions and 2527 deletions

View File

@@ -48,8 +48,8 @@ TEST_CASE("test_FaceTrack", "[face_track]") {
auto cvRect = inspirecv::Rect<int>::Create(rect.x, rect.y, rect.width, rect.height);
image.DrawRect(cvRect, {0, 0, 255}, 2);
image.Write("ww.jpg");
// The iou is allowed to have an error of 25%
CHECK(iou == Approx(1.0f).epsilon(0.25));
// The iou is allowed to have an error of 50%
CHECK(iou == Approx(1.0f).epsilon(0.5));
ret = HFReleaseImageStream(imgHandle);
REQUIRE(ret == HSUCCEED);
@@ -70,6 +70,7 @@ TEST_CASE("test_FaceTrack", "[face_track]") {
REQUIRE(ret == HSUCCEED);
}
// Temporarily shut down the processing of frame related cases to prevent excessive data from occupying the github memory
#if 0
SECTION("Face tracking stability from frames") {
HResult ret;
@@ -124,6 +125,7 @@ TEST_CASE("test_FaceTrack", "[face_track]") {
SECTION("Head pose estimation") {
HResult ret;
HFSessionCustomParameter parameter = {0};
parameter.enable_face_pose = true;
HFDetectMode detMode = HF_DETECT_MODE_ALWAYS_DETECT;
HFSession session;
ret = HFCreateInspireFaceSession(parameter, detMode, 3, -1, -1, &session);
@@ -318,6 +320,12 @@ TEST_CASE("test_MultipleLevelFaceDetect", "[face_detect]") {
REQUIRE(ret == HSUCCEED);
HFSessionSetTrackPreviewSize(session, detectPixelLevel);
HFSessionSetFilterMinimumFacePixelSize(session, 0);
// Check the preview size
HInt32 previewSize;
ret = HFSessionGetTrackPreviewSize(session, &previewSize);
REQUIRE(ret == HSUCCEED);
CHECK(previewSize == detectPixelLevel);
// Get a face picture
HFImageStream imgHandle;
@@ -351,6 +359,12 @@ TEST_CASE("test_MultipleLevelFaceDetect", "[face_detect]") {
HFSessionSetTrackPreviewSize(session, detectPixelLevel);
HFSessionSetFilterMinimumFacePixelSize(session, 0);
// Check the preview size
HInt32 previewSize;
ret = HFSessionGetTrackPreviewSize(session, &previewSize);
REQUIRE(ret == HSUCCEED);
CHECK(previewSize == detectPixelLevel);
// Get a face picture
HFImageStream imgHandle;
auto image = inspirecv::Image::Create(GET_DATA("data/bulk/pedestrian.png"));
@@ -383,6 +397,12 @@ TEST_CASE("test_MultipleLevelFaceDetect", "[face_detect]") {
HFSessionSetTrackPreviewSize(session, detectPixelLevel);
HFSessionSetFilterMinimumFacePixelSize(session, 0);
// Check the preview size
HInt32 previewSize;
ret = HFSessionGetTrackPreviewSize(session, &previewSize);
REQUIRE(ret == HSUCCEED);
CHECK(previewSize == detectPixelLevel);
// Get a face picture
HFImageStream imgHandle;
auto image = inspirecv::Image::Create(GET_DATA("data/bulk/pedestrian.png"));
@@ -403,4 +423,133 @@ TEST_CASE("test_MultipleLevelFaceDetect", "[face_detect]") {
ret = HFReleaseInspireFaceSession(session);
REQUIRE(ret == HSUCCEED);
}
}
TEST_CASE("test_FaceTrackPreviewSizeSetting", "[face_track]") {
DRAW_SPLIT_LINE
TEST_PRINT_OUTPUT(true);
SECTION("Default preview size and detection level size") {
HResult ret;
HFSessionCustomParameter parameter = {0};
HFDetectMode detMode = HF_DETECT_MODE_ALWAYS_DETECT;
HFSession session;
HInt32 levelSize = -1;
ret = HFCreateInspireFaceSession(parameter, detMode, 20, levelSize, -1, &session);
REQUIRE(ret == HSUCCEED);
// Check the preview size
HInt32 previewSize;
ret = HFSessionGetTrackPreviewSize(session, &previewSize);
REQUIRE(ret == HSUCCEED);
CHECK(previewSize == 320);
// Get a face picture
HFImageStream imgHandle;
auto image = inspirecv::Image::Create(GET_DATA("data/bulk/pedestrian.png"));
ret = CVImageToImageStream(image, imgHandle);
REQUIRE(ret == HSUCCEED);
// Extract basic face information from photos
HFMultipleFaceData multipleFaceData = {0};
ret = HFExecuteFaceTrack(session, imgHandle, &multipleFaceData);
REQUIRE(ret == HSUCCEED);
CHECK(multipleFaceData.detectedNum > 0);
// Check the preview size
HInt32 debugPreviewSize;
ret = HFSessionLastFaceDetectionGetDebugPreviewImageSize(session, &debugPreviewSize);
REQUIRE(ret == HSUCCEED);
CHECK(debugPreviewSize == 320);
ret = HFReleaseImageStream(imgHandle);
REQUIRE(ret == HSUCCEED);
ret = HFReleaseInspireFaceSession(session);
REQUIRE(ret == HSUCCEED);
}
SECTION("Set preview size to 320px") {
HResult ret;
HFSessionCustomParameter parameter = {0};
HFDetectMode detMode = HF_DETECT_MODE_ALWAYS_DETECT;
HFSession session;
HInt32 levelSize = 320;
ret = HFCreateInspireFaceSession(parameter, detMode, 20, levelSize, -1, &session);
REQUIRE(ret == HSUCCEED);
// Check the preview size
HInt32 previewSize;
ret = HFSessionGetTrackPreviewSize(session, &previewSize);
REQUIRE(ret == HSUCCEED);
CHECK(previewSize == levelSize);
ret = HFReleaseInspireFaceSession(session);
REQUIRE(ret == HSUCCEED);
}
SECTION("Set the detect level to an invalid value") {
HResult ret;
HFSessionCustomParameter parameter = {0};
HFDetectMode detMode = HF_DETECT_MODE_ALWAYS_DETECT;
HFSession session;
HInt32 levelSize = 1000;
ret = HFCreateInspireFaceSession(parameter, detMode, 20, levelSize, -1, &session);
REQUIRE(ret == HSUCCEED);
// Check the preview size
HInt32 previewSize;
ret = HFSessionGetTrackPreviewSize(session, &previewSize);
REQUIRE(ret == HSUCCEED);
// If the detect level value is invalid, the value will be automatically adjusted to the nearest legal size.
// If the default value of preview_size is -1, the value will also be adjusted
CHECK(previewSize == 640);
// Get a face picture
HFImageStream imgHandle;
auto image = inspirecv::Image::Create(GET_DATA("data/bulk/pedestrian.png"));
ret = CVImageToImageStream(image, imgHandle);
REQUIRE(ret == HSUCCEED);
// Extract basic face information from photos
HFMultipleFaceData multipleFaceData = {0};
ret = HFExecuteFaceTrack(session, imgHandle, &multipleFaceData);
REQUIRE(ret == HSUCCEED);
CHECK(multipleFaceData.detectedNum > 0);
// Check the preview size
HInt32 debugPreviewSize;
ret = HFSessionLastFaceDetectionGetDebugPreviewImageSize(session, &debugPreviewSize);
REQUIRE(ret == HSUCCEED);
CHECK(debugPreviewSize == 640);
// Set a value manually
ret = HFSessionSetTrackPreviewSize(session, 192);
REQUIRE(ret == HSUCCEED);
// Check the preview size
ret = HFSessionGetTrackPreviewSize(session, &previewSize);
REQUIRE(ret == HSUCCEED);
CHECK(previewSize == 192);
ret = HFExecuteFaceTrack(session, imgHandle, &multipleFaceData);
REQUIRE(ret == HSUCCEED);
CHECK(multipleFaceData.detectedNum > 0);
// Check the preview size
ret = HFSessionLastFaceDetectionGetDebugPreviewImageSize(session, &debugPreviewSize);
REQUIRE(ret == HSUCCEED);
CHECK(debugPreviewSize == 192);
ret = HFReleaseImageStream(imgHandle);
REQUIRE(ret == HSUCCEED);
ret = HFReleaseInspireFaceSession(session);
REQUIRE(ret == HSUCCEED);
}
}