Android – Mobile Vision, API de detecção de faces e objetos (Find objects in photos and video, using real-time on-device vision technology. Face Detection)

face_detect

Introdução à Visão Móvel

A API Mobile Vision fornece uma estrutura para encontrar objetos em fotos e vídeos. A estrutura inclui detectores, que localizam e descrevem objetos visuais em imagens ou quadros de vídeo e uma API orientada a eventos que rastreia a posição desses objetos no vídeo.

API

Atualmente, a API Mobile Vision inclui detectores de rosto, código de barras e texto, que podem ser aplicados separadamente ou em conjunto.

O pacote de visão inclui uma estrutura de funcionalidade de base comum e subpacotes para implementações específicas de detectores:

Funcionalidade comum: com.google.android.gms.vision
Detector de rosto: com.google.android.gms.vision.face
Detector de código de barras: com.google.android.gms.vision.barcode
Detetor de texto: com.google.android.gms.vision.text

COMEÇANDO…

Primeiros passos – comece com a API Mobile Vision.
Conceitos de Detecção de Rosto – Saiba mais sobre como a detecção de rosto funciona.
Resumo dos códigos de barra – Saiba mais sobre os tipos de códigos de barras que a API Visão pode detectar e analisar.
Text Recognition: use a API de texto para ler blocos de texto usando a câmera de um dispositivo móvel.
Detectores múltiplos – Tutorial sobre o código de barras e detecção de rosto ao mesmo tempo.

EXEMPLO RÁPIDO PARA DETECÇÃO FACIAL

Adicionando dependência:

compile 'com.google.android.gms:play-services-vision:8.1.0'

Adicionar meta-data no arquivo Manifest.xml dentro do nó application:

Agora que seu projeto está configurado, é hora de começar a detectar rostos. No setBitmap (bitmap bitmap) você precisa criar um FaceDetector. Isso pode ser feito usando um FaceDetector.Builder, permitindo que você defina vários parâmetros que afetam a rapidez com que as faces serão detectadas e quais os outros dados que o FaceDetector irá gerar.

As configurações escolhidas dependem do que você está tentando fazer no seu aplicativo. Se você habilitar a busca de pontos de referência, as faces serão detectadas mais devagar. Tal como acontece com a maioria das coisas na programação, tudo tem seus trade-offs. Para saber mais sobre as opções disponíveis para o FaceDetector.Builder, você pode encontrar a documentação oficial no site do desenvolvedor do Android.

        FaceDetector detector = new FaceDetector.Builder( getContext() )
        .setTrackingEnabled(false)
        .setLandmarkType(FaceDetector.ALL_LANDMARKS)
        .setMode(FaceDetector.FAST_MODE)
        .build();

Você também precisa ter uma verificação para ver se o FaceDetector está operacional. Quando um usuário usa a detecção de rosto pela primeira vez em seu dispositivo, o Play Services precisa sair e obter um conjunto de pequenas bibliotecas nativas para processar o pedido da sua aplicação. É importante lidar com a contingência caso falhe.

Se o FaceDetector estiver operacional, você pode converter seu bitmap em um objeto Frame e passá-lo para o detector para coletar dados sobre rostos na imagem. Quando tiver terminado, você precisará liberar o detector para evitar um vazamento de memória.

if (!detector.isOperational()) {
    //Handle contingency
} else {
    Frame frame = new Frame.Builder().setBitmap(bitmap).build();
    SparseArray mFaces = detector.detect(frame);
    detector.release();
}

As faces encontradas são retornadas em uma lista de SparseArray<Face>. Os métodos getIsSmilingProbability(), getIsLeftEyeOpenProbability() e getIsRightEyeOpenProbability() tentam determinar se os olhos estão abertos ou se a pessoa detectada está sorrindo retornando um flutuador variando de 0,0 a 1,0. Quanto mais perto de 1,0, mais provável que a pessoa esteja sorrindo ou tenha o olho esquerdo ou direito aberto.

private void logFaceData() {
    float smilingProbability;
    float leftEyeOpenProbability;
    float rightEyeOpenProbability;
    float eulerY;
    float eulerZ;
    for( int i = 0; i < mFaces.size(); i++ ) {
        Face face = mFaces.valueAt(i);
 
        smilingProbability = face.getIsSmilingProbability();
        leftEyeOpenProbability = face.getIsLeftEyeOpenProbability();
        rightEyeOpenProbability = face.getIsRightEyeOpenProbability();
        eulerY = face.getEulerY();
        eulerZ = face.getEulerZ();
 
        Log.e( LOG, "Smiling: " + smilingProbability );
        Log.e( LOG, "Left eye open: " + leftEyeOpenProbability );
        Log.e( LOG, "Right eye open: " + rightEyeOpenProbability );
        Log.e( LOG, "Euler Y: " + eulerY );
        Log.e( LOG, "Euler Z: " + eulerZ );
    }
}

----
Alguns links úteis:

Help DEV - Analista desenvolvedor Java / Android

http://helpdev.com.br/zarelli

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>