Update InspireFace to 1.1.0

This commit is contained in:
JingyuYan
2024-06-19 16:41:25 +08:00
parent a1e535cf54
commit 098ac7c31f
89 changed files with 4097 additions and 511 deletions

View File

@@ -33,7 +33,7 @@ TEST_FACE_COMPARISON_IMAGE_THRESHOLD = 0.45
TEST_PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
# Current project path
CURRENT_PROJECT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
CURRENT_PROJECT_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Main project path
MAIN_PROJECT_PATH = os.path.dirname(CURRENT_PROJECT_PATH)

View File

@@ -181,7 +181,6 @@ def lfw_generator(directory_path):
def batch_import_lfw_faces(lfw_path, engine: ifac.InspireFaceSession, num_of_faces: int):
engine.set_track_mode(HF_DETECT_MODE_IMAGE)
generator = lfw_generator(lfw_path)
registered_faces = 0

View File

@@ -16,7 +16,7 @@ class CameraStreamCase(unittest.TestCase):
def test_stream_rotation(self) -> None:
# Prepare material
engine = ifac.InspireFaceSession(HF_ENABLE_NONE, HF_DETECT_MODE_IMAGE)
engine = ifac.InspireFaceSession(HF_ENABLE_NONE, HF_DETECT_MODE_ALWAYS_DETECT)
# Prepare rotation images
rotation_images_filenames = ["rotate/rot_0.jpg", "rotate/rot_90.jpg", "rotate/rot_180.jpg","rotate/rot_270.jpg"]
rotation_images = [cv2.imread(get_test_data(path)) for path in rotation_images_filenames]

View File

@@ -12,13 +12,12 @@ class FaceRecognitionBaseCase(unittest.TestCase):
def setUp(self) -> None:
# Prepare material
track_mode = HF_DETECT_MODE_IMAGE
track_mode = HF_DETECT_MODE_ALWAYS_DETECT
param = ifac.SessionCustomParameter()
param.enable_recognition = True
self.engine = ifac.InspireFaceSession(param, track_mode, 10)
def test_face_feature_extraction(self):
self.engine.set_track_mode(mode=HF_DETECT_MODE_IMAGE)
# Prepare a image
image = cv2.imread(get_test_data("bulk/kun.jpg"))
self.assertIsNotNone(image)
@@ -38,7 +37,6 @@ class FaceRecognitionBaseCase(unittest.TestCase):
self.assertIsNotNone(feature)
#
def test_face_comparison(self):
self.engine.set_track_mode(mode=HF_DETECT_MODE_IMAGE)
# Prepare two pictures of someone
images_path_list = [get_test_data("bulk/kun.jpg"), get_test_data("bulk/jntm.jpg")]
self.assertEqual(len(images_path_list), 2, "Only 2 photos can be used for the 1v1 scene.")
@@ -89,7 +87,7 @@ class FaceRecognitionCRUDMemoryCase(unittest.TestCase):
search_threshold=TEST_FACE_COMPARISON_IMAGE_THRESHOLD,
)
ifac.feature_hub_enable(config)
track_mode = HF_DETECT_MODE_IMAGE
track_mode = HF_DETECT_MODE_ALWAYS_DETECT
param = ifac.SessionCustomParameter()
param.enable_recognition = True
cls.engine = ifac.InspireFaceSession(param, track_mode)
@@ -188,7 +186,7 @@ class FaceRecognitionFeatureExtractCase(unittest.TestCase):
self.stream = ifac.ImageStream.load_from_cv_image(image)
self.assertIsNotNone(self.stream)
# Prepare material
track_mode = HF_DETECT_MODE_IMAGE
track_mode = HF_DETECT_MODE_ALWAYS_DETECT
param = ifac.SessionCustomParameter()
param.enable_recognition = True
self.engine = ifac.InspireFaceSession(param, track_mode)
@@ -207,7 +205,6 @@ class FaceRecognitionFeatureExtractCase(unittest.TestCase):
@benchmark(test_name="Feature Extract", loop=1000)
def test_benchmark_feature_extract(self):
self.engine.set_track_mode(HF_DETECT_MODE_IMAGE)
for _ in range(self.loop):
feature = self.engine.face_feature_extract(self.stream, self.face)
self.assertEqual(TEST_MODEL_FACE_FEATURE_LENGTH, feature.size)

