78 lines
2.4 KiB
Python
78 lines
2.4 KiB
Python
import timeit
|
|
|
|
# Note: This example is only tested with Python 3 (not Python 2)
|
|
|
|
# This is a very simple benchmark to give you an idea of how fast each step of face recognition will run on your system.
|
|
# Notice that face detection gets very slow at large image sizes. So you might consider running face detection on a
|
|
# scaled down version of your image and then running face encodings on the the full size image.
|
|
|
|
TEST_IMAGES = [
|
|
"obama-240p.jpg",
|
|
"obama-480p.jpg",
|
|
"obama-720p.jpg",
|
|
"obama-1080p.jpg"
|
|
]
|
|
|
|
|
|
def run_test(setup, test, iterations_per_test=5, tests_to_run=10):
|
|
fastest_execution = min(timeit.Timer(test, setup=setup).repeat(tests_to_run, iterations_per_test))
|
|
execution_time = fastest_execution / iterations_per_test
|
|
fps = 1.0 / execution_time
|
|
return execution_time, fps
|
|
|
|
|
|
setup_locate_faces = """
|
|
import face_recognition
|
|
|
|
image = face_recognition.load_image_file("{}")
|
|
"""
|
|
|
|
test_locate_faces = """
|
|
face_locations = face_recognition.face_locations(image)
|
|
"""
|
|
|
|
setup_face_landmarks = """
|
|
import face_recognition
|
|
|
|
image = face_recognition.load_image_file("{}")
|
|
face_locations = face_recognition.face_locations(image)
|
|
"""
|
|
|
|
test_face_landmarks = """
|
|
landmarks = face_recognition.face_landmarks(image, face_locations=face_locations)[0]
|
|
"""
|
|
|
|
setup_encode_face = """
|
|
import face_recognition
|
|
|
|
image = face_recognition.load_image_file("{}")
|
|
face_locations = face_recognition.face_locations(image)
|
|
"""
|
|
|
|
test_encode_face = """
|
|
encoding = face_recognition.face_encodings(image, known_face_locations=face_locations)[0]
|
|
"""
|
|
|
|
setup_end_to_end = """
|
|
import face_recognition
|
|
|
|
image = face_recognition.load_image_file("{}")
|
|
"""
|
|
|
|
test_end_to_end = """
|
|
encoding = face_recognition.face_encodings(image)[0]
|
|
"""
|
|
|
|
print("Benchmarks (Note: All benchmarks are only using a single CPU core)")
|
|
print()
|
|
|
|
for image in TEST_IMAGES:
|
|
size = image.split("-")[1].split(".")[0]
|
|
print("Timings at {}:".format(size))
|
|
|
|
print(" - Face locations: {:.4f}s ({:.2f} fps)".format(*run_test(setup_locate_faces.format(image), test_locate_faces)))
|
|
print(" - Face landmarks: {:.4f}s ({:.2f} fps)".format(*run_test(setup_face_landmarks.format(image), test_face_landmarks)))
|
|
print(" - Encode face (inc. landmarks): {:.4f}s ({:.2f} fps)".format(*run_test(setup_encode_face.format(image), test_encode_face)))
|
|
print(" - End-to-end: {:.4f}s ({:.2f} fps)".format(*run_test(setup_end_to_end.format(image), test_end_to_end)))
|
|
print()
|