@@ -184,8 +184,120 @@ TEST_CASE("test_FacePipeline", "[face_pipeline]") {
184184
185185 ret = HFReleaseInspireFaceSession (session);
186186 REQUIRE (ret == HSUCCEED);
187+ }
188+
189+ }
190+
191+ TEST_CASE (" test_FaceReaction" , " [face_reaction]" ) {
192+ DRAW_SPLIT_LINE
193+ TEST_PRINT_OUTPUT (true );
194+
195+ HResult ret;
196+ HFSessionCustomParameter parameter = {0 };
197+ parameter.enable_interaction_liveness = 1 ;
198+ parameter.enable_liveness = 1 ;
199+ HFDetectMode detMode = HF_DETECT_MODE_ALWAYS_DETECT;
200+ HFSession session;
201+ ret = HFCreateInspireFaceSession (parameter, detMode, 3 , -1 , -1 , &session);
202+ REQUIRE (ret == HSUCCEED);
203+
204+ SECTION (" open eyes" ) {
205+ // Get a face picture
206+ HFImageStream imgHandle;
207+ auto img = cv::imread (GET_DATA (" data/reaction/open_eyes.png" ));
208+ ret = CVImageToImageStream (img, imgHandle);
209+ REQUIRE (ret == HSUCCEED);
210+
211+ // Extract basic face information from photos
212+ HFMultipleFaceData multipleFaceData = {0 };
213+ ret = HFExecuteFaceTrack (session, imgHandle, &multipleFaceData);
214+ REQUIRE (ret == HSUCCEED);
215+ REQUIRE (multipleFaceData.detectedNum > 0 );
216+
217+ // Predict eyes status
218+ ret = HFMultipleFacePipelineProcess (session, imgHandle, &multipleFaceData, parameter);
219+ REQUIRE (ret == HSUCCEED);
220+
221+ // Get results
222+ HFFaceIntereactionResult result;
223+ ret = HFGetFaceIntereactionResult (session, &result);
224+ REQUIRE (multipleFaceData.detectedNum == result.num );
225+ REQUIRE (ret == HSUCCEED);
226+
227+ // Check
228+ CHECK (result.leftEyeStatusConfidence [0 ] > 0 .5f );
229+ CHECK (result.rightEyeStatusConfidence [0 ] > 0 .5f );
230+
231+ ret = HFReleaseImageStream (imgHandle);
232+ REQUIRE (ret == HSUCCEED);
233+
234+ }
235+
236+ SECTION (" close eyes" ) {
237+ // Get a face picture
238+ HFImageStream imgHandle;
239+ auto img = cv::imread (GET_DATA (" data/reaction/close_eyes.jpeg" ));
240+ ret = CVImageToImageStream (img, imgHandle);
241+ REQUIRE (ret == HSUCCEED);
242+
243+ // Extract basic face information from photos
244+ HFMultipleFaceData multipleFaceData = {0 };
245+ ret = HFExecuteFaceTrack (session, imgHandle, &multipleFaceData);
246+ REQUIRE (ret == HSUCCEED);
247+ REQUIRE (multipleFaceData.detectedNum > 0 );
248+
249+ // Predict eyes status
250+ ret = HFMultipleFacePipelineProcess (session, imgHandle, &multipleFaceData, parameter);
251+ REQUIRE (ret == HSUCCEED);
252+
253+ // Get results
254+ HFFaceIntereactionResult result;
255+ ret = HFGetFaceIntereactionResult (session, &result);
256+ REQUIRE (multipleFaceData.detectedNum == result.num );
257+ REQUIRE (ret == HSUCCEED);
258+
259+ // Check
260+ CHECK (result.leftEyeStatusConfidence [0 ] < 0 .5f );
261+ CHECK (result.rightEyeStatusConfidence [0 ] < 0 .5f );
262+
263+ ret = HFReleaseImageStream (imgHandle);
264+ REQUIRE (ret == HSUCCEED);
265+
266+ }
267+
268+ SECTION (" Close one eye and open the other" ) {
269+ // Get a face picture
270+ HFImageStream imgHandle;
271+ auto img = cv::imread (GET_DATA (" data/reaction/close_open_eyes.jpeg" ));
272+ ret = CVImageToImageStream (img, imgHandle);
273+ REQUIRE (ret == HSUCCEED);
187274
275+ // Extract basic face information from photos
276+ HFMultipleFaceData multipleFaceData = {0 };
277+ ret = HFExecuteFaceTrack (session, imgHandle, &multipleFaceData);
278+ REQUIRE (ret == HSUCCEED);
279+ REQUIRE (multipleFaceData.detectedNum > 0 );
280+
281+ // Predict eyes status
282+ ret = HFMultipleFacePipelineProcess (session, imgHandle, &multipleFaceData, parameter);
283+ REQUIRE (ret == HSUCCEED);
284+
285+ // Get results
286+ HFFaceIntereactionResult result;
287+ ret = HFGetFaceIntereactionResult (session, &result);
288+ REQUIRE (multipleFaceData.detectedNum == result.num );
289+ REQUIRE (ret == HSUCCEED);
290+
291+ // Check
292+ CHECK (result.leftEyeStatusConfidence [0 ] < 0 .5f );
293+ CHECK (result.rightEyeStatusConfidence [0 ] > 0 .5f );
294+
295+ ret = HFReleaseImageStream (imgHandle);
296+ REQUIRE (ret == HSUCCEED);
188297
189298 }
190299
191- }
300+ ret = HFReleaseInspireFaceSession (session);
301+ REQUIRE (ret == HSUCCEED);
302+
303+ }
0 commit comments