11
11
12
12
import unittest
13
13
import os
14
+ import numpy as np
14
15
from click .testing import CliRunner
15
16
16
17
from face_recognition import api
@@ -94,6 +95,50 @@ def test_face_encodings(self):
94
95
self .assertEqual (len (encodings ), 1 )
95
96
self .assertEqual (len (encodings [0 ]), 128 )
96
97
98
+ def test_face_distance (self ):
99
+ img_a1 = api .load_image_file (os .path .join (os .path .dirname (__file__ ), 'test_images' , 'obama.jpg' ))
100
+ img_a2 = api .load_image_file (os .path .join (os .path .dirname (__file__ ), 'test_images' , 'obama2.jpg' ))
101
+ img_a3 = api .load_image_file (os .path .join (os .path .dirname (__file__ ), 'test_images' , 'obama3.jpg' ))
102
+
103
+ img_b1 = api .load_image_file (os .path .join (os .path .dirname (__file__ ), 'test_images' , 'biden.jpg' ))
104
+
105
+ face_encoding_a1 = api .face_encodings (img_a1 )[0 ]
106
+ face_encoding_a2 = api .face_encodings (img_a2 )[0 ]
107
+ face_encoding_a3 = api .face_encodings (img_a3 )[0 ]
108
+ face_encoding_b1 = api .face_encodings (img_b1 )[0 ]
109
+
110
+ faces_to_compare = [
111
+ face_encoding_a2 ,
112
+ face_encoding_a3 ,
113
+ face_encoding_b1 ]
114
+
115
+ distance_results = api .face_distance (faces_to_compare , face_encoding_a1 )
116
+
117
+ # 0.6 is the default face distance match threshold. So we'll spot-check that the numbers returned
118
+ # are above or below that based on if they should match (since the exact numbers could vary).
119
+ self .assertEqual (type (distance_results ), np .ndarray )
120
+ self .assertLessEqual (distance_results [0 ], 0.6 )
121
+ self .assertLessEqual (distance_results [1 ], 0.6 )
122
+ self .assertGreater (distance_results [2 ], 0.6 )
123
+
124
+ def test_face_distance_empty_lists (self ):
125
+ img = api .load_image_file (os .path .join (os .path .dirname (__file__ ), 'test_images' , 'biden.jpg' ))
126
+ face_encoding = api .face_encodings (img )[0 ]
127
+
128
+ # empty python list
129
+ faces_to_compare = []
130
+
131
+ distance_results = api .face_distance (faces_to_compare , face_encoding )
132
+ self .assertEqual (type (distance_results ), np .ndarray )
133
+ self .assertEqual (len (distance_results ), 0 )
134
+
135
+ # empty numpy list
136
+ faces_to_compare = np .array ([])
137
+
138
+ distance_results = api .face_distance (faces_to_compare , face_encoding )
139
+ self .assertEqual (type (distance_results ), np .ndarray )
140
+ self .assertEqual (len (distance_results ), 0 )
141
+
97
142
def test_compare_faces (self ):
98
143
img_a1 = api .load_image_file (os .path .join (os .path .dirname (__file__ ), 'test_images' , 'obama.jpg' ))
99
144
img_a2 = api .load_image_file (os .path .join (os .path .dirname (__file__ ), 'test_images' , 'obama2.jpg' ))
@@ -112,10 +157,30 @@ def test_compare_faces(self):
112
157
face_encoding_b1 ]
113
158
114
159
match_results = api .compare_faces (faces_to_compare , face_encoding_a1 )
160
+
161
+ self .assertEqual (type (match_results ), list )
115
162
self .assertTrue (match_results [0 ])
116
163
self .assertTrue (match_results [1 ])
117
164
self .assertFalse (match_results [2 ])
118
165
166
+ def test_compare_faces_empty_lists (self ):
167
+ img = api .load_image_file (os .path .join (os .path .dirname (__file__ ), 'test_images' , 'biden.jpg' ))
168
+ face_encoding = api .face_encodings (img )[0 ]
169
+
170
+ # empty python list
171
+ faces_to_compare = []
172
+
173
+ match_results = api .compare_faces (faces_to_compare , face_encoding )
174
+ self .assertEqual (type (match_results ), list )
175
+ self .assertListEqual (match_results , [])
176
+
177
+ # empty numpy list
178
+ faces_to_compare = np .array ([])
179
+
180
+ match_results = api .compare_faces (faces_to_compare , face_encoding )
181
+ self .assertEqual (type (match_results ), list )
182
+ self .assertListEqual (match_results , [])
183
+
119
184
def test_command_line_interface (self ):
120
185
target_string = '--help Show this message and exit.'
121
186
runner = CliRunner ()
0 commit comments