1. Introdução¶
A BCC Finger Photo é uma biblioteca Android feita para ser integrada à uma aplicação Android. Essencialmente, ela abrirá a câmera e capturará digitais para propósitos biométricos.
Esse manual está atualizado para a versão 4.3.0 da BCC Finger Photo.
1.1. Requisitos¶
A BCC Finger Photo é uma biblioteca de Android e deve ser importada no projeto-alvo.
- Versão mínima do Android: Android 6.0 (SDK 23), “Marshmallow”
- Versão mínima do Kotlin: 1.6.0.
- O aparelho móvel deve possuir uma câmera.
- O aplicativo nativo deve ser compilado com tecnologia Android.
- Ambiente de desenvolvimento: Uma IDE Android é necessária, como o Android Studio (recomendado)
- Dependências externas adicionais:
- Lottie, versão 3.0.0
2. Instalação¶
2.1. Adicionando a Biblioteca no Projeto do App¶
A biblioteca BCC Finger Photo requer JNA para Android. Os dois são fornecidos pela Griaule como arquivos .aar.
Para adicionar as bibliotecas, acesse o diretório do seu projeto, abra a pasta app e crie os seguintes
diretórios: libs/bccfinger
. Em seguida, adicione as dependências jna.aar
e bccfingerphotolib-release.aar
.
A estrutura de pastas deve ser semelhante a esta:
A próxima etapa é tornar esses arquivos visíveis para as dependências do gradle. Para fazer isso,
adicione a seguinte linha no arquivo build.gradle (:app)
no objeto de dependências:
dependencies {
[...]
implementation fileTree(dir: 'libs/bccface', include: ['*.aar'])
}
Dentro do arquivo build.gradle (:app)
, adicione também as opções de compilação e defina a
compatibilidade de origem e a compatibilidade de destino para usar 1.8 (Java 8).
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
2.2. Configurando as Dependências¶
Modifique o arquivo android/app/build.gradle
:
dependencies {
// YOUR DEPENDENCIES //
...
// BCC FINGER //
implementation fileTree(dir: 'libs/bccfinger', include:['*.aar'])
// ANDROIDX //
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.1.0'
// LOTTIE //
implementation 'com.airbnb.android:lottie:3.0.0'
// CAMERA X //
def camerax_version = "1.2.0-rc01"
// CameraX core library using camera2 implementation
implementation "androidx.camera:camera-camera2:$camerax_version"
// CameraX Lifecycle Library
implementation "androidx.camera:camera-lifecycle:$camerax_version"
// CameraX View class
implementation "androidx.camera:camera-view:$camerax_version"
}
3. Uso¶
3.1. Parâmetros e Construtor¶
Um uso simples da biblioteca é mostrado abaixo:
// To initialize a new capture
BCCFingerBuilder(this, this).initializeCapture()
O construtor da classe BCCFingerBuilder
recebe os seguintes parâmetros:
context:Context
- O contexto da aplicação.delegate:BCCFingerDelegate
- Interface responsável por notificar os eventos de captura, como falha ou sucesso.
A classe BCCFingerBuilder
é responsável por gerenciar as configurações de uso do BCCFinger
.
Os parâmetros a seguir são aceitos para confiuração da captura biométrica e comportamento do software.
setSkipCaptureOption(enable: Boolean)
- Habilita a opção de pular a captura atual.setDebugMode(enable: Boolean)
- Habilita o modo de debug.buildCaptureType(type: [BCCFingerPhotoCaptureType]()
- Define o tipo de captura de impressão digital. As opções são:enum class BCCFingerPhotoCaptureType { BOTH_HANDS, ONLY_LEFT_HAND, ONLY_RIGHT_HAND, THUMBS, LEFT_THUMB, RIGHT_THUMB, FULL_HANDS, FULL_LEFT_HAND, FULL_RIGHT_HAND; }
BOTH_HANDS
- Ambas as mãos sem polegares.ONLY_LEFT_HAND
- Somente a mão esquerda, sem polegar.ONLY_RIGHT_HAND
- Somente a mão direita, sem polegar.THUMBS
- Ambos os polegares.LEFT_THUMB
- Somente polegar esquerdo.RIGHT_THUMB
- Somente polegar direito.FULL_HANDS
- Ambas as mãos com polegares.FULL_LEFT_HAND
- Somente a mão esquerda, com polegar.FULL_RIGHT_HAND
- Somente a mão direita, com polegar.
buildBeginDelaySeconds(delay: Float)
- Define o delay para inciiar o ajuste automático do limiar.buildThreshold
- Define os parâmetros de limiar.
Para referência, a lista completa de parâmetros e valores padrão é:
skipsHandOption: Boolean = false
debugMode: Boolean = false
beginDelaySeconds: Float = 2f
maxQuality: Int = 50
minQuality: Int = 0
totalTime: Float = 20f
stepCount: Int = 20
captureType: BCCFingerPhotoCaptureType = BCCFingerPhotoCaptureType.FULL_HANDS
3.2. Valores de Retorno¶
Os resultados da última captura de impressão digital podem ser recuperados através do método
fingerCaptureDidFinish
da interface BCCFingerDelegate
:
fun fingerCaptureDidFinish(
returnData: BCCFingerReturnData,
analytics: BCCFingerReturnAnalytics
)
O objeto returnData
contém os seguintes métodos para recuperação dos dados:
getCapturedFingersIndexes()
- Retorna uma lista com o índice de todas as impressões digitais capturadas:enum class BCCFingerIndex(val index: Int) { leftLittle(0), leftRing(1), leftMiddle(2), leftIndex(3), leftThumbs(4), rightThumbs(5), rightIndex(6), rightMiddle(7), rightRing(8), rightLittle(9); }
getCapturedFingers()
- Retorna um mapa que relaciona os índices dos dedos com as biometrias capturadas.getCapturedFingersData()
- Retorna a lista de todas as impressões digitais capturadas:data class BCCFingerData( var fingerprintImage: Bitmap, var wsqAsBase64: String? )
fingerprintImage
- Imagem PNG da impressão digital em escala de cinza.wsqAsBase64
- Imagem da impressão digital em WSQ codificada em base64.
getSkippedFingers()
- Retorna a lista de índices das capturas puladas.
A classe BCCFingerReturnData
também contém atributos que armazenam a informação capturada agrupada
por mão:
class BCCFingerReturnData {
val leftHand: BCCHandData?
val rightHand: BCCHandData?
}
Estes atributos podem ser nulos nos casos em não seja requerida captura para qualquer uma das mãos.
A classe HandData
contém as seguintes informações:
var capturedFingers = mutableMapOf<BCCFingerIndex, BCCFingerData>()
private set
var skippedFingers = mutableListOf<BCCFingerIndex>()
private set
var handsPhoto: Bitmap? = null
private set
var thumbsPhoto: Bitmap? = null
private set
capturedFingers
- Mapa que relaciona o índice do dedo à imagem da impressão digital.skippedFingers
- Lista de índices das capturas puladas.handsPhoto
- Foto original da mão que gerou as impressões digitais.thumbPhoto
- Foto original do polegar.
Caso o usuário encerre a aplicação antes de finalizar a captura bionmétrica, o método fingerCaptureDidAbort
será chamado. Você pode implementar este método para tratar este cenário.
3.2.1. Recuperando as imagens originais¶
É possível recuperar as imgens originais através da classe BCCFingerReturnData
, conforme
mostrado abaixo:
val leftSlapPhoto = returnData.leftHand?.handsPhoto
val rightSlapPhoto = returnData.rightHand?.handsPhoto
val leftThumbPhoto = returnData.leftHand?.thumbsPhoto
val rightThumbPhoto = returnData.rightHand?.handsPhoto
3.3. Projeto Exemplo¶
Este é um exemplo de projeto funcional para captura de impressões digitais utilizando o BCC Finger Android:
package com.example.bccfignerexample
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.bccfignerexample.databinding.ActivityMainBinding
import com.griaule.bccfingerphotolib.analytics. BCCFingerReturnAnalytics
import com.griaule.bccfingerphotolib.fingerApi.declaration. BCCFingerBuilder
import com.griaule.bccfingerphotolib.fingerApi.declaration. BCCFingerDelegate
import com.griaule.bccfingerphotolib.fingerApi.returnData. BCCFingerReturnData
class MainActivity : AppCompatActivity(), BCCFingerDelegate {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
setupListeners()
}
private fun setupListeners() {
binding.startCaptureButton.setOnClickListener { startCapture() }
}
private fun startCapture() {
BCCFingerBuilder(this, this).initializeCapture()
}
override fun fingerCaptureDidAbort(
analytics: BCCFingerReturnAnalytics
) {
// ...
}
override fun fingerCaptureDidFinish(
returnData: BCCFingerReturnData,
analytics: BCCFingerReturnAnalytics
) {
// ...
}
}