1. Introduction

BCC Services is a software component used for biometric capture. The application is used to collect biometric images but does not automatically send them to the server. You can see how to send a capture to the GBDS in the Enrolling in the GBDS section.

Important

BCC Services do not save the collected biometrics and only maintain it in RAM while active. Restarting or shutting down the computer or closing BCC Services will result in the loss of the collections.

This manual describes the standard BCC Services biometric capture workflow and troubleshooting. See the BCC Services API specification for further information on the API calls.

This manual is updated to the BCC Services version 2.8.8.

2. Capture Workflow

This section will describe the capture workflow and the options of biometric captures you can perform with BCC Services. An example of the endpoint calls and responses can be seen in the Capture Workflow Example.

To start a capture, you need to call one of the Biometric Capture endpoints. Those are:

Those captures can return one of two responses:

  • 200, for OK
  • 400, for ERROR

The 200 status will have a tguid field that you must save. Each Biometric Capture call will have its unique ID, regardless of how many captures are performed in the same call. i.e., you can perform the Fingerprint Capture call to collect all ten fingers, generating one tguid for all captures, or using the same endpoint ten times, generating a tguid for each fingerprint.

The Biometric Capture spawns a capture window. To get the capture status, perform the status call. This endpoint will return the capture status, the sensor informations and a partial information of what biometrics are captured.

You need to perform the status call until the status field value is captured. This will indicate that the capture is complete. Other statuses could be seen if the capture is incomplete, such as capturing if the capture window is still open or closed if the capture window was closed without finishing the capture.

When you get the captured status, you need to perform the getProfile call. This call response contains the .wsq and the .jpeg images. Those are in the buffer and converted-buffer field, respectively, as base64 bytearrays.

After a capture is finished, we recommend to save the images in a local database until you send them to the servers.

Danger

BCC Services saves the capture in RAM. Exiting BCC Services, shutting down or restarting the computer without persisting the transaction data will result in data loss.

After all needed captures are done, restart BCC services using the restartBcc call.

Warning

Restarting BCC Services will clean all transactions data in RAM. Guarantee that your data is saved before restarting BCC Services.

The restartBcc call will shutdown BCC Services and reopen it automatically. To guarantee that the software is running after the restart, perform a serviceStatus call and verify that the serverState field value is running.

2.1. Reopen incomplete capture window

If the user closed a capture window without finishing the capture, the status will return the status value as closed. You can continue an interrupted capture with the openCapture call passing the tguid provided by the Biometric Capture call. Doing so will maintain the capture progress.

2.2. Recovering TGUID

If you lost a transaction GUID for any reason, you can recover the tguid using the listCaptureInstances call. Inside the instances array field, you can find every biometric capture performed while BCC Services was active (if the transaction history was not cleaned). It will list in the execution order, the first one will be the first Biometric Capture called and the last will be the last Biometric Capture called. A response example is shown below.

{
    "result": "OK",
    "instances": [
        {
            "tguid": "F1F14ADA-6A00-4A67-B887-F574764ECC77",
            "type": "FINGERPRINT"
        },
        {
            "tguid": "DD08CEAA-B508-421D-8484-717DF01C0C55",
            "type": "SIGNATURE"
        },
        {
            "tguid": "EB321A10-F2B2-46DB-9479-8A6E5A1A485D",
            "type": "PROFILE"
        }
    ]
}

3. Troubleshooting

BCC Services have some troubleshooting calls that you can make to guarantee things are running correctly, your types of equipment are being identified, and the software version is known by you and the support team that may help you with your problem. Those calls are presented below.

3.1. Version

Checking the software version is essential to the troubleshooting scenario. To check BCC Services version, perform the version call.

3.2. Running

To verify if the program is running, use the serviceStatus call endpoint and look at the serverState field value.

3.3. Devices

BCC Services offers an option to show all devices that are connected with it. To display the device list, perform the deviceStatus call.

