Skip to main content

Controle de acesso

O controle de acesso é um modo de operação para dispositivos fixos, como catracas, portões e portas. A câmera permanece ativa e cada pessoa detectada é validada com prova de vida e FaceMatch contra as pessoas cadastradas.

O SDK informa o resultado de cada leitura. O acionamento do equipamento (catraca, relé ou fechadura) é responsabilidade da aplicação.

PlataformaClasse
AndroidAccessControlSession
iOSBTAccessSession
.NET MAUI (Android e iOS)BioTrustAccessControl
Flutter (Android e iOS)BioTrustAccessControl
React Native (Android e iOS)BioTrustAccessControl
WebcreateAccessControl

Estados da sessão​

EstadoAndroidiOS.NET MAUIFlutterReact NativeWebDescrição
ParadaPARADA.paradaStoppedAccessState.stopped'stopped'"parada"Câmera desligada.
VigíliaVIGILIA.vigiliaWatchingAccessState.watching'watching'—Câmera ativa, aguardando presença.
ProcurandoPROCURANDO.procurandoSearchingAccessState.searching'searching'"procurando"Prova de vida e identificação em andamento.
LiberadaLIBERADA.liberadaReleasedAccessState.released'released'"liberada"Acesso autorizado.
BloqueadaBLOQUEADA.bloqueadaRevokedAccessState.revoked'revoked'"bloqueada"Autorização revogada.

Comportamento​

SituaçãoComportamentoParâmetro
Pessoa reconhecidaEmite a autorização. Novas autorizações são suspensas até a chamada de personPassed() ou o fim da janela de liberação.releaseWindowSeconds
Rosto não reconhecido durante a liberaçãoRevoga a autorização.revokeOnMismatch
Pessoa não cadastradaEmite o evento de pessoa desconhecida e aguarda o intervalo configurado antes de uma nova leitura.unknownCooldownSeconds
Pessoa sem permissão no ponto de acessoEmite o evento de permissão negada.—
Falha na prova de vida ou na leituraEmite o evento de negação, com a descrição.—
Nenhum rosto detectadoEmite o evento de ociosidade após o tempo configurado.idleSeconds

Configuração no Dashboard​

Na seção Controle de acesso do Dashboard:

ItemDescrição
Pontos de acessoLocais controlados, como garagem e portaria. Cada ponto pode permitir qualquer pessoa cadastrada ou somente pessoas autorizadas, e possui parâmetros próprios de operação.
TerminaisDispositivos instalados, identificados pelo terminalLabel e associados a um ponto de acesso.
Grupos de pessoasAgrupamento de pessoas cadastradas, como moradores e funcionários.
Grupos de pontosAgrupamento de pontos de acesso, como áreas comuns e garagens.
ConcessõesPermissão de acesso de um grupo de pessoas a um ponto ou grupo de pontos.

O terminal é registrado automaticamente na primeira execução da sessão. Com useServerPolicy ativado (padrão), os parâmetros definidos no ponto de acesso prevalecem sobre os valores configurados na aplicação.

Implementação​

Android​

import io.biotrust.sdk.acesso.AccessControlConfig;
import io.biotrust.sdk.acesso.AccessControlSession;
import io.biotrust.sdk.acesso.AccessControlState;

AccessControlConfig config = new AccessControlConfig.Builder()
.setUuid("seu-uuid")
.setApiUrl("https://api.biotrust.io")
.setTerminalLabel("Portaria")
.build();

AccessControlSession sessao = new AccessControlSession(this, config, new AccessControlSession.Callback() {
@Override
public void onStateChanged(AccessControlState state) { }

@Override
public void onAuthorize(String personId, String name, String document, Double confidence) {
// Liberar o acesso
}

@Override
public void onRevoke() {
// Bloquear o acesso
}
});

sessao.start(previewView, this); // PreviewView (CameraX)
sessao.personPassed(); // Pessoa passou pelo acesso
sessao.stop(); // Encerrar a sessão

Callbacks opcionais: onPresence, onUnknown, onDeny, onDenyPermission, onIdle e onFaceBox. A permissão de câmera deve ser concedida antes de start.

iOS​

import BioTrust

final class AcessoViewController: UIViewController, BTAccessDelegate {

@IBOutlet private var previewView: UIView!
private var sessao: BTAccessSession!

override func viewDidLoad() {
super.viewDidLoad()

let config = BTAccessConfig()
config.uuid = "seu-uuid"
config.apiUrl = "https://api.biotrust.io"
config.terminalLabel = "Portaria"

sessao = BTAccessSession(config: config)
sessao.delegate = self
sessao.start(in: previewView)
}

func accessSession(_ session: BTAccessSession, didChangeState state: BTAccessState) { }

func accessSession(_ session: BTAccessSession,
didAuthorize personId: String,
name: String,
document: String,
confidence: Double) {
// Liberar o acesso
}

func accessSessionDidRevoke(_ session: BTAccessSession) {
// Bloquear o acesso
}
}

Métodos personPassed() e stop() disponíveis em BTAccessSession. Métodos opcionais do delegate: didDetectPresence, accessSessionDidFindUnknown, didDeny, accessSessionDidDenyPermission, accessSessionDidBecomeIdle e didTrackFace. Requer NSCameraUsageDescription no Info.plist.

.NET MAUI​

Adicione o BioTrustCameraView à página. Requer UseBioTrust() no MauiProgram.

