I recently implemented Luxand.cloud's face recognition API into my project, and it's been working great. Below you'll find the steps how to integrate it.
Setting up the environment
Install the required libraries by running the following command in your terminal:
pip3 install requests
Adding people to the database
Create a Python file and import the necessary libraries:
#!/usr/bin/env python3
import requests
import json
API_TOKEN = "c9d85df66aba4f1085682a53b00a0cbf"
Define a function to the person to the database:
def add_person(name, image_path, collections = ""):
if image_path.startswith("https://"):
files = {"photos": image_path}
else:
files = {"photos": open(image_path, "rb")}
response = requests.post(
url="https://api.luxand.cloud/v2/person",
headers={"token": API_TOKEN},
data={"name": name, "store": "1", "collections": collections},
files=files,
)
if response.status_code == 200:
person = response.json()
print("Added person", name, "with UUID", person["uuid"])
return person["uuid"]
else:
print("Can't add person", name, ":", response.text)
return None
Now you can add people to the database one by one:
person_name = "person name"
# path to image can be local file name or URL
path_to_image = "path_to_image"
# enter the collection name to create the collection and add person to it
collection_name = ""
person_uuid = add_person(person_name, path_to_image, collection_name)
Improving accuracy of recognition
If you upload more than one image of a person, the face recognition engine will be able to recognize people with better accuracy. To do that, create a function that can add faces to a person.
def add_face(person_uuid, image_path):
if image_path.startswith("https://"):
files = {"photo": image_path}
else:
files = {"photo": open(image_path, "rb")}
response = requests.post(
url="https://api.luxand.cloud/v2/person/%s" % person_uuid,
headers={"token": API_TOKEN},
data={"store": "1"},
files=files
)
Now, add more photos to this person to improve face recognition accuracy. While having a single image of a person is acceptable, adding 3-5 more images will significantly improve face recognition accuracy.
add_face(person_uuid, "path_to_another_image")
Recognizing faces
def recognize_face(image_path):
url = "https://api.luxand.cloud/photo/search/v2"
headers = {"token": API_TOKEN}
if image_path.startswith("https://"):
files = {"photo": image_path}
else:
files = {"photo": open(image_path, "rb")}
response = requests.post(url, headers=headers, files=files)
result = json.loads(response.text)
if response.status_code == 200:
return response.json()
else:
print("Can't recognize people:", response.text)
return None
image_path_recognition = "path_to_image_for_recognition"
recognize_face(image_path_recognition)
Replace the path_to_image_for_recognition with the actual image file path for recognition.
Complete code
Here you can find the complete version of the code I used above. You can just copy and paste it into your file, replace parameters, and it will work.
#!/usr/bin/env python3
import requests
import json
API_TOKEN = "c9d85df66aba4f1085682a53b00a0cbf"
# This function adds a person to the database
def add_person(name, image_path, collections = ""):
if image_path.startswith("https://"):
files = {"photos": image_path}
else:
files = {"photos": open(image_path, "rb")}
response = requests.post(
url="https://api.luxand.cloud/v2/person",
headers={"token": API_TOKEN},
data={"name": name, "store": "1", "collections": collections},
files=files,
)
if response.status_code == 200:
person = response.json()
print("Added person", name, "with UUID", person["uuid"])
return person["uuid"]
else:
print("Can't add person", name, ":", response.text)
return None
# This function recognizes a face in an image
def recognize_face(image_path):
url = "https://api.luxand.cloud/photo/search/v2"
headers = {"token": API_TOKEN}
if image_path.startswith("https://"):
files = {"photo": image_path}
else:
files = {"photo": open(image_path, "rb")}
response = requests.post(url, headers=headers, files=files)
result = json.loads(response.text)
if response.status_code == 200:
return response.json()
else:
print("Can't recognize people:", response.text)
return None
if __name__ == "__main__":
# Adding a person
person_uuid = add_person("John Smith", "face1.jpg", "Employees")
if person_uuid == None:
exit(1)
# Recognizing a face
recognized_people = recognize_face("face2.jpg")
print("Recognized people:", recognized_people)
Top comments (0)