View File

@@ -9,10 +9,13 @@ class FaceTrackerCase(unittest.TestCase):
def setUp(self) -> None:
# Prepare material
track_mode = HF_DETECT_MODE_IMAGE # Use video mode
track_mode = HF_DETECT_MODE_ALWAYS_DETECT
self.engine = ifac.InspireFaceSession(param=ifac.SessionCustomParameter(),
detect_mode=track_mode)
self.engine_tk = ifac.InspireFaceSession(param=ifac.SessionCustomParameter(),
detect_mode=HF_DETECT_MODE_LIGHT_TRACK)
def test_face_detection_from_image(self):
image = cv2.imread(get_test_data("bulk/kun.jpg"))
self.assertIsNotNone(image)
@@ -33,8 +36,6 @@ class FaceTrackerCase(unittest.TestCase):
self.assertEqual(len(self.engine.face_detection(any_image)), 0)
def test_face_pose(self):
self.engine.set_track_mode(HF_DETECT_MODE_IMAGE)
# Test yaw (shake one's head)
left_face = cv2.imread(get_test_data("pose/left_face.jpeg"))
self.assertIsNotNone(left_face)
@@ -84,11 +85,9 @@ class FaceTrackerCase(unittest.TestCase):
self.assertEqual(True, right_face_roll > 30)
def test_face_track_from_video(self):
self.engine.set_track_mode(HF_DETECT_MODE_VIDEO)
# Read a video file
video_gen = read_video_generator(get_test_data("video/810_1684206192.mp4"))
results = [self.engine.face_detection(frame) for frame in video_gen]
results = [self.engine_tk.face_detection(frame) for frame in video_gen]
num_of_frame = len(results)
num_of_track_loss = len([faces for faces in results if not faces])
total_track_ids = [faces[0].track_id for faces in results if faces]
@@ -117,30 +116,27 @@ class FaceTrackerBenchmarkCase(unittest.TestCase):
self.image = cv2.imread(get_test_data("bulk/kun.jpg"))
self.assertIsNotNone(self.image)
# Prepare material
track_mode = HF_DETECT_MODE_VIDEO # Use video mode
self.engine = ifac.InspireFaceSession(HF_ENABLE_NONE, track_mode, )
self.engine = ifac.InspireFaceSession(HF_ENABLE_NONE, HF_DETECT_MODE_ALWAYS_DETECT, )
self.engine_tk = ifac.InspireFaceSession(HF_ENABLE_NONE, HF_DETECT_MODE_LIGHT_TRACK, )
# Prepare video data
self.video_gen = read_video_generator(get_test_data("video/810_1684206192.mp4"))
@benchmark(test_name="Face Detect", loop=1000)
def test_benchmark_face_detect(self):
self.engine.set_track_mode(HF_DETECT_MODE_IMAGE)
for _ in range(self.loop):
faces = self.engine.face_detection(self.image)
self.assertEqual(len(faces), 1, "No face detected may have an error, please check.")
@benchmark(test_name="Face Track", loop=1000)
def test_benchmark_face_track(self):
self.engine.set_track_mode(HF_DETECT_MODE_VIDEO)
for _ in range(self.loop):
faces = self.engine.face_detection(self.image)
faces = self.engine_tk.face_detection(self.image)
self.assertEqual(len(faces), 1, "No face detected may have an error, please check.")
@benchmark(test_name="Face Track(Video)", loop=345)
def test_benchmark_face_track_video(self):
self.engine.set_track_mode(HF_DETECT_MODE_VIDEO)
for frame in self.video_gen:
faces = self.engine.face_detection(frame)
faces = self.engine_tk.face_detection(frame)
self.assertEqual(len(faces), 1, "No face detected may have an error, please check.")
@classmethod