DocumentDetector
Capture fotos confiáveis dos documentos de seus usuários com qualidade para o posterior envio à nossa API de Combate à Fraude.
Documentos suportados
Atualmente, os documentos suportados em Android são:
public enum Document {
RG_FRONT, // frente do RG, parte onde está a foto
RG_BACK, // verso do RG, onde está os dados
RG_FULL, // RG aberta, aparecendo tanto a frente quanto o verso
CNH_FRONT, // frente da CNH, parte onde está a foto
CNH_BACK, // verso da CNH, parte onde está a assinatura
CNH_FULL, // CNH aberta, aparecendo tanto a frente quanto o verso
CRLV, // CRLV
RNE_FRONT, // frente do RNE e RNM, onde estão os dados
RNE_BACK, // verso do RNE e RNM, onde está a foto
PASSPORT, // Passaporte, apenas um lado, mostrando todos os dados
CTPS_FRONT, // Frente da CTPS, onde contém a foto
CTPS_BACK, // Verso da CTPS, onde contém os dados
OTHERS, // outros documentos de identificação em geral, como RNE, Identidade Militar, OAB e CRLV
ANY; // permite o envio de qualquer captura
}
Tamanho do SDK
Um máximo de aproximadamente 9.6 MB, podendo diminuir em virtude desses elementos.
Optimizando o tamanho
Se você deseja diminuir o tamanho do DocumentDetector
, adicione essa configuração em seu build.gradle
a nível de app:
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
Isso reduzirá o tamanho do app final em cerca de 2 MB. Segundo a documentação do TensorFlow, essa configuração cobre a maioria dos dispositivos modernos.
Analytics
Nossos SDKs por padrão coletam informações sobre o usuário e ambiente em execução para melhorar o mapeamento de fraudadores e entender seus comportamentos. Recomendamos manter essa coleta ativa pois o único intuito desses dados é para redução de fraudes, mas se desejar, você desabilitar pelo parâmetro .setAnalyticsSettings(boolean useAnalytics)
.
Permissões em tempo de execução
Permissão | Motivo | Obrigatória? |
---|---|---|
CAMERA | Para capturar a(s) foto(s) do(s) documento(s) | Sim |
Instanciando o objeto DocumentDetector
Primeiro, crie um objeto do tipo DocumentDetector
. Este objeto serve para você configurar todos as suas regras de negócio para o SDK:
DocumentDetector mDocumentDetector = new DocumentDetector.Builder(String mobileToken)
// veja a tabela abaixo
.build();
Todos os parâmetros anotados com
@Nullable
podem receber valoresnull
, útil caso você queira configurar somente um dos parâmetros de um mesmo método.
DocumentDetector.Builder
Parâmetro | Obrigatório? |
---|---|
String mobileToken Token de utilização associado à sua conta da CAF. | Sim |
.setDocumentSteps(DocumentDetectorStep[] documentSteps) Define o fluxo de captura de documentos, como explicado aqui. | Sim |
.setPeopleId(String peopleId) Identificador do usuário para fins de identificação de perfil fraudador e auxiliar na identificação dos logs do Analytics em casos de erros e bugs. | Não, usado para o analytics |
.setAnalyticsSettings(boolean useAnalytics) Habilita/desabilita a coleta de dados para o analytics. | Não, o padrão é true |
.setCaptureStages(CaptureStage[] captureStages) Define cada estágio de dificuldade da captura, normalmente variando da mais rígida com mais qualidade para a menos rígida com menos qualidade, como explicado aqui. | Não. O padrão é o recomendado |
.setPopupSettings(boolean show) Altera a configuração dos popups inflados antes de cada documento. | Não. O padrão é true |
.setLayout(@Nullable @LayoutRes Integer layoutId) Substitui o layout padrão do SDK. Crie um arquivo na pasta layout do seu projeto, copie este template e faça as alterações desejadas. | Não. O padrão é esse |
.setMask(MaskType type) Define o tipo de máscara utilizada nas capturas. Existem três tipos: MaskType.DEFAULT , com o padrão pontilhado no formato do documento;MaskType.DETAILED , que apresenta uma ilustração do documento solicitado, junto com a máscara pontilhada;MaskType.NONE , que remove totalmente a máscara. | Não. O padrão é MaskType.DEFAULT |
.setMask(@DrawableRes Integer greenMask, @DrawableRes Integer whiteMask, @DrawableRes Integer redMask) Troca as máscaras para captura do documento: SUCESSO, NORMAL e FALHA, nesta ordem. Caso for utilizar esta opção, utilize máscaras com a mesma área de detecção do documento, essa região é de suma importância para o algoritmo realizar a captura. | Não. Os padrões de máscara são: Normal Sucesso Falha |
.setStyle(@StyleRes int styleResourceId) Substitui o style padrão do SDK. No arquivo styles.xml do seu projeto, copie este template e edite. | Não. O padrão é esse |
.setAudioSettings(boolean enable) Habilita/desabilita a reprodução dos áudios do SDK. | Não. O padrão é true |
.setNetworkSettings(int requestTimeout) Define o tempo de timeout das requests do SDK. | Não. O padrão é 60 (segundos) |
.setLuminositySensorSettings(@Nullable SensorLuminositySettings sensorLuminositySettings) Altera as configurações padrão do sensor de luminosidade. Aplique null se não deseja utilizar este sensor. | Não. O limiar padrão é 5 lx |
.setOrientationSensorSettings(@Nullable SensorOrientationSettings sensorOrientationSettings) Altera as configurações padrão do sensor de orientação. Aplique null se não deseja utilizar este sensor. | Não. O limiar padrão é 3 m/s² |
.setStabilitySensorSettings(@Nullable SensorStabilitySettings sensorStabilitySettings) Altera as configurações padrão do sensor de estabilidade. Aplique null se não deseja utilizar este sensor. | Não. O tempo padrão é 2000 ms e o limiar padrão é 0.5 m/s² |
.setProxySettings(@Nullable ProxySettings proxySettings) Define as configurações de proxy, como explicado aqui. | Não. O padrão é null |
.setPreviewSettings(@NonNull PreviewSettings previewSettings) Habilita/desabilita e permite a configuração da visualização da captura realizada, solicitando a confirmação do usuário para prosseguir. | Não. O padrão é desativado |
.setAutoDetection(boolean enable) Habilita/desabilita a autodetecção e verificações de sensores. Utilize false para desabilitar todas as verificações no dispositivo. Assim, todas validações serão executadas no backend, após a captura. | Não. O padrão é true |
.setCurrentStepDoneDelay(boolean showDelay, int delay) Aplica delay na activity após a finalização de cada etapa. Esse método pode ser utilizado para exibir uma mensagem de sucesso na própria tela após a captura, por exemplo. | Não. O padrão é false |
.setMessageSettings(MessageSettings messageSettings) Permite personalizar as mensagens exibidas no balão de "status" durante o processo de captura e análise. | Não. O padrão é esse |
.setGetImageUrlExpireTime(Time expireTime) Permite personalizar o tempo de expiração da imageUrl . O método recebe como parâmetro o enum Time com os tempos disponíveis. | Não. O padrão é Time.DEFAULT |
.enableSwitchCameraButton(boolean enable) Permite habilitar/desabilitar o botão para o usuário trocar entre a câmera frontal e traseira. | Não. O padrão é True |
.setResolutionSettings(Resolution resolution) Permite configurar a resolução de captura. O método espera como parâmetro uma Resolution que possui as seguintes opções: HD : 720x1280FULL_HD : 1080x1920QUAD_HD : 1440x2560ULTRA_HD : 2160x3840 | Não. O padrão é Resolution.ULTRA_HD |
.setCompressSettings(@IntRange(from = 50, to = 100) int compressQuality) Permite configurar a qualidade no processo de compressão. Por padrão, todas capturas passam por compressão. O método espera como parâmetro valores entre 50 e 100, sendo 100 a compressão com melhor qualidade (recomendado). | Não. O padrão é 100 |
.enableGoogleServices(boolean enable) Permite habilitar/desabilitar recursos do SDK que consomem GoogleServices no SDK, não recomendamos desabilitar os serviços por conta da perda de segurança. | Não. O padrão é true |
.setUseEmulator(boolean use) Permite o uso de emuladores quando true . Quando true , o modo ADB é ativado em conjunto para o emulador funcionar corretamente. Não é recomendado ativar esta opção, utilize apenas para fins de testes. | Não. O padrão é false |
.setUseRoot(boolean use) Permite o uso de dispositivos root quando true . Não é recomendado ativar esta opção, utilize apenas para fins de testes. | Não. O padrão é false |
.setUseDeveloperMode(boolean use) Permite o uso do modo de desenvolvedor quando true . Não é recomendado ativar esta opção, utilize apenas para fins de testes. | Não. O padrão é false |
.setUseAdb(boolean use) Permite o uso do modo de depuração Android Debug Bridge (ADB) quando true . Não é recomendado ativar esta opção, utilize apenas para fins de testes. | Não. O padrão é false |
.setUseDebug(boolean use) Permite o uso do app em modo debug quando true . Não é recomendado ativar esta opção, utilize apenas para fins de testes. | Não. O padrão é false |
.setGetImageUrlExpireTime (String expireTime) Define o tempo de duração da URL da imagem no servidor até ser expirada. Espera receber um intervalo de tempo entre "30m" à "30d". Exemplos: setGetImageUrlExpireTime("30m") : Para configurar apenas minutossetGetImageUrlExpireTime("24h") : Para configurar apenas hora(s)setGetImageUrlExpireTime("1h 10m") : Para configurar hora(s) e minuto(s)setGetImageUrlExpireTime("10d") : Para configurar dia(s) | Não. O padrão é 3h |
.setUploadSettings(UploadSettings uploadSettings) Define as configurações para o upload de documentos. Ativando esta opção, o fluxo do SDK irá solicitar que o usuário envie os arquivos do documento ao invés de realizar a captura com a câmera do dispositivo. Esta opção também inclui as verificações de qualidade do documento. | Não. Por padrão esta opção está desativada, veja aqui como configurá-la. |
.setAllowedPassportCountriesList(CountryCodeList[] countryList) Habilita a opção de permitir passaportes de somente um determinado país emissor, ou, uma lista de países. Veja a lista completa em: ISO 3166-1 alpha-3 Ex.: .setAllowedPassportCountriesList(new CountryCodesList[]{CountryCodesList.BRA}) | Não. Por padrão são aceitos Passaportes emitidos por qualquer país. |
Desativando validações de segurança para teste
Estamos constantemente realizando ações para tornar o produto cada vez mais seguro, mitigando uma série de ataques observados ao processo de captura e, consequentemente, reduzindo o maior número de possíveis fraudes de identidade. O SDK possui alguns bloqueios que podem impedir a execução em certos contextos. Para desabilitá-los, você pode utilizar os métodos conforme o exemplo abaixo:
DocumentDetector.Builder("mobileToken")
.setUseEmulator(true)
.setUseRoot(true)
.setUseDeveloperMode(true)
.setUseAdb(true)
.setUseDebug(true)
.build();
Atenção! A desabilitação das validações de segurança são recomendadas apenas para testes. Para publicação do seu aplicativo em produção, recomendamos utilizar as configurações padrão.
DocumentDetectorStep
Para criar um fluxo de captura, você precisará criar um array de DocumentDetectorStep
, onde cada elemento será um passo da captura. Para construir cada objeto de DocumentDetectorStep
, você pode informar os seguintes elementos:
DocumentDetectorStep detectorStep = new DocumentDetectorStep(Document.RG_FRONT);
Parâmetro | Obrigatório? |
---|---|
Document document Identifica qual documento você deseja capturar no respectivo passo. Veja os tipos de documento suportados aqui. | Sim |
.setStepLabel(@StringRes int stepLabel) Define texto a ser mostrado na parte inferior do layout. | Não. Há um padrão por tipo de Document |
.setIllustration(@StringRes int illustration) Define ilustração a ser mostrada no popup anterior à captura. | Não. Há um padrão por tipo de Document |
.setStepAudio(@RawRes int stepAudio) Define áudio que será reproduzido no início do passo. | Não. Há um padrão por tipo de Document |
.setMask(@DrawableRes Integer whiteMaskResId, @DrawableRes Integer greenMaskResId, @DrawableRes Integer redMaskResId) Define as máscaras para cada tipo de documento. A utilização desse método sobrescreve as máscaras definidas no método .setMask da DocumentDetector.Builder . | Não. O padrão é definido pelo método .setMask da DocumentDetector.Builder |
CaptureStage
Para melhorar a UX do cliente, recomendamos criar estágios de dificuldade para o DocumentDetector. Para isso, oferecemos o objeto CaptureStage
, onde você pode definir os seguintes parâmetros:
Parâmetro |
---|
Long durationMillis Duração do estágio, em milissegundos. Se você não quiser um tempo limite, parametrize null . |
boolean wantSensorCheck Habilita/Desabilita a utilização dos sensores para a captura da foto. |
QualitySettings qualitySettings Configurações de verificação de qualidade do documento. Se não quiser verificar a qualidade do documento, parametrize null . |
DetectionSettings detectionSettings Configurações de detecção automática do documento. Se não quiser utilizar a detecção automática, parametrize null . |
CaptureMode captureMode Modo de captura do documento, podendo ser CaptureMode.AUTOMATIC ou CaptureMode.MANUAL . Na captura manual, um botão será habilitado para o usuário realizar a captura. |
Exemplo de configuração
Como o parâmetro .setCaptureStages
não é obrigatório, se não for utilizado, o DocumentDetector usará este padrão:
QualitySettings qualitySettings = new QualitySettings(1.8);
DetectionSettings detectionSettings = new DetectionSettings(0.91, 5);
new CaptureStage[]{
new CaptureStage(20000L, true, qualitySettings, detectionSettings, CaptureMode.AUTOMATIC),
new CaptureStage(15000L, false, qualitySettings, detectionSettings, CaptureMode.AUTOMATIC),
new CaptureStage(10000L, false, qualitySettings, detectionSettings, CaptureMode.MANUAL),
new CaptureStage(null, false, qualitySettings, null, CaptureMode.MANUAL)
}
QualitySettings
Parâmetro | Observações |
---|---|
double threshold Limiar que define se a captura do documento tem qualidade ou não. | Varia entre 1.0 e 5.0, onde 1.8 é o limiar recomendado |
DetectionSettings
Parâmetro | Observações |
---|---|
double threshold Limiar que define se o documento exibido pelo usuário é ou não o documento que está sendo solicitado. | Valor entre 0.0 e 1.0, onde 0.91 é o recomendado |
int consecutiveFrames Número de frames corretos consecutivos para aceitação do documento. | 5 é o recomendado. Quanto mais frames, mais irá demorar para detectar o documento |
UploadSettings
Para ativar a funcionalidade de upload de documentos é necessário instanciar um objeto do tipo UploadSettings(boolean enable)
e configurar os seus parâmetros:
Parâmetro | Obrigatório? |
---|---|
.setEnable(Boolean enable) Habilita/desabilita esta funcionalidade. | Não. O padrão é true |
.setCompress(Boolean enable) Habilita/desabilita a compressão do arquivo antes de realizar o upload. | Não. O padrão é true |
.setFileFormats(FileFormat[] fileFormats) Define o(os) formatos de arquivos que serão aceitos para upload. | Não. Por padrão são aceitos: .PDF , .JPG, .JPEG, .PNG, .HEIF. |
.setMaxFileSize(Integer maxFileSize) Define o limite máximo em KB do arquivo para upload. | Não. O limite padrão é 20000 KB (20MB). |
.setActivityLayout ( Integer activityLayout) Define o layout de plano de fundo do upload de documentos. | Não. |
.setPopUpLayout (Integer popUpLayout) Define o layout do popup de solicitação do documento para upload. | Não. |
Atualmente, os formatos de arquivos suportados são:
public enum FileFormat {
PNG("image/png"),
JPG ("image/jpg"),
JPEG ("image/jpeg"),
PDF("application/pdf"),
HEIF("image/heif");
}
MessageSettings
Para utilizar, basta instanciar um objeto MessageSettings
e utilizar os métodos conforme a necessidade de personalização.
Método | Valor padrão |
---|---|
.setPopupDocumentSubtitleMessage(@NonNull @StringRes Integer message) Mensagem exibida no subtítulo do pop-up que traz a ilustração do documento que está sendo solicitado para captura. | “Posicione o documento em uma mesa, centralize-o na marcação e aguarde a captura automática.” |
.setFitTheDocumentMessage(Integer message) Mensagem orientando encaixar o documento na máscara. | "Encaixe o documento na marcação" |
.setHoldItMessage(Integer message) Mensagem exibida no momento em que a captura está sendo realizada. | "Segure assim" |
.setVerifyingQualityMessage(Integer message) Mensagem exibida quando o SDK realiza uma requisição ao backend, verificando qualidade. | "Verificando qualidade…" |
.setLowQualityDocumentMessage(Integer message) Mensagem exibida quando a qualidade da captura for reprovada. | "Ops, não foi possível ler as informações. Por favor, tente novamente" |
.setUploadingImageMessage(Integer message) Mensagem exibida quando não há verificação de qualidade e a captura está sendo salva nos servidores. | "Enviando imagem…" |
.setShowOpenDocumentErrorMessage(boolean show, @Nullable Integer message) Mensagem exibida quando for exibido um documento aberto, a mensagem será exibido juntamente com a mensagem de erro no documento sendo usado, exemplo: caso o usuário mostre uma CNH aberta, será mostrado a mensagem de erro padrão "Essa é uma CNH Aberta" + a mensagem definida. | "Use o documento fechado e tente novamente" |
.setWaitMessage(boolean show, @Nullable Integer message) Mensagem exibida ao iniciar a câmera. | "Aguarde..." |
.setSensorLuminosityMessage(@NonNull @StringRes Integer message) Mensagem exibida quando a limiar de luminosidade é menor que a esperada. | "Ambiente muito escuro" |
.setSensorOrientationMessage(@NonNull @StringRes Integer message) Mensagem exibida quando a limiar de orientação é menor que a esperada. | "Celular não está na vertical" |
.setSensorStabilityMessage(@NonNull @StringRes Integer message) Mensagem exibida quando a limiar de orientação é menor que a esperada. | "Mantenha o celular parado" |
.setWrongDocumentMessage_RG_FRONT(Integer message) Mensagem exibida quando a frente do RG é exibida em um fluxo diferente do esperado. | "Ops, esta é a frente do RG" |
.setWrongDocumentMessage_RG_BACK(Integer message) Mensagem exibida quando a verso do RG é exibida em um fluxo diferente do esperado. | "Ops, este é o verso do RG" |
.setWrongDocumentMessage_RG_FULL(Integer message) Mensagem exibida quando o RG aberto é exibida em um fluxo diferente do esperado. | "Ops, este é o RG aberto" |
.setWrongDocumentMessage_CNH_FRONT(Integer message) Mensagem exibida quando a frente do CNH é exibida em um fluxo diferente do esperado. | "Ops, esta é a frente da CNH" |
.setWrongDocumentMessage_CNH_BACK(Integer message) Mensagem exibida quando a verso do CNH é exibida em um fluxo diferente do esperado. | "Ops, este é o verso da CNH" |
.setWrongDocumentMessage_CNH_FULL(Integer message) Mensagem exibida quando a CNH aberta é exibida em um fluxo diferente do esperado. | "ps, esta é a CNH aberta" |
.setWrongDocumentMessage_CRLV(Integer message) Mensagem exibida quando o CRLV é exibido em um fluxo diferente do esperado. | "Ops, este é o CRLV" |
.setWrongDocumentMessage_RNE_FRONT(Integer message) Mensagem exibida quando a frente do RNE é exibida em um fluxo diferente do esperado. | "Ops, esta é a frente do RNE" |
.setWrongDocumentMessage_RNE_BACK(Integer message) Mensagem exibida quando o verso do RNE é exibida em um fluxo diferente do esperado. | "Ops, este é o verso do RNE" |
.setPositiveButtonMessage(Integer message) Permite a customização da mensagem do botão de confirmação. | Não. O padrão é "Ok, entendi!" |
.setUploadedImageIsTooLargeTitle Define o título do popup de upload quando o arquivo enviado excede o tamanho máximo permitido. | Não. O padrão é "Tamanho de foto excedido." |
.setUploadedImageIsTooLargeMessage Define a mensagem do popup de upload quando o arquivo enviado excede o tamanho máximo permitido. | Não. O padrão é "Parece que tamanho da foto que você escolheu excede o tamanho permitido. Tente enviar um novo arquivo mais leve." |
.setUploadedImageHasInvalidFormatTitle Define o título do popup de upload quando o formato do arquivo enviado não é válido. | Não. O padrão é "Formato inválido." |
.setUploadedImageNotSupportedFormatMessage Define a mensagem do popup de upload quando o formato do arquivo enviado não é válido. | Não. O padrão é "Parece que o formato da sua foto não é suportado. Tente reenviar usando os formatos de JPG, PNG ou PDF." |
.setUploadedImageGenericErrorTitle Define o título de erro genérico para o popup de upload. | Não. O padrão é "Ops, algo deu errado." |
.setUploadedImageWrongMessage Define a mensagem de erro genérico para o popup de upload. | Não. O padrão é "Parece que a foto não é a esperada. Envie um foto do tipo de documento escolhido." |
.setUploadedImageLowQualityTitle Define o título do popup de upload quando a qualidade da imagem enviada é reprovada | Não. O padrão é "Ops, qualidade baixa" |
.setUploadedImageLowQualityMessage Define a mensagem do popup de upload quando a qualidade da imagem enviada é reprovada | Não. O padrão é "Parece que a qualidade da foto está muito baixa. Tente enviar uma foto com a qualidade maior." |
.setUploadPopupLoadingMessage Define a mensagem exibida no popup de upload enquanto o arquivo está sendo enviado. | Não. O padrão é "Enviando sua foto" |
Exemplo MessageSettings
MessageSettings messageSettings = new MessageSetings()
.setFitTheDocumentMessage(R.string.exempleFit)
.setHoldItMessage(R.string.exempleHoldIt);
Iniciando a DocumentDetectorActivity
Após a criação do DocumentDetector
, inicie a DocumentDetectorActivity
passando esse objeto como parâmetro via intent
extra:
Intent mIntent = new Intent(context, DocumentDetectorActivity.class);
mIntent.putExtra(DocumentDetector.PARAMETER_NAME, mDocumentDetector);
startActivityForResult(mIntent, REQUEST_CODE);
Obtendo o resultado
Para obter o objeto DocumentDetectorResult
, que contém as capturas obtidas pelo SDK, sobrescreva o método onActivityResult
na mesma Activity que você iniciou a DocumentDetectorActivity
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE){
if (resultCode == RESULT_OK && data != null){
DocumentDetectorResult mDocumentDetectorResult = (DocumentDetectorResult) data.getSerializableExtra(DocumentDetectorResult.PARAMETER_NAME);
// verifique mDocumentDetectorResult.getSDKFailure() para descobrir qual foi o motivo da finalização do SDK
} else {
// o usuário fechou a activity
}
}
super.onActivityResult(requestCode, resultCode, data);
}
DocumentDetectorResult
Parâmetro | Pode ser nulo? |
---|---|
Capture[] captures O array com as respectivas capturas dos documentos parametrizados. | Sim, em caso de erro |
String type A classe do fluxo de documentos lidos. Esse parâmetro é útil em uma integração com nossa rota de OCR. Os types existentes são: ["blank", "cnh", "cnh_new", "generic", "rg", "rg_new", "rne", "rnm", "ctps", "passport, crlv, crlv_new"] | Sim, em caso de erro ou quando não conseguiu verificar a qualidade. |
String trackingId Identificador dessa execução em nossos servidores. Se possível, salve este campo e mande-o junto para nossa API. Assim, teremos mais dados de como o usuário se comportou durante a execução. | Sim, caso o usuário configure useAnalytics = false ou as chamadas de analytics não funcionem |
SDKFailure sdkFailure Objeto que informa o motivo do encerramento do SDK. Para mais informações, veja aqui. | Sim, em caso de sucesso |
Capture
Parâmetro | Pode ser nulo? |
---|---|
String imagePath Caminho completo da imagem no dispositivo do usuário. | Não |
String imageUrl URL do documento no servidor da CAF. | Não |
String label Identificação do tipo do documento capturado, dentro das seguintes possibilidades: ["blank", "cnh_back", "cnh_front", "cnh_full", "new_cnh_back", "new_cnh_front", "new_cnh_full", "crlv", "crlv_new", "generic", "rg_back", "rg_front", "rg_full", "rg_new_back", "rg_new_front", "rg_new_full", "rne_back", "rne_front", "rnm_back", "rnm_front", "ctps_back", "ctps_front", "passport"] . | Sim, quando não conseguiu verificar a qualidade |
Double quality Qualidade inferida pelo algoritmo de qualidade do documento, quando habilitado. Varia entre 1.0 e 5.0. | Sim, quando não conseguiu verificar a qualidade |
int lensFacing Define a face da câmera que foi utilizada. Utilize DocumentDetectorResult.LENS_FACING_FRONT ou DocumentDetectorResult.LENS_FACING_FRONT para validar. | Não |