4. Shutdown

To shutdown BCC Services, call finishService

5. Capture Workflow Example

In this example, we will describe how to perform the calls for a register of a rolled capture of all left-hand fingers.

First, perform the Fingerprint Capture call with the following query:

Note

“captureMode” field do not affect the behaviour of BCC Services capture. This field is used to identify the operation in BCC application.

{
    "captureMode": "REGISTER",
    "notifyUrl": "",
    "theme": "DARK",
    "captureType": "ROLLED",
    "type": "FINGERPRINT",
    "sequenceControlType": "NONE",
    "indexes": [
        {
            "index": "LEFT_LITTLE"
        },
        {
            "index": "LEFT_RING"
        },
        {
            "index": "LEFT_MIDDLE"
        },
        {
            "index": "LEFT_INDEX"
        },
        {
            "index": "LEFT_THUMB"
        }
    ],
    "exceptionSetType": "SIMPLIFIED",
    "functions": [
        {
            "type": "RESET",
            "enabled": true
        },
        {
            "type": "CONFIG",
            "enabled": true
        },
        {
            "type": "CLEAR",
            "enabled": true
        },
        {
            "type": "CAPTURE",
            "enabled": true
        },
        {
            "type": "CANCEL",
            "enabled": true
        },
        {
            "type": "CAPTURE_NEW_IMAGE",
            "enabled": true
        },
        {
            "type": "IMAGE_PREVIEW",
            "enabled": true
        },
        {
            "type": "NEXT",
            "enabled": true
        },
        {
            "type": "OK",
            "enabled": true
        },
        {
            "type": "UPDATE_IMAGE",
            "enabled": true
        },
        {
            "type": "REMOVE_IMAGE",
            "enabled": true
        },
        {
            "type": "LIVE",
            "enabled": true
        },
        {
            "type": "ACQUIRE",
            "enabled": true
        },
        {
            "type": "SAVE",
            "enabled": true
        },
        {
            "type": "IMPORT",
            "enabled": true
        }
    ]
}

If the screen is successfully open, you will receive this JSON:

{
        "result": "OK",
        "tguid": "F1F14ADA-6A00-4A67-B887-F574764ECC77"
}

Copy this TGUID and start calling status. until you receive the captured status.

Important

Remember that other statuses, as closed, can also be returned if the operator does not complete the capture.

If no fingers were captured, the response should be:

{
    "result": "OK",
    "tguid": "F1F14ADA-6A00-4A67-B887-F574764ECC77",
    "type": "FINGERPRINT",
    "status": "CAPTURING",
    "operation": "INIT",
    "command": "INIT",
    "profile": {},
    "profileMetadata": {
        "profileVersion": "GBS BCC profile v2.8.7",
        "appName": "GBS BCC",
        "macAddress": [
            "08-62-66-80-D5-5C",
            "42-E2-30-11-DB-15",
            "42-E2-30-11-D3-15",
            "08-62-66-80-D4-94",
            "40-E2-30-13-F7-8A",
            "40-E2-30-11-D3-15"
        ],
        "softwareStatus": {
            "vendor": "Griaule Biometrics Ltda.",
            "version": "2.8.7.10805",
            "name": "GBS BCC Service"
        },
        "fingerprintPluggedDevices": [],
        "fingerprintStartedDevices": [],
        "faceDevice": {
            "productName": "OBS Virtual Camera",
            "serialNumber": "N/A",
            "firmwareVersion": "N/A"
        },
        "bodyDevice": {
            "productName": "OBS Virtual Camera",
            "serialNumber": "N/A",
            "firmwareVersion": "N/A"
        },
        "signatureDevice": {
            "serialNumber": "N/A"
        },
        "irisDevice": "IRITECH",
        "fields": [],
        "fingerprints": [],
        "palms": [],
        "bodyImages": []
    },
    "windowInfo": {
        "x": 683.0,
        "y": 237.0,
        "width": 685.0,
        "height": 579.0,
        "state": "NORMAL"
    }
}

