Enroll multiple persons in simple steps.
Create a folder of photo collection to looks like this
|Data
|---file_enrollment.csv
|---Adil
|---adil1.jpeg
|---adil2.jpeg
|---2017-08-05.jpeg
|---Bahrun
|---bahrun.jpg
|---Cintia
|---cintia.jpg
|---video.mp4Create file face_enrollment.csv with the template below
identity_number, name, status, foldername
ex:
identity_number, name, status, foldername
92731892, Adil, VIP, Adil
84281821, Bahrun, VIP, Bahrun
77262111, Cintia, TSK, CintiaGo to page Enrollment
Click Batch Enrollment
Click select CSV file or drag and drop folder
Click button Proceed
Log enrollment is showed
Batch enrollment start....
Adil/adil1.jpeg successfully enrolled
Adil/adil2.jpeg successfully enrolled
Adil/2017-08-05.jpeg successfully enrolled
Bahrun/bahrun.jpg successfully enrolled
Cintia/cintia.jpg successfully enrolled
Cintia/video.mp4 enrollment is failedThe images below are the reference for face analytics.
The following view configurations are acceptable but are not recommended, as they might impact analytics performance.
In addition, there are other conditions that might affect the performance of the analytics, including (but not limited to) those listed in the following images.
Frontal, selfie pose
Accepted face tilt
<15°
Accepted head rotation
<30°
Image Setting
Recommendation
Accepted Image format input
.JPEG OR .JPG
Maximum image size
800Kb
Minimum image dimension
200 pixels x 200 pixels
Maximum image dimension
2000 pixels x 2000 pixels
Image Setting
Recommendation
Face per Image - Face Enrolment
1
Face per Image - Face Face Match
1 for both image
Face per Image - Face Recognition
Any
Minimum Face Size for Enrollment
200 pixels x 200 pixels
Minimum Face Size for Face Recognition
200 pixels x 200 pixels



Face posture
If you want to insert a single enrollment, click NEW ENROLLMENT and SELECT SINGLE ENROLLMENT.
After that insert data and images for the enrollment.
Data that need to fill such as
And then click Save.
To update a face, click three buttons and click UPDATE THIS ENROLLMENT.
And then update image / information that you want.
To delete a single enrollment, click three buttons and click REMOVE THIS ENROLLMENT.
And then click to proceed delete to confirm your action.
To remove all enrollment click REMOVE ALL ENROLLMENT
And then type unique code to confirm.
Identity Number
Can be used to distinguish users by their ID numbers.
Name
Fill in with full name. (Must fill in)
Gender
Pria (Male) or Wanita (Female).
Birth Place
Place of birth.
Birth Date
Date of birth.
Status