<ContentPage xmlns:bt="clr-namespace:BioTrust.Maui;assembly=BioTrust.Maui">
<bt:BioTrustCameraView x:Name="Camera" />
</ContentPage>
var sessao = new BioTrustAccessControl(new AccessControlConfig
{
Uuid = "seu-uuid",
ApiUrl = "https://api.biotrust.io",
TerminalLabel = "Portaria"
});

sessao.Authorized += autorizacao => MainThread.BeginInvokeOnMainThread(() =>
{
// autorizacao.PersonId, autorizacao.Name, autorizacao.Confidence
});

sessao.Revoked += () => MainThread.BeginInvokeOnMainThread(() =>
{
// Bloquear o acesso
});

await sessao.StartAsync(Camera);

sessao.PersonPassed(); // Pessoa passou pelo acesso
sessao.Stop(); // Encerrar a sessão

Eventos disponíveis: Authorized, Revoked, Unknown, Denied, PermissionDenied, Idle, Presence, StateChanged e FaceTracked. Os eventos podem ser disparados fora da thread principal.

Flutter​

import 'package:biotrust_flutter/biotrust_flutter.dart';

BioTrustCameraController? camera;

// No layout
BioTrustCameraView(onCreated: (controller) => camera = controller);

// Após a criação da view e com a permissão de câmera concedida
final sessao = BioTrustAccessControl(
AccessControlConfig(
uuid: 'seu-uuid',
apiUrl: 'https://api.biotrust.io',
terminalLabel: 'Portaria',
),
onAuthorized: (autorizacao) {
// Liberar o acesso: autorizacao.personId, autorizacao.name, autorizacao.confidence
},
onRevoked: () {
// Bloquear o acesso
},
);

await sessao.start(camera);
sessao.personPassed(); // Pessoa passou pelo acesso
sessao.stop(); // Encerrar a sessão

Eventos disponíveis: onAuthorized, onRevoked, onUnknown, onDenied, onPermissionDenied, onIdle, onPresence, onStateChanged, onDiagnostics e onFaceTracked. Os eventos são entregues na thread principal.

React Native​

import { useRef } from 'react';
import {
BioTrustAccessControl,
BioTrustCameraView,
type BioTrustCameraViewHandle,
} from '@biotrust-io/react-native';

const camera = useRef<BioTrustCameraViewHandle>(null);

// No layout
<BioTrustCameraView ref={camera} style={{ flex: 1 }} />

// Após a montagem da view e com a permissão de câmera concedida
const sessao = new BioTrustAccessControl(
{ uuid: 'seu-uuid', apiUrl: 'https://api.biotrust.io', terminalLabel: 'Portaria' },
{
onAuthorized: (autorizacao) => {
// Liberar o acesso: autorizacao.personId, autorizacao.name, autorizacao.confidence
},
onRevoked: () => {
// Bloquear o acesso
},
},
);

await sessao.start(camera.current);
sessao.personPassed(); // Pessoa passou pelo acesso
sessao.stop(); // Encerrar a sessão

Eventos disponíveis: onAuthorized, onRevoked, onUnknown, onDenied, onPermissionDenied, onIdle, onPresence, onStateChanged, onDiagnostics e onFaceTracked.

Web​

const sdk = new BioTrustSDK();
await sdk.initialize();

const sessao = sdk.createAccessControl(
{
uuid: "seu-uuid",
apiUrl: "https://api.biotrust.io",
},
{
onAuthorize: (pessoa) => { /* pessoa.personId, pessoa.name, pessoa.confidence */ },
onRevoke: () => { },
onUnknown: () => { },
onDeny: (mensagem) => { },
onDenyPermission: (mensagem) => { },
onIdle: () => { },
onStateChanged: (estado) => { },
}
);

await sessao.start(document.getElementById("camera"));
sessao.personPassed();
sessao.stop();

onAuthorize é obrigatório. O SDK Web não possui o estado de vigília.

Parâmetros​

ParâmetroPadrãoDescrição
uuid—Identificador do cliente. Obrigatório.
apiUrl—URL da API. Obrigatório.
releaseWindowSeconds8Duração da autorização, em segundos, caso personPassed() não seja chamado.
revokeOnMismatchtrueRevoga a autorização quando um rosto não reconhecido é detectado durante a liberação.
unknownCooldownSeconds2Intervalo, em segundos, após a detecção de uma pessoa não cadastrada.
idleSeconds30Tempo sem detecção de rosto, em segundos, para o evento de ociosidade. 0 desativa o evento.
watchForFacetrueMantém a detecção de presença pela câmera. Não se aplica ao SDK Web.
useFrontCameratrueUtiliza a câmera frontal. Não se aplica ao SDK Web.
terminalLabel—Identificação do terminal no Dashboard. Não se aplica ao SDK Web.
useServerPolicytrueAplica os parâmetros definidos no ponto de acesso. Não se aplica ao SDK Web.

Nomenclatura por plataforma: métodos set... do AccessControlConfig.Builder (Android), propriedades do BTAccessConfig (iOS) propriedades do AccessControlConfig em PascalCase (.NET MAUI) e campos do AccessControlConfig (Flutter e React Native).

Posição do rosto​

Os eventos onFaceBox (Android), didTrackFace (iOS), FaceTracked (.NET MAUI) e onFaceTracked (Flutter e React Native) informam a posição do rosto em coordenadas normalizadas (0 a 1, origem no canto superior esquerdo) em relação à área visível da câmera. O recorte do preview e o espelhamento da câmera frontal já estão aplicados: para desenhar sobre o preview, multiplique as coordenadas pela largura e pela altura da view.