Repository navigation
Expand file tree
/
Copy pathsample_search_face.cpp
More file actions
129 lines (112 loc) · 4.26 KB
/
Copy pathsample_search_face.cpp
File metadata and controls
129 lines (112 loc) · 4.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <inspireface.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
if (argc != 4) {
HFLogPrint(HF_LOG_ERROR, "Usage: %s <pack_path> <feature_path> <image_path>", argv[0]);
return -1;
}
char* packPath = argv[1];
char* featurePath = argv[2];
char* imagePath = argv[3];
HResult ret;
ret = HFLaunchInspireFace(packPath);
if (ret != HSUCCEED) {
HFLogPrint(HF_LOG_ERROR, "Load Resource error: %d", ret);
return ret;
}
// 1. Enable feature hub
HFFeatureHubConfiguration featureHubConfiguration;
featureHubConfiguration.primaryKeyMode = HF_PK_AUTO_INCREMENT;
featureHubConfiguration.enablePersistence = 1;
featureHubConfiguration.persistenceDbPath = featurePath;
featureHubConfiguration.searchThreshold = 0.32f;
featureHubConfiguration.searchMode = HF_SEARCH_MODE_EXHAUSTIVE;
ret = HFFeatureHubDataEnable(featureHubConfiguration);
if (ret != HSUCCEED) {
HFLogPrint(HF_LOG_ERROR, "Enable feature hub error: %d", ret);
return ret;
}
// 2. Create session
HFSession session;
ret = HFCreateInspireFaceSessionOptional(HF_ENABLE_FACE_RECOGNITION, HF_DETECT_MODE_ALWAYS_DETECT, 1, 320, -1, &session);
if (ret != HSUCCEED) {
HFLogPrint(HF_LOG_ERROR, "Create session error: %d", ret);
return ret;
}
// 3. Load image
HFImageBitmap image;
ret = HFCreateImageBitmapFromFilePath(imagePath, 3, &image);
if (ret != HSUCCEED) {
HFLogPrint(HF_LOG_ERROR, "Create image bitmap error: %d", ret);
HFReleaseInspireFaceSession(session);
return ret;
}
// 4. Create image stream
HFImageStream imageHandle;
ret = HFCreateImageStreamFromImageBitmap(image, HF_CAMERA_ROTATION_0, &imageHandle);
if (ret != HSUCCEED) {
HFLogPrint(HF_LOG_ERROR, "Create image stream error: %d", ret);
HFReleaseImageBitmap(image);
HFReleaseInspireFaceSession(session);
return ret;
}
// 5. Detect face
HFMultipleFaceData multipleFaceData;
ret = HFExecuteFaceTrack(session, imageHandle, &multipleFaceData);
if (ret != HSUCCEED) {
HFLogPrint(HF_LOG_ERROR, "Execute face track error: %d", ret);
HFReleaseImageStream(imageHandle);
HFReleaseImageBitmap(image);
HFReleaseInspireFaceSession(session);
return ret;
}
if (multipleFaceData.detectedNum == 0) {
HFLogPrint(HF_LOG_WARN, "No face detected in image: %s", imagePath);
HFReleaseImageStream(imageHandle);
HFReleaseImageBitmap(image);
HFReleaseInspireFaceSession(session);
return -1;
}
HFLogPrint(HF_LOG_INFO, "Face detected: %d", multipleFaceData.detectedNum);
// 6. Extract feature
HFFaceFeature feature;
ret = HFCreateFaceFeature(&feature);
if (ret != HSUCCEED) {
HFLogPrint(HF_LOG_ERROR, "Create face feature error: %d", ret);
HFReleaseImageStream(imageHandle);
HFReleaseImageBitmap(image);
HFReleaseInspireFaceSession(session);
return ret;
}
ret = HFFaceFeatureExtractTo(session, imageHandle, multipleFaceData.tokens[0], feature);
if (ret != HSUCCEED) {
HFLogPrint(HF_LOG_ERROR, "Extract feature error: %d", ret);
HFReleaseFaceFeature(&feature);
HFReleaseImageStream(imageHandle);
HFReleaseImageBitmap(image);
HFReleaseInspireFaceSession(session);
return ret;
}
// 7. Search face
HFloat confidence;
HFFaceFeatureIdentity searchResult = {0};
ret = HFFeatureHubFaceSearch(feature, &confidence, &searchResult);
if (ret != HSUCCEED) {
HFLogPrint(HF_LOG_ERROR, "Search face feature error: %d", ret);
} else {
if (searchResult.id != -1) {
HFLogPrint(HF_LOG_INFO, "Search face feature success!");
HFLogPrint(HF_LOG_INFO, "Found matching face ID: %d", searchResult.id);
HFLogPrint(HF_LOG_INFO, "Confidence score: %.4f", confidence);
} else {
HFLogPrint(HF_LOG_INFO, "No matching face found in database");
}
}
// 8. Clean up
HFReleaseFaceFeature(&feature);
HFReleaseImageStream(imageHandle);
HFReleaseImageBitmap(image);
HFReleaseInspireFaceSession(session);
HFDeBugShowResourceStatistics();
return ret;
}