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(); SparseArraymFaces = 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:
- https://developers.google.com/vision/
- https://github.com/googlesamples/android-vision
- https://code.tutsplus.com/tutorials/an-introduction-to-face-detection-on-android--cms-25212
- https://www.sitepoint.com/face-detection-in-android-with-google-play-services/
- https://github.com/sitepoint-editors/Android-Face-Recognition