All pages
Powered by GitBook
1 of 7

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Face Enrollment

Batch Enrollment

Enroll multiple persons in simple steps.

  1. 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.mp4
  2. Create 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, Cintia
  3. Go to page Enrollment

  4. Click Batch Enrollment

  5. Click select CSV file or drag and drop folder

  6. Click button Proceed

  7. 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 failed

Image Guideline

Disclaimer

In a sense of deep learning technology, the performance of this analytic might slightly differ in your environment, depending on several variables such as camera specs, camera height, camera angle, weather conditions, etc. We highly recommend you to test our analytics and run benchmarks on your own images, with ground truth or your quality expectations prepared beforehand. Please contact us for more info.

Image Configuration

General

Analytics

Sample Image for Enrolment

Acceptable Condition

The images below are the reference for face analytics.

Conditional

The following view configurations are acceptable but are not recommended, as they might impact analytics performance.

Not Recommended

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

Frontal face, one face per image
Head rotation <30° (left)
Head rotation <30° (right)
Black and White with Clear Face View
Blurred image
Face in glossy paper
Image with backlight
Wearing any type of face cover
Wearing sunglasses
Multiple faces within one photo
Face too small and not frontal
Face with a lot of noise
Face facing left/right.

Face posture

Insert / Update / Delete Enrollment

Insert Single Enrollment

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

Data Name
Descriptions

And then click Save.

Update Single Enrollment

To update a face, click three buttons and click UPDATE THIS ENROLLMENT.

And then update image / information that you want.

Remove Single Enrollment

To delete a single enrollment, click three buttons and click REMOVE THIS ENROLLMENT.

And then click to proceed delete to confirm your action.

Remove All Enrollment

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).

Setup On Premise

License

NFFS-FIQA

This analytic is GPU-based please ensure you meet the minimum requirement.

Setup for Deployment

  1. Setup docker-compose.yml config

  1. Setup config.yml

  1. Setup prometheus.yml

  1. Run the Docker Compose by following these steps:

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 --build

API

Step by Step on How to Use Face Occlusion Service

Parameters

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

Response

1. Success (Face Accepted for Enrollment)

2. Unsuccessful (Face not Detected or Multiple Face Detected)

3. Unsuccessfull (Face Occluded)

4. Unsuccessful (Face Quality not Match)

Error

Face and Image Quality Assessment

Overview

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:

  1. "Forehead"

  2. "Eyebrow Right"

  3. "Eyebrow Left"

  4. "Eye Right"

  5. "Eye Left"

  6. "Cheek Right"

  7. "Cheek Left"

  8. "Nose"

  9. "Mouth"

  10. "Chin"

The last part of the our FIQA service is image quality assessment analytic to determine the overall quality of a given image.

"face_iqa": {
"threshold": 0.435
}
},
"images": ["base64"],
}
{
    "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
}