mirror of
https://github.com/deepinsight/insightface.git
synced 2026-01-17 06:40:17 +00:00
Update inspireface to 1.2.0
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
/**
|
||||
* Created by Jingyu Yan
|
||||
* @date 2024-10-01
|
||||
*/
|
||||
#include <iostream>
|
||||
#include <inspireface.h>
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
// Check whether the number of parameters is correct
|
||||
if (argc < 3 || argc > 4) {
|
||||
HFLogPrint(HF_LOG_ERROR, "Usage: %s <pack_path> <source_path> [rotation]", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
auto packPath = argv[1];
|
||||
auto sourcePath = argv[2];
|
||||
int rotation = 0;
|
||||
|
||||
// If rotation is provided, check and set the value
|
||||
if (argc == 4) {
|
||||
rotation = std::atoi(argv[3]);
|
||||
if (rotation != 0 && rotation != 90 && rotation != 180 && rotation != 270) {
|
||||
HFLogPrint(HF_LOG_ERROR, "Invalid rotation value. Allowed values are 0, 90, 180, 270.");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
HFRotation rotation_enum;
|
||||
// Set rotation based on input parameter
|
||||
switch (rotation) {
|
||||
case 90:
|
||||
rotation_enum = HF_CAMERA_ROTATION_90;
|
||||
break;
|
||||
case 180:
|
||||
rotation_enum = HF_CAMERA_ROTATION_180;
|
||||
break;
|
||||
case 270:
|
||||
rotation_enum = HF_CAMERA_ROTATION_270;
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
rotation_enum = HF_CAMERA_ROTATION_0;
|
||||
break;
|
||||
}
|
||||
|
||||
HFLogPrint(HF_LOG_INFO, "Pack file Path: %s", packPath);
|
||||
HFLogPrint(HF_LOG_INFO, "Source file Path: %s", sourcePath);
|
||||
HFLogPrint(HF_LOG_INFO, "Rotation: %d", rotation);
|
||||
|
||||
HFSetLogLevel(HF_LOG_INFO);
|
||||
|
||||
HResult ret;
|
||||
// The resource file must be loaded before it can be used
|
||||
ret = HFLaunchInspireFace(packPath);
|
||||
if (ret != HSUCCEED) {
|
||||
HFLogPrint(HF_LOG_ERROR, "Load Resource error: %d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Enable the functions in the pipeline: mask detection, live detection, and face quality
|
||||
// detection
|
||||
HOption option = HF_ENABLE_QUALITY | HF_ENABLE_MASK_DETECT | HF_ENABLE_LIVENESS | HF_ENABLE_DETECT_MODE_LANDMARK;
|
||||
// Non-video or frame sequence mode uses IMAGE-MODE, which is always face detection without
|
||||
// tracking
|
||||
HFDetectMode detMode = HF_DETECT_MODE_ALWAYS_DETECT;
|
||||
// Maximum number of faces detected
|
||||
HInt32 maxDetectNum = 20;
|
||||
// Face detection image input level
|
||||
HInt32 detectPixelLevel = 160;
|
||||
// Handle of the current face SDK algorithm context
|
||||
HFSession session = {0};
|
||||
ret = HFCreateInspireFaceSessionOptional(option, detMode, maxDetectNum, detectPixelLevel, -1, &session);
|
||||
if (ret != HSUCCEED) {
|
||||
HFLogPrint(HF_LOG_ERROR, "Create FaceContext error: %d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
HFSessionSetTrackPreviewSize(session, detectPixelLevel);
|
||||
HFSessionSetFilterMinimumFacePixelSize(session, 4);
|
||||
|
||||
// Load a image
|
||||
HFImageBitmap image;
|
||||
ret = HFCreateImageBitmapFromFilePath(sourcePath, 3, &image);
|
||||
if (ret != HSUCCEED) {
|
||||
HFLogPrint(HF_LOG_ERROR, "The source entered is not a picture or read error.");
|
||||
return ret;
|
||||
}
|
||||
// Prepare an image parameter structure for configuration
|
||||
HFImageStream imageHandle = {0};
|
||||
ret = HFCreateImageStreamFromImageBitmap(image, rotation_enum, &imageHandle);
|
||||
if (ret != HSUCCEED) {
|
||||
HFLogPrint(HF_LOG_ERROR, "Create ImageStream error: %d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int loop = 100;
|
||||
|
||||
// Enable the cost spend
|
||||
HFSessionSetEnableTrackCostSpend(session, 1);
|
||||
|
||||
// Execute HF_FaceContextRunFaceTrack captures face information in an image
|
||||
HFMultipleFaceData multipleFaceData = {0};
|
||||
for (int i = 0; i < loop; i++) {
|
||||
ret = HFExecuteFaceTrack(session, imageHandle, &multipleFaceData);
|
||||
if (ret != HSUCCEED) {
|
||||
HFLogPrint(HF_LOG_ERROR, "Execute HFExecuteFaceTrack error: %d", ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
HFLogPrint(HF_LOG_INFO, "Number of Detection: %d", multipleFaceData.detectedNum);
|
||||
HFSessionPrintTrackCostSpend(session);
|
||||
|
||||
ret = HFReleaseImageStream(imageHandle);
|
||||
if (ret != HSUCCEED) {
|
||||
HFLogPrint(HF_LOG_ERROR, "Release image stream error: %d", ret);
|
||||
}
|
||||
// The memory must be freed at the end of the program
|
||||
ret = HFReleaseInspireFaceSession(session);
|
||||
if (ret != HSUCCEED) {
|
||||
HFLogPrint(HF_LOG_ERROR, "Release session error: %d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = HFReleaseImageBitmap(image);
|
||||
if (ret != HSUCCEED) {
|
||||
HFLogPrint(HF_LOG_ERROR, "Release image bitmap error: %d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user