Skip to content

Commit 66ff7a3

Browse files
authored
Merge pull request #149 from HyperInspire/feature/update_track_mode
Feature/update track mode Former-commit-id: b0e8c6f
2 parents 0405ca3 + 77fe252 commit 66ff7a3

File tree

31 files changed

+1375
-232
lines changed

31 files changed

+1375
-232
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
1010
# Current version
1111
set(INSPIRE_FACE_VERSION_MAJOR 1)
1212
set(INSPIRE_FACE_VERSION_MINOR 1)
13-
set(INSPIRE_FACE_VERSION_PATCH 11)
13+
set(INSPIRE_FACE_VERSION_PATCH 12)
1414

1515
# Converts the version number to a string
1616
string(CONCAT INSPIRE_FACE_VERSION_MAJOR_STR ${INSPIRE_FACE_VERSION_MAJOR})

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ Please contact [contact@insightface.ai](mailto:contact@insightface.ai?subject=In
1414

1515
## Change Logs
1616

17+
**`2025-01-21`** Update all models to t3 and add tool to convert cosine similarity to percentage.
18+
1719
**`2025-01-08`** Support inference on Rockchip devices **RK3566/RK3568** NPU.
1820

1921
**`2024-12-25`** Add support for optional **RKRGA** image acceleration processing on Rockchip devices.

android/InspireFaceExample/inspireface/src/main/java/com/insightface/sdk/inspireface/InspireFace.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.insightface.sdk.inspireface.base.RGBLivenessConfidence;
2121
import com.insightface.sdk.inspireface.base.SearchTopKResults;
2222
import com.insightface.sdk.inspireface.base.Session;
23+
import com.insightface.sdk.inspireface.base.SimilarityConverterConfig;
2324
import com.insightface.sdk.inspireface.base.TypeDefine;
2425
import com.insightface.sdk.inspireface.utils.SDKUtils;
2526

@@ -214,6 +215,27 @@ public static CustomParameter CreateCustomParameter(boolean enableRecognition, b
214215
*/
215216
public static native void SetFaceDetectThreshold(Session session, float threshold);
216217

218+
/**
219+
* Set track mode smooth ratio, default value is 0.025
220+
* @param session Session object
221+
* @param ratio Smooth ratio
222+
*/
223+
public static native void SetTrackModeSmoothRatio(Session session, float ratio);
224+
225+
/**
226+
* Set track mode num smooth cache frame, default value is 15
227+
* @param session Session object
228+
* @param num Num smooth cache frame
229+
*/
230+
public static native void SetTrackModeNumSmoothCacheFrame(Session session, int num);
231+
232+
/**
233+
* Set track mode detect interval, default value is 20
234+
* @param session Session object
235+
* @param interval Detect interval
236+
*/
237+
public static native void SetTrackModeDetectInterval(Session session, int interval);
238+
217239
/**
218240
* Enable feature hub data
219241
* @param configuration FeatureHubConfiguration object
@@ -288,6 +310,26 @@ public static CustomParameter CreateCustomParameter(boolean enableRecognition, b
288310
*/
289311
public static native int GetFeatureLength();
290312

313+
314+
/**
315+
* Get cosine similarity converter
316+
* @return SimilarityConverterConfig object
317+
*/
318+
public static native SimilarityConverterConfig GetCosineSimilarityConverter();
319+
320+
/**
321+
* Update cosine similarity converter
322+
* @param config SimilarityConverterConfig object
323+
*/
324+
public static native void UpdateCosineSimilarityConverter(SimilarityConverterConfig config);
325+
326+
/**
327+
* Convert cosine similarity to percentage
328+
* @param similarity Cosine similarity
329+
* @return Percentage similarity
330+
*/
331+
public static native float CosineSimilarityConvertToPercentage(float similarity);
332+
291333
/**
292334
* Face comparison
293335
* @param feature1 FaceFeature object
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.insightface.sdk.inspireface.base;
2+
3+
public class SimilarityConverterConfig {
4+
public float threshold;
5+
public float middleScore;
6+
public float steepness;
7+
public float outputMin;
8+
public float outputMax;
9+
}

cpp/inspireface/CMakeLists.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ if (ISF_ENABLE_RKNN)
4040
# For rknpu2 with armv7, we recommend linking static libraries by default
4141
set(ISF_RKNN_API_LIB ${ISF_THIRD_PARTY_DIR}/inspireface-precompile-lite/rknn/${ISF_RKNPU_MAJOR}/runtime/${RK_PLATFORM}/librknn_api/${ISF_RK_COMPILER_TYPE}/librknnmrt.a)
4242
set(RKNN_LINKED ${ISF_RKNN_API_LIB})
43+
set(RKNN_USE_STATIC_LIBS TRUE)
4344
endif()
4445
endif()
4546

@@ -206,3 +207,17 @@ endif ()
206207
if (ISF_RK_COMPILER_TYPE STREQUAL "aarch64")
207208
install(FILES ${ISF_RKNN_API_LIB}/librknnrt.so DESTINATION ${CMAKE_INSTALL_PREFIX}/InspireFace/lib)
208209
endif()
210+
211+
if (NOT ISF_BUILD_SHARED_LIBS)
212+
if(MNN_BUILD_SHARED_LIBS)
213+
install(FILES ${CMAKE_BINARY_DIR}/3rdparty/MNN/libMNN.so DESTINATION ${CMAKE_INSTALL_PREFIX}/InspireFace/lib)
214+
else()
215+
install(FILES ${CMAKE_BINARY_DIR}/3rdparty/MNN/libMNN.a DESTINATION ${CMAKE_INSTALL_PREFIX}/InspireFace/lib)
216+
endif()
217+
if(RKNN_USE_STATIC_LIBS)
218+
# To be added: The compilation of the RK series needs to be added
219+
install(FILES ${ISF_RKNN_API_LIB} DESTINATION ${CMAKE_INSTALL_PREFIX}/InspireFace/lib)
220+
endif()
221+
222+
endif()
223+

cpp/inspireface/c_api/inspireface.cc

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "feature_hub/feature_hub_db.h"
1111
#include "initialization_module/launch.h"
1212
#include "initialization_module/resource_manage.h"
13+
#include "recognition_module/similarity_converter.h"
1314

1415
using namespace inspire;
1516

@@ -66,6 +67,74 @@ HYPER_CAPI_EXPORT extern HResult HFCreateImageStream(PHFImageData data, HFImageS
6667
return HSUCCEED;
6768
}
6869

70+
HYPER_CAPI_EXPORT extern HResult HFCreateImageStreamEmpty(HFImageStream *handle) {
71+
if (handle == nullptr) {
72+
return HERR_INVALID_IMAGE_STREAM_HANDLE;
73+
}
74+
auto stream = new HF_CameraStream();
75+
*handle = (HFImageStream)stream;
76+
return HSUCCEED;
77+
}
78+
79+
HYPER_CAPI_EXPORT extern HResult HFImageStreamSetBuffer(HFImageStream handle, HPUInt8 buffer, HInt32 width, HInt32 height) {
80+
if (handle == nullptr) {
81+
return HERR_INVALID_IMAGE_STREAM_HANDLE;
82+
}
83+
((HF_CameraStream *)handle)->impl.SetDataBuffer(buffer, width, height);
84+
return HSUCCEED;
85+
}
86+
87+
HYPER_CAPI_EXPORT extern HResult HFImageStreamSetRotation(HFImageStream handle, HFRotation rotation) {
88+
if (handle == nullptr) {
89+
return HERR_INVALID_IMAGE_STREAM_HANDLE;
90+
}
91+
switch (rotation) {
92+
case HF_CAMERA_ROTATION_90:
93+
((HF_CameraStream *)handle)->impl.SetRotationMode(inspirecv::ROTATION_90);
94+
break;
95+
case HF_CAMERA_ROTATION_180:
96+
((HF_CameraStream *)handle)->impl.SetRotationMode(inspirecv::ROTATION_180);
97+
break;
98+
case HF_CAMERA_ROTATION_270:
99+
((HF_CameraStream *)handle)->impl.SetRotationMode(inspirecv::ROTATION_270);
100+
break;
101+
default:
102+
((HF_CameraStream *)handle)->impl.SetRotationMode(inspirecv::ROTATION_0);
103+
break;
104+
}
105+
return HSUCCEED;
106+
}
107+
108+
HYPER_CAPI_EXPORT extern HResult HFImageStreamSetFormat(HFImageStream handle, HFImageFormat format) {
109+
if (handle == nullptr) {
110+
return HERR_INVALID_IMAGE_STREAM_HANDLE;
111+
}
112+
switch (format) {
113+
case HF_STREAM_RGB:
114+
((HF_CameraStream *)handle)->impl.SetDataFormat(inspirecv::RGB);
115+
break;
116+
case HF_STREAM_BGR:
117+
((HF_CameraStream *)handle)->impl.SetDataFormat(inspirecv::BGR);
118+
break;
119+
case HF_STREAM_RGBA:
120+
((HF_CameraStream *)handle)->impl.SetDataFormat(inspirecv::RGBA);
121+
break;
122+
case HF_STREAM_BGRA:
123+
((HF_CameraStream *)handle)->impl.SetDataFormat(inspirecv::BGRA);
124+
break;
125+
case HF_STREAM_YUV_NV12:
126+
((HF_CameraStream *)handle)->impl.SetDataFormat(inspirecv::NV12);
127+
break;
128+
case HF_STREAM_YUV_NV21:
129+
((HF_CameraStream *)handle)->impl.SetDataFormat(inspirecv::NV21);
130+
break;
131+
default:
132+
return HERR_INVALID_IMAGE_STREAM_PARAM; // Assume there's a return code for unsupported
133+
// formats
134+
}
135+
return HSUCCEED;
136+
}
137+
69138
HYPER_CAPI_EXPORT extern HResult HFReleaseImageStream(HFImageStream streamHandle) {
70139
if (streamHandle == nullptr) {
71140
return HERR_INVALID_IMAGE_STREAM_HANDLE;
@@ -372,6 +441,16 @@ HResult HFQueryExpansiveHardwareRockchipDmaHeapPath(HString path) {
372441
return HSUCCEED;
373442
}
374443

444+
HResult HFSetExpansiveHardwareAppleCoreMLModelPath(HString path) {
445+
// TODO: Implement this function
446+
return HSUCCEED;
447+
}
448+
449+
HResult HFQueryExpansiveHardwareAppleCoreMLModelPath(HString path) {
450+
// TODO: Implement this function
451+
return HSUCCEED;
452+
}
453+
375454
HResult HFFeatureHubDataEnable(HFFeatureHubConfiguration configuration) {
376455
inspire::DatabaseConfiguration param;
377456
if (configuration.primaryKeyMode != HF_PK_AUTO_INCREMENT && configuration.primaryKeyMode != HF_PK_MANUAL_INPUT) {
@@ -447,6 +526,39 @@ HResult HFSessionSetFaceDetectThreshold(HFSession session, HFloat threshold) {
447526
return ctx->impl.SetFaceDetectThreshold(threshold);
448527
}
449528

529+
HResult HFSessionSetTrackModeSmoothRatio(HFSession session, HFloat ratio) {
530+
if (session == nullptr) {
531+
return HERR_INVALID_CONTEXT_HANDLE;
532+
}
533+
HF_FaceAlgorithmSession *ctx = (HF_FaceAlgorithmSession *)session;
534+
if (ctx == nullptr) {
535+
return HERR_INVALID_CONTEXT_HANDLE;
536+
}
537+
return ctx->impl.SetTrackModeSmoothRatio(ratio);
538+
}
539+
540+
HResult HFSessionSetTrackModeNumSmoothCacheFrame(HFSession session, HInt32 num) {
541+
if (session == nullptr) {
542+
return HERR_INVALID_CONTEXT_HANDLE;
543+
}
544+
HF_FaceAlgorithmSession *ctx = (HF_FaceAlgorithmSession *)session;
545+
if (ctx == nullptr) {
546+
return HERR_INVALID_CONTEXT_HANDLE;
547+
}
548+
return ctx->impl.SetTrackModeNumSmoothCacheFrame(num);
549+
}
550+
551+
HResult HFSessionSetTrackModeDetectInterval(HFSession session, HInt32 num) {
552+
if (session == nullptr) {
553+
return HERR_INVALID_CONTEXT_HANDLE;
554+
}
555+
HF_FaceAlgorithmSession *ctx = (HF_FaceAlgorithmSession *)session;
556+
if (ctx == nullptr) {
557+
return HERR_INVALID_CONTEXT_HANDLE;
558+
}
559+
return ctx->impl.SetTrackModeDetectInterval(num);
560+
}
561+
450562
HResult HFExecuteFaceTrack(HFSession session, HFImageStream streamHandle, PHFMultipleFaceData results) {
451563
if (session == nullptr) {
452564
return HERR_INVALID_CONTEXT_HANDLE;
@@ -648,6 +760,49 @@ HResult HFFaceComparison(HFFaceFeature feature1, HFFaceFeature feature2, HPFloat
648760
return ret;
649761
}
650762

763+
HResult HFGetRecommendedCosineThreshold(HPFloat threshold) {
764+
if (!INSPIRE_LAUNCH->isMLoad()) {
765+
INSPIRE_LOGW("Inspireface is not launched, using default threshold 0.48");
766+
}
767+
*threshold = SIMILARITY_CONVERTER_GET_RECOMMENDED_COSINE_THRESHOLD();
768+
return HSUCCEED;
769+
}
770+
771+
HResult HFCosineSimilarityConvertToPercentage(HFloat similarity, HPFloat result) {
772+
if (!INSPIRE_LAUNCH->isMLoad()) {
773+
INSPIRE_LOGW("Inspireface is not launched.");
774+
}
775+
*result = SIMILARITY_CONVERTER_RUN(similarity);
776+
return HSUCCEED;
777+
}
778+
779+
HResult HFUpdateCosineSimilarityConverter(HFSimilarityConverterConfig config) {
780+
if (!INSPIRE_LAUNCH->isMLoad()) {
781+
INSPIRE_LOGW("Inspireface is not launched.");
782+
}
783+
inspire::SimilarityConverterConfig cfg;
784+
cfg.threshold = config.threshold;
785+
cfg.middleScore = config.middleScore;
786+
cfg.steepness = config.steepness;
787+
cfg.outputMin = config.outputMin;
788+
cfg.outputMax = config.outputMax;
789+
SIMILARITY_CONVERTER_UPDATE_CONFIG(cfg);
790+
return HSUCCEED;
791+
}
792+
793+
HResult HFGetCosineSimilarityConverter(PHFSimilarityConverterConfig config) {
794+
if (!INSPIRE_LAUNCH->isMLoad()) {
795+
INSPIRE_LOGW("Inspireface is not launched.");
796+
}
797+
inspire::SimilarityConverterConfig cfg = SIMILARITY_CONVERTER_GET_CONFIG();
798+
config->threshold = cfg.threshold;
799+
config->middleScore = cfg.middleScore;
800+
config->steepness = cfg.steepness;
801+
config->outputMin = cfg.outputMin;
802+
config->outputMax = cfg.outputMax;
803+
return HSUCCEED;
804+
}
805+
651806
HResult HFGetFeatureLength(HPInt32 num) {
652807
*num = 512;
653808

0 commit comments

Comments
 (0)