Can be used to distinguish users by their status (can be their job or anything else).
version: "v1"
nodes:
- address: "0.0.0.0:4021"
analytic_id: "NFFS-FIQA"version: '3.3'
services:
node1:
environment:
- UNUSED_CLASS=$UNUSED_CLASS
image: "${ANALYTIC_IMAGE}"
runtime: nvidia
pid: host
network_mode: host
cap_add:
- SYS_PTRACE
command: [
httpserver,
--listen-port, "${ANALYTIC_LISTEN_PORT}",
--listen-port-monitoring, "${ANALYTIC_LISTEN_PORT_MONITORING}",
--verbose,
]
healthcheck:
test: ["CMD", "curl", "-f", "http://0.0.0.0:${ANALYTIC_LISTEN_PORT}/healthcheck"]
interval: 10s
timeout: 3s
retries: 30
coordinator:
image: "${ANALYTIC_IMAGE}"
runtime: nvidia
pid: host
network_mode: host
cap_add:
- SYS_PTRACE
command: [
coordinator,
--access-key, "${NODEFLUX_ACCESS_KEY}",
--secret-key, "${NODEFLUX_SECRET_KEY}",
--deployment-key, "${NODEFLUX_DEPLOYMENT_KEY}",
--listen-port, "${COORDINATOR_LISTEN_PORT}",
--listen-port-monitoring, "${COORDINATOR_LISTEN_PORT_MONITORING}",
--config-path, "/etc/nodeflux/config.yml",
--verbose,
]
volumes:
- ${PWD}/config.yml:/etc/nodeflux/config.yml
depends_on:
node1:
condition: service_healthy
prometheus:
image: prom/prometheus
network_mode: host
pid: host
volumes:
- ${PWD}/prometheus.yml:/etc/prometheus/prometheus.yml
# my global config
global:
scrape_interval: 5s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 5s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090", "localhost:5021", "localhost:5022", "localhost:5023", "localhost:5024", "localhost:5001", "localhost:5005", "localhost:5006"]
export ANALYTIC_IMAGE=registry.gitlab.com/nodefluxio/cloud/analytics/pipelines/face-iqa-pipeline:1.0.0
export NODEFLUX_ACCESS_KEY=<nodeflux access key>
export NODEFLUX_SECRET_KEY=<nodeflux secret key>
export NODEFLUX_DEPLOYMENT_KEY=<nodeflux deployment key>
export COORDINATOR_LISTEN_PORT=4004
export COORDINATOR_LISTEN_PORT_MONITORING=5004
export ANALYTIC_LISTEN_PORT=4021
export ANALYTIC_LISTEN_PORT_MONITORING=5021
# Uncomment this if you want to ignore some classes. Example: "chin,forehead"
# export UNUSED_CLASS="chin,forehead"
docker compose up -d --buildStep by Step on How to Use Face Occlusion Service
In postman, send a POST to coordinator: http://localhost:4004/NFFS-FIQA/v1/predict
{
"images": ["base64"],
}Payload below if you want to determine specific threshold for each analytics inside FIQA.
{
"additional_params": {
"face_detection": {
"threshold": 0.9
},
"face_occlusion": {
"threshold": 0.6
},
images base64 image contains face image that wants to be enrolled
Evaluate the face before performing enrollment processing. There are 10 face attributes that will be evaluate whether there's occlusion in the face. Thus, ensure the face enrollment process is perform correctly.
Our service consist of Face Detection which located face on a given photo. Face occlusion service that check whether there are occlusion on specific face attributes, namely:
"Forehead"
"Eyebrow Right"
"Eyebrow Left"
"Eye Right"
"Eye Left"
"Cheek Right"
"Cheek Left"
"Nose"
"Mouth"
"Chin"
The last part of the our FIQA service is image quality assessment analytic to determine the overall quality of a given image.



{
"job": {
"id": "20230801100518697b88a670854340c5d452a91786c7ccfcf8149fadb86f2acfb7b2ed1316cb584e2",
"result": {
"analytic_type": "FACE IQA PIPELINE",
"result": [
{
"accepted": true,
"face_iqa": {
"accepted": true,
"iqa_score": 0.4586
},
"face_occlusion": {
"occluded": false,
"occluded_features": {
"cheek_left": false,
"cheek_right": false,
"chin": false,
"eye_left": false,
"eye_right": false,
"eyebrow_left": false,
"eyebrow_right": false,
"forehead": false,
"mouth": false,
"nose": false
}
}
}
],
"status": "success"
}
},
"message": "Your Image accepted.",
"ok": true
}
{
"job": {
"id": "20230801100154763e7464ad7dab8209e65262a4cbff2f7bc7759a47975a76533f7d479d784cacf45",
"result": {
"analytic_type": "FACE IQA PIPELINE",
"result": [
{
"accepted": false,
"face_iqa": {},
"face_occlusion": {}
}
],
"status": "success"
}
},
"message": "Your Image not accepted. Face not detected or Multiple faces detected.",
"ok": true
}{
"job": {
"id": "20230801100634730cadbab4b669da921d0c59256dfd1b2dc8a227495e185ea77ed39f990bc3336dd",
"result": {
"analytic_type": "FACE IQA PIPELINE",
"result": [
{
"accepted": false,
"face_iqa": {},
"face_occlusion": {
"occluded": true,
"occluded_features": {
"cheek_left": false,
"cheek_right": false,
"chin": false,
"eye_left": true,
"eye_right": false,
"eyebrow_left": false,
"eyebrow_right": false,
"forehead": false,
"mouth": false,
"nose": false
}
}
}
],
"status": "success"
}
},
"message": "Your Image not accepted. Face is Occluded.",
"ok": true
}
{
"job": {
"id": "20230801100653759d0a322b50cc1c6248b63d225619b665a78491e4cdc712006584bb625d4feb9d2",
"result": {
"analytic_type": "FACE IQA PIPELINE",
"result": [
{
"accepted": false,
"face_iqa": {
"accepted": false,
"iqa_score": 0.272
},
"face_occlusion": {
"occluded": false,
"occluded_features": {
"cheek_left": false,
"cheek_right": false,
"chin": false,
"eye_left": false,
"eye_right": false,
"eyebrow_left": false,
"eyebrow_right": false,
"forehead": false,
"mouth": false,
"nose": false
}
}
}
],
"status": "success"
}
},
"message": "Your Image not accepted. Image quality not match.",
"ok": true
}
{
"job": {
"id": "hex",
"result": null
},
"message": "string",
"ok": false
}






