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

@@ -34,7 +34,7 @@ TEST_CASE("test_BenchmarkFaceDetect", "[benchmark]") {
ret = CVImageToImageStream(image, imgHandle);
REQUIRE(ret == HSUCCEED);
inspirecv::TimeSpend timeSpend("Face Detect@160");
inspire::SpendTimer timeSpend("Face Detect@160");
for (size_t i = 0; i < loop; i++) {
timeSpend.Start();
// Extract basic face information from photos
@@ -68,7 +68,7 @@ TEST_CASE("test_BenchmarkFaceDetect", "[benchmark]") {
ret = CVImageToImageStream(image, imgHandle);
REQUIRE(ret == HSUCCEED);
inspirecv::TimeSpend timeSpend("Face Detect@320");
inspire::SpendTimer timeSpend("Face Detect@320");
for (size_t i = 0; i < loop; i++) {
timeSpend.Start();
// Extract basic face information from photos
@@ -102,7 +102,7 @@ TEST_CASE("test_BenchmarkFaceDetect", "[benchmark]") {
ret = CVImageToImageStream(image, imgHandle);
REQUIRE(ret == HSUCCEED);
inspirecv::TimeSpend timeSpend("Face Detect@640");
inspire::SpendTimer timeSpend("Face Detect@640");
for (size_t i = 0; i < loop; i++) {
timeSpend.Start();
// Extract basic face information from photos
@@ -141,7 +141,7 @@ TEST_CASE("test_BenchmarkFaceTrack", "[benchmark]") {
ret = CVImageToImageStream(image, imgHandle);
REQUIRE(ret == HSUCCEED);
inspirecv::TimeSpend timeSpend("Face Track");
inspire::SpendTimer timeSpend("Face Track");
for (size_t i = 0; i < loop; i++) {
timeSpend.Start();
// Extract basic face information from photos
@@ -186,7 +186,7 @@ TEST_CASE("test_BenchmarkFaceExtractWithAlign", "[benchmark]") {
ret = HFExecuteFaceTrack(session, imgHandle, &multipleFaceData);
REQUIRE(ret == HSUCCEED);
inspirecv::TimeSpend timeSpend("Face Extract With Align");
inspire::SpendTimer timeSpend("Face Extract With Align");
for (size_t i = 0; i < loop; i++) {
timeSpend.Start();
// Extract basic face information from photos
@@ -257,7 +257,7 @@ TEST_CASE("test_BenchmarkFaceComparison", "[benchmark]") {
featureZyQuery.size = featureNum;
REQUIRE(ret == HSUCCEED);
inspirecv::TimeSpend timeSpend("Face Comparison");
inspire::SpendTimer timeSpend("Face Comparison");
for (int i = 0; i < loop; ++i) {
timeSpend.Start();
HFloat compRes;
@@ -333,7 +333,7 @@ TEST_CASE("test_BenchmarkFaceHubSearchPersistence", "[benchmark]") {
searchFeature.data = searchFeat.data();
HFloat confidence = 0.0f;
HFFaceFeatureIdentity mostSimilar = {0};
inspirecv::TimeSpend timeSpend("Face Search 1k@Persistence");
inspire::SpendTimer timeSpend("Face Search 1k@Persistence");
for (size_t i = 0; i < loop; i++) {
timeSpend.Start();
ret = HFFeatureHubFaceSearch(searchFeature, &confidence, &mostSimilar);
@@ -401,7 +401,7 @@ TEST_CASE("test_BenchmarkFaceHubSearchPersistence", "[benchmark]") {
searchFeature.data = searchFeat.data();
HFloat confidence = 0.0f;
HFFaceFeatureIdentity mostSimilar = {0};
inspirecv::TimeSpend timeSpend("Face Search 5k@Persistence");
inspire::SpendTimer timeSpend("Face Search 5k@Persistence");
for (size_t i = 0; i < loop; i++) {
timeSpend.Start();
ret = HFFeatureHubFaceSearch(searchFeature, &confidence, &mostSimilar);
@@ -469,7 +469,7 @@ TEST_CASE("test_BenchmarkFaceHubSearchPersistence", "[benchmark]") {
searchFeature.data = searchFeat.data();
HFloat confidence = 0.0f;
HFFaceFeatureIdentity mostSimilar = {0};
inspirecv::TimeSpend timeSpend("Face Search 10k@Persistence");
inspire::SpendTimer timeSpend("Face Search 10k@Persistence");
for (size_t i = 0; i < loop; i++) {
timeSpend.Start();
ret = HFFeatureHubFaceSearch(searchFeature, &confidence, &mostSimilar);
@@ -534,7 +534,7 @@ TEST_CASE("test_BenchmarkFaceHubSearchMemory", "[benchmark]") {
searchFeature.data = searchFeat.data();
HFloat confidence = 0.0f;
HFFaceFeatureIdentity mostSimilar = {0};
inspirecv::TimeSpend timeSpend("Face Search 1k@Memory");
inspire::SpendTimer timeSpend("Face Search 1k@Memory");
for (size_t i = 0; i < loop; i++) {
timeSpend.Start();
ret = HFFeatureHubFaceSearch(searchFeature, &confidence, &mostSimilar);
@@ -592,7 +592,7 @@ TEST_CASE("test_BenchmarkFaceHubSearchMemory", "[benchmark]") {
searchFeature.data = searchFeat.data();
HFloat confidence = 0.0f;
HFFaceFeatureIdentity mostSimilar = {0};
inspirecv::TimeSpend timeSpend("Face Search 5k@Memory");
inspire::SpendTimer timeSpend("Face Search 5k@Memory");
for (size_t i = 0; i < loop; i++) {
timeSpend.Start();
ret = HFFeatureHubFaceSearch(searchFeature, &confidence, &mostSimilar);
@@ -651,7 +651,7 @@ TEST_CASE("test_BenchmarkFaceHubSearchMemory", "[benchmark]") {
searchFeature.data = searchFeat.data();
HFloat confidence = 0.0f;
HFFaceFeatureIdentity mostSimilar = {0};
inspirecv::TimeSpend timeSpend("Face Search 10k@Memory");
inspire::SpendTimer timeSpend("Face Search 10k@Memory");
for (size_t i = 0; i < loop; i++) {
timeSpend.Start();
ret = HFFeatureHubFaceSearch(searchFeature, &confidence, &mostSimilar);

View File

@@ -147,7 +147,7 @@ TEST_CASE("test_FacePipeline", "[face_pipeline]") {
TEST_PRINT("{}", confidence.confidence[0]);
REQUIRE(ret == HSUCCEED);
CHECK(confidence.num > 0);
CHECK(confidence.confidence[0] > 0.8);
CHECK(confidence.confidence[0] > 0.70f);
ret = HFReleaseImageStream(img1Handle);
REQUIRE(ret == HSUCCEED);
@@ -415,7 +415,7 @@ TEST_CASE("test_TrackModeFaceAction", "[face_action]") {
ret = HFCreateInspireFaceSession(parameter, detMode, 3, -1, -1, &session);
REQUIRE(ret == HSUCCEED);
#if 0
#if 0 // Temporarily shut down the processing of frame related cases to prevent excessive data from occupying the github memory
SECTION("Action Blink") {
auto start = 130, end = 150;
std::vector<std::string> filenames = generateFilenames("frame-%04d.jpg", start, end);
@@ -449,7 +449,7 @@ TEST_CASE("test_TrackModeFaceAction", "[face_action]") {
}
#endif
#if 0
#if 0 // Temporarily shut down the processing of frame related cases to prevent excessive data from occupying the github memory
SECTION("Action Jaw Open") {
auto start = 110, end = 150;
std::vector<std::string> filenames = generateFilenames("frame-%04d.jpg", start, end);

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);
}
}

View File

@@ -43,7 +43,7 @@ TEST_CASE("test_SessionParallel", "[Session][Parallel]") {
REQUIRE(ret == HSUCCEED);
float similarity = 0.0f;
inspirecv::TimeSpend timeSpend("Serial loop: " + std::to_string(loop));
inspire::SpendTimer timeSpend("Serial loop: " + std::to_string(loop));
timeSpend.Start();
for (int i = 0; i < loop; ++i) {
ret = CompareTwoFaces(session, image1, image2, similarity);
@@ -52,6 +52,7 @@ TEST_CASE("test_SessionParallel", "[Session][Parallel]") {
}
timeSpend.Stop();
std::cout << timeSpend << std::endl;
;
ret = HFReleaseInspireFaceSession(session);
REQUIRE(ret == HSUCCEED);
@@ -85,7 +86,7 @@ TEST_CASE("test_SessionParallel", "[Session][Parallel]") {
float similaritySum = 0.0f;
std::mutex similarityMutex;
inspirecv::TimeSpend timeSpend("Parallel loop: " + std::to_string(loop) + ", thread: " + std::to_string(N));
inspire::SpendTimer timeSpend("Parallel loop: " + std::to_string(loop) + ", thread: " + std::to_string(N));
timeSpend.Start();
// Start worker thread
@@ -119,6 +120,7 @@ TEST_CASE("test_SessionParallel", "[Session][Parallel]") {
timeSpend.Stop();
std::cout << timeSpend << std::endl;
;
// Optional: Output average similarity(stability)
TEST_PRINT("Average similarity: {}", (similaritySum / loop));

View File

@@ -5,7 +5,7 @@
#include <iostream>
#include "settings/test_settings.h"
#include "unit/test_helper/test_help.h"
#include "inspireface/recognition_module/similarity_converter.h"
#include "inspireface/include/inspireface/similarity_converter.h"
TEST_CASE("test_similarity_converter", "[similarity_converter]") {
DRAW_SPLIT_LINE

View File

@@ -1,9 +1,7 @@
#if 0
#include <iostream>
#include "settings/test_settings.h"
#include "inspireface/c_api/inspireface.h"
#include "inspireface/herror.h"
#include "opencv2/opencv.hpp"
#include "inspireface/include/inspireface/herror.h"
#include "unit/test_helper/test_tools.h"
#include <cstdio>
@@ -11,12 +9,17 @@ TEST_CASE("test_System", "[system]") {
DRAW_SPLIT_LINE
TEST_PRINT_OUTPUT(true);
// The global TEST environment has been started, so this side needs to be temporarily closed
// before testing
HFTerminateInspireFace();
HResult ret;
HInt32 status;
ret = HFQueryInspireFaceLaunchStatus(&status);
REQUIRE(ret == HSUCCEED);
if (status == HF_STATUS_ENABLE) {
// The global TEST environment has been started, so this side needs to be temporarily closed
// before testing
HFTerminateInspireFace();
}
SECTION("Create a session test when it is not loaded") {
HResult ret;
HFSessionCustomParameter parameter = {0};
HFDetectMode detMode = HF_DETECT_MODE_ALWAYS_DETECT;
HFSession session;
@@ -27,7 +30,7 @@ TEST_CASE("test_System", "[system]") {
}
// Restart and start InspireFace
auto ret = HFLaunchInspireFace(GET_RUNTIME_FULLPATH_NAME.c_str());
ret = HFLaunchInspireFace(GET_RUNTIME_FULLPATH_NAME.c_str());
REQUIRE(ret == HSUCCEED);
SECTION("Create a session test when it is reloaded") {
@@ -178,7 +181,7 @@ TEST_CASE("test_SystemStreamReleaseCase", "[system]") {
for (int i = 0; i < createCount; ++i) {
HFImageStream imgHandle;
auto image = cv::imread(GET_DATA("data/bulk/pedestrian.png"));
auto image = inspirecv::Image::Create(GET_DATA("data/bulk/pedestrian.png"));
ret = CVImageToImageStream(image, imgHandle);
REQUIRE(ret == HSUCCEED);
streams[i] = imgHandle;
@@ -267,5 +270,3 @@ TEST_CASE("test_SystemStreamReleaseCase", "[system]") {
REQUIRE(count == 0);
}
}
#endif