For the complete documentation index, see llms.txt. This page is also available as Markdown.
Como adicionar captura de documento com foto e correspondência facial ao seu aplicativo web ou mobile
Observe: este guia se aplica somente ao fluxo sem container.
Observe que o Oz Liveness Mobile SDK não inclui uma interface de usuário para digitalização de documentos oficiais. Talvez seja necessário explorar SDKs alternativos que ofereçam essa funcionalidade ou implementá-la por conta própria. O Web SDK inclui uma tela simples de captura de documento de identidade com foto.
Este guia descreve as etapas necessárias para adicionar correspondência facial à sua verificação de Liveness.
Até este ponto, você já deve ter implementado a gravação de vídeo de Liveness e a verificação de Liveness. Se não, consulte estes guias:
Integração do Oz Liveness Web SDK
Integração do Oz Liveness Mobile SDK
Adicionando uma etapa de captura de documento de identidade com foto ao Web SDK
Basta adicionar photo_id_front à lista de ações do plugin, por exemplo,
Adicionando correspondência facial ao Android SDK
Para os fins deste guia, assume-se que sua foto de referência (por exemplo, o lado frontal de um documento de identidade) está armazenada no dispositivo como reference.jpg.
Modifique o código que executa a análise da seguinte forma:
Para análises no dispositivo, você pode alterar o modo de análise de Analysis.Mode.SERVER_BASED como Analysis.Mode.ON_DEVICE
Para os fins deste guia, assume-se que sua foto de referência (por exemplo, o lado frontal de um documento de identidade) está armazenada no dispositivo como reference.jpg.
Modifique o código que executa a análise da seguinte forma:
Para análises no dispositivo, você pode alterar o modo de análise de mode: .serverBased como mode: .onDevice
Você poderá acessar suas mídias e os resultados da análise no Web UI por meio do navegador ou programaticamente via API.
Os métodos do Oz API, assim como os métodos do Mobile e do Web SDK, podem ser combinados com grande flexibilidade. Explore as opções disponíveis no Guia do desenvolvedor seção.
private fun analyzeMedia(mediaList: List<OzAbstractMedia>) {
val refFile = File(context.filesDir, "reference.jpg")
val refMedia = OzAbstractMedia.OzDocumentPhoto(
OzMediaTag.PhotoIdFront , // OzMediaTag.PhotoSelfie para uma foto que não seja de documento de identidade
refFile.absolutePath
)
AnalysisRequest.Builder()
.addAnalysis(Analysis(Analysis.Type.QUALITY, Analysis.Mode.SERVER_BASED, mediaList))
.addAnalysis(Analysis(Analysis.Type.BIOMETRY, Analysis.Mode.SERVER_BASED, mediaList + refMedia))
.build()
.run(object : AnalysisRequest.AnalysisListener {
override fun onSuccess(result: List<OzAnalysisResult>) {
result.forEach {
println(it.resolution.name)
println(it.folderId)
}
}
override fun onError(error: OzException) {
error.printStackTrace()
}
})
}
private void analyzeMedia(List<OzAbstractMedia> mediaList) {
File refFile = new File(context.getFilesDir(), "reference.jpg");
OzAbstractMedia refMedia = new OzAbstractMedia.OzDocumentPhoto(
OzMediaTag.PhotoIdFront , // OzMediaTag.PhotoSelfie para uma foto que não seja de documento de identidade
refFile.getAbsolutePath()
);
ArrayList<OzAbstractMedia> mediaWithReferencePhoto = new ArrayList<>(mediaList);
mediaWithReferencePhoto.add(refMedia);
new AnalysisRequest.Builder()
.addAnalysis(new Analysis(Analysis.Type.QUALITY, Analysis.Mode.SERVER_BASED, mediaList, Collections.emptyMap()))
.addAnalysis(new Analysis(Analysis.Type.BIOMETRY, Analysis.Mode.SERVER_BASED, mediaWithReferencePhoto, Collections.emptyMap()))
.build()
.run(new AnalysisRequest.AnalysisListener() {
@Override public void onStatusChange(@NonNull AnalysisRequest.AnalysisStatus analysisStatus) {}
@Override
public void onSuccess(@NonNull List<OzAnalysisResult> list) {
String folderId = list.get(0).getFolderId();
}
@Override
public void onError(@NonNull OzException e) { e.printStackTrace(); }
});
}
let imageURL = URL(fileURLWithPath: NSTemporaryDirectory())
.appendingPathComponent("reference.jpg")
let refMedia = OZMedia.init(movement: .selfie,
mediaType: .movement,
metaData: nil,
videoURL: nil,
bestShotURL: imageUrl,
preferredMediaURL: nil,
timestamp: Date())
var mediaBiometry = [OZMedia]()
mediaBiometry.append(refMedia)
mediaBiometry.append(contentsOf: mediaToAnalyze)
let analysisRequest = AnalysisRequestBuilder()
let analysisBiometry = Analysis.init(media: mediaBiometry, type: .biometry, mode: .serverBased)
let analysisQuality = Analysis.init(media: mediaToAnalyze, type: .quality, mode: .serverBased)
analysisRequest.addAnalysis(analysisBiometry)
analysisRequest.addAnalysis(analysisQuality)
analysisRequest.uploadMedia(mediaBiometry)
analysisRequest.run(
scenarioStateHandler: { state in }, // manipulador de progresso das etapas do cenário
uploadProgressHandler: { (progress) in } // manipulador de progresso de upload de arquivo
){ (analysisResults : [OzAnalysisResult], error) in
// receba e trate os resultados das análises aqui
for result in analysisResults {
print(result.resolution)
print(result.folderID)
}
}