1. Introducción

BCC Services es un componente de software utilizado para la captura biométrica. La aplicación se utiliza para recopilar imágenes biométricas, pero no las envía automáticamente al servidor. Puede ver cómo enviar una captura al GBDS en la sección Inscripción en el GBDS.

Important

BCC Services no guarda las biometrías recopiladas y solo las mantiene en RAM mientras está activo. Reiniciar o apagar la computadora o cerrar BCC Services resultará en la pérdida de las colecciones.

Este manual describe el flujo de trabajo estándar de captura biométrica de BCC Services y la solución de problemas. Consulte la especificación de API de BCC Services para obtener más información sobre las llamadas de API.

Este manual se actualiza a la versión 2.8.8 de BCC Services.

2. Flujo de trabajo de captura

Esta sección describirá el flujo de trabajo de captura y las opciones de captura biométrica que puede realizar con BCC Services. Un ejemplo de llamadas y respuestas de punto final se puede ver en Ejemplo de flujo de captura.

Para iniciar una captura, debe llamar a uno de los puntos finales de captura biométrica. Esos son:

Esas capturas pueden devolver una de dos respuestas:

  • 200, para OK

  • 400, para ERROR

El estado 200 tendrá un campo tguid que debe guardar. Cada llamada de captura biométrica tendrá su ID único, independientemente de cuántas capturas se realicen en la misma llamada. Es decir, puede realizar la llamada de captura de huella dactilar para recopilar las diez huellas dactilares, generando un tguid para todas las capturas, o utilizando el mismo punto final diez veces, generando un tguid para cada huella dactilar.

La captura biométrica genera una ventana de captura. Para obtener el estado de captura, realice la llamada de estado. Este punto final devolverá el estado de captura, la información del sensor y una información parcial de las biometrías capturadas.

Debe realizar la llamada status hasta que el valor del campo status sea captured. Esto indicará que la captura está completa. Se pueden ver otros estados si la captura está incompleta, como capturing si la ventana de captura aún está abierta o closed si la ventana de captura se cerró sin finalizar la captura.

Cuando obtenga el estado captured, debe realizar la llamada getProfile. La respuesta de esta llamada contiene las imágenes .wsq y .jpeg. Estas están en los campos buffer y converted-buffer, respectivamente, como matrices de bytes base64.

Después de que se complete una captura, recomendamos guardar las imágenes en una base de datos local hasta que las envíe a los servidores.

Danger

BCC Services guarda la captura en la memoria RAM. Salir de BCC Services, apagar o reiniciar la computadora sin persistir los datos de transacción resultará en pérdida de datos.

Después de realizar todas las capturas necesarias, reinicie BCC Services utilizando la llamada restartBcc.

Warning

Reiniciar BCC Services limpiará todos los datos de transacción en la memoria RAM. Asegúrese de guardar sus datos antes de reiniciar BCC Services.

La llamada restartBcc apagará BCC Services y lo volverá a abrir automáticamente. Para garantizar que el software se esté ejecutando después del reinicio, realice una llamada de serviceStatus y verifique que el valor del campo serverState sea running.

2.1. Reabrir ventana de captura incompleta

Si el usuario cerró una ventana de captura sin terminar la captura, el status devolverá el valor status como closed. Puede continuar una captura interrumpida con la llamada openCapture pasando el tguid proporcionado por la llamada de captura biométrica. Al hacerlo, se mantendrá el progreso de la captura.

2.2. Recuperación de TGUID

Si perdió un GUID de transacción por cualquier motivo, puede recuperar el tguid utilizando la llamada listCaptureInstances. Dentro del campo de matriz instances, puede encontrar cada captura biométrica realizada mientras BCC Services estaba activo (si el historial de transacciones no se limpió). Enumerará en el orden de ejecución, el primero será el primer llamado de captura biométrica y el último será el último llamado de captura biométrica. Se muestra un ejemplo de respuesta a continuación.

{
    "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. Solución de problemas

BCC Services tiene algunas llamadas de solución de problemas que puede realizar para garantizar que todo esté funcionando correctamente, que sus tipos de equipos estén siendo identificados y que el equipo de soporte que pueda ayudarlo con su problema conozca la versión del software. Estas llamadas se presentan a continuación.

3.1. Versión

Comprobar la versión del software es esencial para el escenario de solución de problemas. Para verificar la versión de BCC Services, realice la llamada version.

3.2. Ejecución

Para verificar si el programa está en ejecución, use el punto final de llamada de serviceStatus y observe el valor del campo serverState.

3.3. Dispositivos

BCC Services ofrece una opción para mostrar todos los dispositivos que están conectados a él. Para mostrar la lista de dispositivos, realice la llamada deviceStatus.

4. Apagado

Para apagar BCC Services, llame a finishService.

5. Ejemplo de flujo de captura

En este ejemplo, describiremos cómo realizar las llamadas para registrar una captura enrollada de todos los dedos de la mano izquierda.

Primero, realice la llamada Fingerprint Capture con la siguiente consulta:

Note

El campo “captureMode” no afecta el comportamiento de la captura de BCC Services. Este campo se utiliza para identificar la operación en la aplicación BCC.

{
    "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
        },
        {

        "tipo": "SIGUIENTE", "habilitado": true
        },
        {
            "tipo": "ACEPTAR", "habilitado": true
        },
        {
            "tipo": "ACTUALIZAR_IMAGEN", "habilitado": true
        },
        {
            "tipo": "ELIMINAR_IMAGEN", "habilitado": true
        },
        {
            "tipo": "EN_VIVO", "habilitado": true
        },
        {
            "tipo": "ADQUIRIR", "habilitado": true
        },
        {
            "tipo": "GUARDAR", "habilitado": true
        },
        {
            "tipo": "IMPORTAR", "habilitado": true
        }
    ]
}

Si la pantalla se abre correctamente, recibirá este JSON:

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

Copie este TGUID y comience a llamar a estado. hasta que reciba el estado capturado.

Important

Recuerde que también se pueden devolver otros estados, como cerrado, si el operador no completa la captura.

Si no se capturaron dedos, la respuesta debería ser:

{
    "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"
    }
}

Si se capturaron algunos dedos, pero la captura no ha finalizado, status responderá con la información de captura parcial, como se muestra:

{
    "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"
    }
}

Después de que la captura haya finalizado, el campo “status” cambiará a “captured” y la llamada al “status” responderá con la siguiente respuesta:

Important

Los valores “BYTEARRAY” son cadenas en formato base64.

{
    "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

Después de una transacción completa, la llamada de estado responde con las imágenes en formato .jpeg.

Ahora es el momento de realizar la llamada getProfile. Esta llamada responderá con las imágenes en formato .wsq y .jpeg. El campo buffer contiene las imágenes en formato .wsq, mientras que el campo converted-buffer contiene las imágenes en formato .jpeg.

{
    "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"
    }
}

Después de que se complete la captura, puede enviar las imágenes al servidor. Para entender cómo inscribir la biometría capturada en el GBDS, proceda a la siguiente sección.

5.1. Inscripción en el GBDS

Llame al punto final de inscripción si desea inscribir las imágenes capturadas previamente en el GBDS.

En la carga útil, debe insertar la información de keys, la información biométrica. Dentro del arreglo biometric, deberá insertar los datos del punto final getCapture de los servicios de BCC.

El valor del campo buffer en los servicios de BCC debe colocarse en el valor del campo content en la carga útil JSON al GBDS.

See also

Para obtener más información sobre las operaciones en GBDS, consulte el Manual de Integración de GBDS.

El ejemplo de carga útil para realizar la inscripción se muestra a continuación:

{
        "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"
        }
]
}