Распознавание, трэкинг и нахождение контрольных точек человеческого лица

Illya Rodin

"Лицо" как объект:

  • Большой набор, условно, обязательных аттрибутов

  • Легко обнаружить и расспознать ключевые точки

  • Большой набор данных для обучения

  • Широкая область применения

Обнаружение лица

Android Vision API

build.gradle

dependencies {
    ...
    compile 'com.google.android.gms:play-services-vision:10.2.4'
    ...
}

AndroidManifest.xml

 <application>
    ...
    <meta-data
            android:name="com.google.android.gms.vision.DEPENDENCIES"
            android:value="face" />
    ...
 </application>

FaceDetector

  FaceDetector detector = new FaceDetector.Builder(context)
                .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS)
                .setTrackingEnabled(true)
                .setProminentFaceOnly(true)
                .setLandmarkType(FaceDetector.NO_LANDMARKS)
                .setMode(FaceDetector.FAST_MODE)
                .build();

Face Tracker

public class FaceTracker extends Tracker<Face> {


    public void onNewItem(int faceId, Face face) {
    }

    public void onUpdate(FaceDetector.Detections<Face> results, Face face) {
    }

    public void onMissing(FaceDetector.Detections<Face> results) {
    }

    public void onDone() {
    }
}

Face Tracker Factory

  private class FaceTrackerFactory implements MultiProcessor.Factory<Face> {
        @Override
        public Tracker<Face> create(Face face) {
            return new FaceTracker();
        }
    }

//------------------------------
{
  detector.setProcessor(
        new MultiProcessor.Builder<>(new FaceTrackerFactory())
                        .build());
  if (!detector.isOperational()) {
              //TODO something
  }
}

Camera Source

mCameraSource = new CameraSource.Builder(context, detector)
                .setRequestedPreviewSize(640, 480)
                .setFacing(CameraSource.CAMERA_FACING_BACK)
                .setRequestedFps(30.0f)
                .build();

OpenCV

HAAR Cascade Detector

Обучение

 

Необходимо: Open CV (opencv_traincascade, opencv_createsamples)

opencv_createsamples -info face.txt -num 1000 -w 48 -h 24 -vec face.vec

opencv_traincascade -data data -vec face.vec -bg neg.txt -numPos 1000 -numNeg 1000 -numStages 20 
-w 48 -h 24 -featureType HAAR -precalcValBufSize 512 -precalcIdxBufSize 512 -mode ALL

LBP Cascade Detector

Histogram of Oriented Gradients (HOG)

Распознавание лица

Обнаружение контрольных точек

Android Vision API

FaceDetector

  FaceDetector detector = new FaceDetector.Builder(context)
                .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS)
                .setTrackingEnabled(true)
                .setLandmarkType(FaceDetector.ALL_LANDMARKS)
                .build();
{
//----------------------------------------------------
 for (Landmark landmark : face.getLandmarks()) {

    int cx = (int) (landmark.getPosition().x);
    int cy = (int) (landmark.getPosition().y);

    if (landmark.getType() == 4) {
        canvas.drawBitmap(...);
    }
//----------------------------------------------------
}

Dlib

Demo

Q&A

Распознавание, трекинг и нахождение контрольных точек человеческого лица

By ris

Распознавание, трекинг и нахождение контрольных точек человеческого лица

  • 1,597