Advanced Usage¶
Configuration Setup¶
Additional configuration parameters for image processing can be set up using the ConfigObject class. An instance of ConfigObject allows various customizations, enabling fine-tuned control over how images are processed.
For a complete list of parameters and valid values, refer to the parameter section.
Sample Code for Initializing ConfigObject for the session initialization or for individual method calls:
# Import ConfigObject and PARAMETERS
from cryptonets_python_sdk.settings.configuration import ConfigObject
from cryptonets_python_sdk.settings.configuration import PARAMETERS
# Initialize ConfigObject with custom collection name:
def create_config_object(collection_name=""):
config_param = { PARAMETERS.INPUT_IMAGE_FORMAT: "rgb" }
if collection_name!="":
config_param[PARAMETERS.COLLECTION_NAME] = collection_name
return ConfigObject(config_param)
# Pass this configuration object to the FaceFactor object method (enroll, predict, etc.)
result = face_factor.enroll(image_path=image_file_path,config=create_config_object("RES200"))
This setup allows you to specify configurations such as the input image format, among other options, to meet your processing needs.
Using Collections¶
When calling the following methods:
compare(): 1:1 Verification of Face Images
compare_doc_with_face(): 1:1 Verification of a Face Image and Document Image
enroll(): Initialize Subject’s Face in the Identification System
predict(): 1:N Matching of a Probe Image to the Enrolled Gallery
delete(): Remove a User’s PUID from the Server
You can set the configuration parameter PARAMETERS.COLLECTION_NAME to specify the collection name. The collection name is an optional configuration parameter, that indicates which embedding model to use. The default value is an empty string, which means that the default collection will be used. If a user is enrolled in a specific collection, the same collection should be used for prediction and deletion. Also you can’t compare between users enrolled in different collections.
Here is a sample code to create a configuration object:
def create_config_object(collection_name=""):
"""
Creates a basic configuration object (used for in here for the operation calls).
Args:
collection_name (str, optional): The name of the collection to be added to the configuration. Defaults to an empty string.
Returns:
ConfigObject: A configuration object initialized with the specified parameters.
"""
config_param = {
PARAMETERS.INPUT_IMAGE_FORMAT: "rgb",
PARAMETERS.THRESHOLD_USER_TOO_FAR: 0.0,
PARAMETERS.THRESHOLD_USER_RIGHT: 0.0,
PARAMETERS.THRESHOLD_USER_LEFT: 1.1,
PARAMETERS.THRESHOLD_USER_TOO_CLOSE: 1.0 ,
PARAMETERS.RELAX_FACE_VALIDATION: True,
}
if collection_name!="":
config_param[PARAMETERS.COLLECTION_NAME] = collection_name
print(f"collection name: {collection_name}")
return ConfigObject(config_param)
Configuration Validation¶
Each configuration parameter in ConfigObject is validated against a predefined set of acceptable values. After initializing the configuration, you can view the parameters currently set by using the following call:
print(config_object.get_config_param())
Output:
{"input_image_format": "rgb"}
Usage - Session¶
Once config_object is set up, you can pass it to the FaceFactor object to apply the configuration across the entire session.
# Import the FaceFactor class from the CryptoNets SDK
from cryptonets_python_sdk.factor import FaceFactor
# Create a FaceFactor instance with the configuration object
face_factor = FaceFactor(config=config_object)
Alternatively, you can update the configuration using a built-in method:
# Import the FaceFactor class from the CryptoNets SDK
from cryptonets_python_sdk.factor import FaceFactor
# Initialize FaceFactor and update the configuration object
face_factor = FaceFactor()
face_factor.update_config(config=config_object)
Usage - Local¶
You can also set the configuration object for individual method calls within the FaceFactor class. This approach overrides the session configuration only for that specific method call. All subsequent calls will revert to the session configuration unless a new configuration is provided.
This flexibility allows for fine-tuned control, enabling session-wide settings as well as method-specific configurations.
is_valid: Advanced instructions¶
For detailed information on all configurable parameters and their valid values, refer to the parameter section.
Example 1: Strict Validation for Enrollment
To perform a stricter validation of the face image for enrollment purposes, you can override the configuration by setting the context string to enroll
as shown below:
# Import ConfigObject and PARAMETERS
from cryptonets_python_sdk.settings.configuration import ConfigObject
from cryptonets_python_sdk.settings.configuration import PARAMETERS
# Configure strict validation for enrollment
is_valid_config_object = ConfigObject(config_param={
PARAMETERS.CONTEXT_STRING: "enroll"
})
# Check if the image is valid with the specified configuration
is_valid_result = face_factor.is_valid(image_path="path_to_the_image", config=is_valid_config_object)
Example 2:
Example 2: Lowering the Threshold for Enrollment Crop Confidence
If you want to decrease the confidence threshold for the enrollment crop, you can adjust the CONF_SCORE_THR_ENROLL
parameter along with the enroll
context as follows:
# Configure strict validation for enrollment with a lower confidence threshold
is_valid_config_object = ConfigObject(config_param={
PARAMETERS.CONTEXT_STRING: "enroll",
PARAMETERS.CONF_SCORE_THR_ENROLL: 0.5
})
# Check if the image is valid with the modified configuration
is_valid_result = face_factor.is_valid(image_path="path_to_the_image", config=is_valid_config_object)
These configurations allow you to customize the is_valid validation criteria, tailoring the enrollment process to specific requirements for accuracy and confidence.
estimate_age: Advanced instructions¶
For a comprehensive list of configurable parameters and their valid values, please refer to the parameter section.
Example 1: Strict Validation for Age Estimation
To apply strict validation when estimating age,
you can set the configuration context string to enroll
for tighter control, as shown below:
# Import ConfigObject and PARAMETERS
from cryptonets_python_sdk.settings.configuration import ConfigObject
from cryptonets_python_sdk.settings.configuration import PARAMETERS
from cryptonets_python_sdk.helper.result_objects.ageEstimateResult import AgeEstimateResult
from cryptonets_python_sdk.helper.result_objects.callStatus import ApiReturnStatus
from cryptonets_python_sdk.settings.configuration import ANTISPOOFING_STATUSES , FACE_VALIDATION_STATUSES
from cryptonets_python_sdk.helper.result_objects.ageEstimateResult import FaceTraitObject
from typing import List
from cryptonets_python_sdk.helper.utils import FaceValidationCode, BoundingBox , Point
def create_config_object(collection_name : str ="",
use_age_estimation_with_model_stdd:bool= False,
estimate_age_face_validations_off:bool = False,
disable_age_estimation_antispoof:bool = True):
"""
Create a configuration object for FaceFactor operations.
This function creates a ConfigObject that can be passed to various FaceFactor methods
to customize their behavior.
Args:
use_age_estimation_with_model_stdd (bool): A boolean indicating whether to use age estimation
with the model standard deviation. (by default it is set to False)
estimate_age_face_validations_off (bool): A boolean indicating whether to disable face validation
during age estimation. (by default it is set to False)
disable_age_estimation_antispoof (bool): A boolean indicating whether to disable antispoofing
checks during age estimation. (by default it is set to True)
Returns:
ConfigObject: A configuration object initialized with the specified parameters.
"""
config_param = { PARAMETERS.INPUT_IMAGE_FORMAT: "rgb" }
if use_age_estimation_with_model_stdd:
config_param[PARAMETERS.USE_AGE_ESTIMATION_WITH_MODEL_STDD] = True
if estimate_age_face_validations_off:
config_param[PARAMETERS.ESTIMATE_AGE_FACE_VALIDATIONS_OFF] = True
if not disable_age_estimation_antispoof:
config_param[PARAMETERS.DISABLE_AGE_ESTIMATION_ANTISPOOF] = disable_age_estimation_antispoof
return ConfigObject(config_param)
# Configure strict validation for age estimation
age_config_object = create_config_object(
use_age_estimation_with_model_stdd=True, # Use model standard deviation for age estimation
estimate_age_face_validations_off=True, # relax face validation during age estimation
disable_age_estimation_antispoof=False # Enable antispoofing checks during age estimation
)
# Estimate user's age with strict validation
age_estimate_result = face_factor.estimate_age(image_path="path_to_the_image", config=age_config_object)
print(f"Operation Status Code: {age_estimate_result.operation_status_code.name}")
print(f"Message: {age_estimate_result.operation_message}")
face_objects = age_estimate_result.face_age_objects
if face_objects:
print(f"\nNumber of detected faces: {len(face_objects)}")
for i, face in enumerate(face_objects):
print(f"\nFace #{i+1}:")
print(f" Estimated Age: {face.age}")
print(f" Age Confidence Score: {face.age_confidence_score}")
print(f" Face Confidence Score: {face.face_confidence_score}")
print(f" Bounding Box: {face.bounding_box}")
print(f" Face Validation Status: {face.face_validation_status.name} (Code: {face.face_validation_status.value})")
if face.face_traits:
print(f" Face Traits:")
for j, trait in enumerate(face.face_traits):
print(f" Trait #{j+1}:")
print(f" Validation Code(Name: {trait.validation_code}, code: {trait.validation_code.value})")
print(f" Message: {trait.message}")
else:
print("\nNo faces detected.")
Example 2: Increasing the Threshold for Prediction Crop Confidence
If you want to increase the confidence threshold for age prediction,
you can set the CONF_SCORE_THR_PREDICT
parameter along with the predict
context as follows:
# Configure increased confidence threshold for prediction
age_config_object = ConfigObject(config_param={
PARAMETERS.CONTEXT_STRING: "predict",
PARAMETERS.CONF_SCORE_THR_PREDICT: 0.25
})
# Estimate user's age with modified configuration
age_handle = face_factor.estimate_age(image_path="path_to_the_image", config=age_config_object)
These configurations enable you to fine-tune the estimate_age
method for specific use cases,
ensuring that the validation criteria align with your accuracy and confidence requirements.
compare: Advanced instructions¶
For a complete list of configurable parameters and their valid values, refer to the parameter section.
Example: Configuring Prediction Context for Comparison
To perform a comparison with a specific validation context, such as predict
, you can customize the configuration as follows:
# Import ConfigObject and PARAMETERS
from cryptonets_python_sdk.settings.configuration import ConfigObject
from cryptonets_python_sdk.settings.configuration import PARAMETERS
# Set up the configuration for prediction context
compare_config_object = ConfigObject(config_param={PARAMETERS.CONTEXT_STRING: "predict"})
# Perform comparison with specified configuration
compare_handle = face_factor.compare(
image_path_1="path_to_the_image1", # Replace with the actual path to the first image
image_path_2="path_to_the_image2", # Replace with the actual path to the second image
config=compare_config_object
)
This configuration allows you to tailor the compare
method to specific contexts, ensuring that the validation and comparison criteria align with your requirements for accuracy and confidence.
enroll: Advanced instructions¶
For a comprehensive list of parameters and their valid values, refer to the parameter section.
# Enroll the image with custom configuration
enroll_handle = face_factor.enroll(image_path="path_to_the_image", config=config_object)
predict: Advanced instructions¶
For a comprehensive list of parameters and their valid values, refer to the parameter section.
# Perform 1:N prediction on the image with custom configuration
predict_handle = face_factor.predict(image_path="path_to_the_image", config=config_object)
iso_face: Advanced instructions¶
For a comprehensive list of parameters and their valid values, refer to the parameter section.
# Extract ISO-compliant face image with custom configuration
iso_face_handle = face_factor.get_iso_face(image_path="path_to_the_image", config=config_object)
These examples demonstrate how to use a ConfigObject to pass custom parameters for each method, allowing for flexible configurations tailored to your specific requirements.