If some fingers were captured, but the capture is not finished, status will respond with the partial capture information, as shown:

{
    "result": "OK",
    "tguid": "F1F14ADA-6A00-4A67-B887-F574764ECC77",
    "type": "FINGERPRINT",
    "status": "CAPTURING",
    "operation": "INIT",
    "command": "INIT",
    "profileMetadata": {
        "profileVersion": "GBS BCC profile v2.8.7",
        "appName": "GBS BCC",
        "macAddress": [
            "08-62-66-80-D5-5C",
            "42-E2-30-11-DB-15",
            "42-E2-30-11-D3-15",
            "08-62-66-80-D4-94",
            "40-E2-30-13-F7-8A",
            "40-E2-30-11-D3-15"
        ],
        "softwareStatus": {
            "vendor": "Griaule Biometrics Ltda.",
            "version": "2.8.7.10805",
            "name": "GBS BCC Service"
        },
        "fingerprintPluggedDevices": [],
        "fingerprintStartedDevices": [],
        "faceDevice": {
            "productName": "OBS Virtual Camera",
            "serialNumber": "N/A",
            "firmwareVersion": "N/A"
        },
        "bodyDevice": {
            "productName": "OBS Virtual Camera",
            "serialNumber": "N/A",
            "firmwareVersion": "N/A"
        },
        "signatureDevice": {
            "serialNumber": "N/A"
        },
        "irisDevice": "IRITECH",
        "fields": [],
        "fingerprints": [
            {
                "index": "LEFT_LITTLE",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left little",
                "image": {
                    "resolution": 500
                },
                "height": 480,
                "width": 320,
                "template": {
                    "quality": 96
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 72,
                "captured": false,
                "extracted": true
            },
            {
                "index": "LEFT_RING",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left ring",
                "image": {
                    "resolution": 500
                },
                "height": 480,
                "width": 320,
                "template": {
                    "quality": 98
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 66,
                "captured": false,
                "extracted": true
            }
        ],
        "palms": [],
        "bodyImages": []
    },
    "windowInfo": {
        "x": 683.0,
        "y": 237.0,
        "width": 685.0,
        "height": 579.0,
        "state": "NORMAL"
    }
}

After the capture is finished, the status field will change to captured and the status call will answer with the following response:

Important

The “BYTEARRAY” values are strings in base64 format.

{
    "result": "OK",
    "tguid": "F1F14ADA-6A00-4A67-B887-F574764ECC77",
    "type": "FINGERPRINT",
    "status": "CAPTURED",
    "operation": "INIT",
    "command": "NONE",
    "profileMetadata": {
        "profileVersion": "GBS BCC profile v2.8.7",
        "appName": "GBS BCC",
        "macAddress": [
            "08-62-66-80-D5-5C",
            "42-E2-30-11-DB-15",
            "42-E2-30-11-D3-15",
            "08-62-66-80-D4-94",
            "40-E2-30-13-F7-8A",
            "40-E2-30-11-D3-15"
        ],
        "softwareStatus": {
            "vendor": "Griaule Biometrics Ltda.",
            "version": "2.8.7.10805",
            "name": "GBS BCC Service"
        },
        "fingerprintPluggedDevices": [],
        "fingerprintStartedDevices": [],
        "faceDevice": {
            "productName": "OBS Virtual Camera",
            "serialNumber": "N/A",
            "firmwareVersion": "N/A"
        },
        "bodyDevice": {
            "productName": "OBS Virtual Camera",
            "serialNumber": "N/A",
            "firmwareVersion": "N/A"
        },
        "signatureDevice": {
            "serialNumber": "N/A"
        },
        "irisDevice": "IRITECH",
        "fields": [],
        "fingerprints": [
            {
                "index": "LEFT_LITTLE",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left little",
                "image": {
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "quality": 96
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 72,
                "captured": false,
                "extracted": true
            },
            {
                "index": "LEFT_RING",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left ring",
                "image": {
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "quality": 98
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 66,
                "captured": false,
                "extracted": true
            },
            {
                "index": "LEFT_MIDDLE",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left middle",
                "image": {
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "quality": 98
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 76,
                "captured": false,
                "extracted": true
            },
            {
                "index": "LEFT_INDEX",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left index",
                "image": {
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "quality": 100
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 71,
                "captured": false,
                "extracted": true
            },
            {
                "index": "LEFT_THUMB",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left thumb",
                "image": {
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "quality": 100
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 70,
                "captured": false,
                "extracted": true
            }
        ],
        "palms": [],
        "bodyImages": []
    },
    "windowInfo": {
        "x": 683.0,
        "y": 237.0,
        "width": 1000.0,
        "height": 579.0,
        "state": "NORMAL"
    }
}

Note

After a complete transaction, the status call answers with the .jpeg images.

Now it is time to perform the getProfile call. This call will answer with the images in .wsq and .jpeg images. The buffer field contains the .wsq images while the converted-buffer field contains the .jpeg images.

{
    "result": "OK",
    "tguid": "F1F14ADA-6A00-4A67-B887-F574764ECC77",
    "type": "FINGERPRINT",
    "status": "CAPTURED",
    "operation": "INIT",
    "command": "NONE",
    "profile": {
        "fingerprints": [
            {
                "index": "LEFT_LITTLE",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left little",
                "image": {
                    "buffer": "BYTEARRAY",
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "buffer": "BYTEARRAY",
                    "quality": 96
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 72,
                "captured": false,
                "extracted": true
            },
            {
                "index": "LEFT_RING",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left ring",
                "image": {
                    "buffer": "BYTEARRAY",
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "buffer": "BYTEARRAY",
                    "quality": 98
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 66,
                "captured": false,
                "extracted": true
            },
            {
                "index": "LEFT_MIDDLE",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left middle",
                "image": {
                    "buffer": "BYTEARRAY",
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "buffer": "BYTEARRAY",
                    "quality": 98
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 76,
                "captured": false,
                "extracted": true
            },
            {
                "index": "LEFT_INDEX",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left index",
                "image": {
                    "buffer": "BYTEARRAY",
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "buffer": "BYTEARRAY",
                    "quality": 100
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 71,
                "captured": false,
                "extracted": true
            },
            {
                "index": "LEFT_THUMB",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left thumb",
                "image": {
                    "buffer": "BYTEARRAY",
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "buffer": "BYTEARRAY",
                    "quality": 100
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 70,
                "captured": false,
                "extracted": true
            }
        ]
    },
    "profileMetadata": {
        "profileVersion": "GBS BCC profile v2.8.7",
        "appName": "GBS BCC",
        "macAddress": [
            "08-62-66-80-D5-5C",
            "42-E2-30-11-DB-15",
            "42-E2-30-11-D3-15",
            "08-62-66-80-D4-94",
            "40-E2-30-13-F7-8A",
            "40-E2-30-11-D3-15"
        ],
        "softwareStatus": {
            "vendor": "Griaule Biometrics Ltda.",
            "version": "2.8.7.10805",
            "name": "GBS BCC Service"
        },
        "fingerprintPluggedDevices": [],
        "fingerprintStartedDevices": [],
        "faceDevice": {
            "productName": "OBS Virtual Camera",
            "serialNumber": "N/A",
            "firmwareVersion": "N/A"
        },
        "bodyDevice": {
            "productName": "OBS Virtual Camera",
            "serialNumber": "N/A",
            "firmwareVersion": "N/A"
        },
        "signatureDevice": {
            "serialNumber": "N/A"
        },
        "irisDevice": "IRITECH",
        "fields": [],
        "fingerprints": [
            {
                "index": "LEFT_LITTLE",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left little",
                "image": {
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "quality": 96
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 72,
                "captured": false,
                "extracted": true
            },
            {
                "index": "LEFT_RING",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left ring",
                "image": {
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "quality": 98
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 66,
                "captured": false,
                "extracted": true
            },
            {
                "index": "LEFT_MIDDLE",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left middle",
                "image": {
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "quality": 98
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 76,
                "captured": false,
                "extracted": true
            },
            {
                "index": "LEFT_INDEX",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left index",
                "image": {
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "quality": 100
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 71,
                "captured": false,
                "extracted": true
            },
            {
                "index": "LEFT_THUMB",
                "type": "ROLLED",
                "typeIndexKey": "ROLLED-left thumb",
                "image": {
                    "resolution": 500,
                    "converted-buffer": "BYTEARRAY"
                },
                "height": 480,
                "width": 320,
                "template": {
                    "quality": 100
                },
                "captureType": "FLAT",
                "nfiq": 1,
                "contrast": 70,
                "captured": false,
                "extracted": true
            }
        ],
        "palms": [],
        "bodyImages": []
    },
    "windowInfo": {
        "x": 683.0,
        "y": 237.0,
        "width": 685.0,
        "height": 579.0,
        "state": "NORMAL"
    }
}

After the capture is done, you can send the images to the server. To understand how to enroll the captured biometrics in the GBDS, proceed to the next section.

5.1. Enrolling in the GBDS

Call the enroll endpoint if you want to enroll the previously captured images to the GBDS.

In the payload you need to insert the keys information, the biographics. Inside the biometric array, you will need to insert the data from BCC Services getCapture endpoint.

The buffer field value on BCC Services needs to be placed on the content field value in the JSON payload to the GBDS.

See also

For more information about operations on GBDS, see the GBDS Integration Manual.

The example payload to perform the enrollment is shown below:

{
        "meta":{
        "priority":"DEFAULT_PRIORITY",
        "timeout":"-1"
    },
    "data":{
            "keys": [
    {
        "id": "CPF",
        "value": "618.323.606-44"
    }
    ],
    "biographics": [
    {
        "id": "name",
        "value": "John Doe"
    }
    ],
"biometric": [
        {
        "source": "ORIGINAL",
        "type": "FINGERPRINT",
        "format": "WSQ",
        "properties": {
            "width": 0,
            "height": 0,
            "resolution": 500,
            "ratio": 0.0,
            "matcherId": 0,
            "extractorId": 0
        },
        "index": 0,
        "content": "BYTEARRAY"
        },
        {
        "source": "ORIGINAL",
        "type": "FINGERPRINT",
        "format": "WSQ",
        "properties": {
            "width": 0,
            "height": 0,
            "resolution": 500,
            "ratio": 0.0,
            "matcherId": 0,
            "extractorId": 0
        },
        "index": 1,
        "content": "BYTEARRAY"
        },
        {
        "source": "ORIGINAL",
        "type": "FINGERPRINT",
        "format": "WSQ",
        "properties": {
            "width": 0,
            "height": 0,
            "resolution": 500,
            "ratio": 0.0,
            "matcherId": 0,
            "extractorId": 0
        },
        "index": 2,
        "content": "BYTEARRAY"
        },
        {
        "source": "ORIGINAL",
        "type": "FINGERPRINT",
        "format": "WSQ",
        "properties": {
            "width": 0,
            "height": 0,
            "resolution": 500,
            "ratio": 0.0,
            "matcherId": 0,
            "extractorId": 0
        },
        "index": 3,
        "content": "BYTEARRAY"
        },
        {
        "source": "ORIGINAL",
        "type": "FINGERPRINT",
        "format": "WSQ",
        "properties": {
            "width": 0,
            "height": 0,
            "resolution": 500,
            "ratio": 0.0,
            "matcherId": 0,
            "extractorId": 0
        },
        "index": 4,
        "content": "BYTEARRAY"
        }
]
}
}