web-dev-qa-db-fra.com

API de reconnaissance faciale

En utilisant Java Android, j'essaie de trouver un moyen de reconnaître le visage avec une image donnée par l'appareil photo.

Des idées? Quelqu'un a-t-il des suggestions d'API?

69
Roshan Wijesena

Voici quelques liens que j'ai trouvés dans les bibliothèques de reconnaissance faciale.

Liens d'identification d'images:

45
A. Abiri

Vous pouvez essayer Microsoft Face API. Il peut détecter et identifier des personnes. en savoir plus sur les API de visage ici .

0
VivekRajendran

macgyver propose des programmes de détection de visage via une API simple à utiliser. 

Le programme ci-dessous prend une référence à une image publique et renvoie un tableau des coordonnées et des dimensions de tous les visages détectés dans l'image.

https://askmacgyver.com/explore/program/face-location/5w8J9u4z

0
Timothy Moody

Utilisez ce code

public class MainActivity extends AppCompatActivity { 

private FaceOverlayView mFaceOverlayView;

@Override 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mFaceOverlayView = (FaceOverlayView) findViewById( R.id.face_overlay );

    InputStream stream = getResources().openRawResource( R.raw.face );
    Bitmap bitmap = BitmapFactory.decodeStream(stream);

    mFaceOverlayView.setBitmap(bitmap);

} } 

Faceoverlay.Java

public class FaceOverlayView extends View {

private Bitmap mBitmap;
private SparseArray<Face> mFaces;

public FaceOverlayView(Context context) {
    this(context, null);
} 

public FaceOverlayView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
} 

public FaceOverlayView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
} 

public void setBitmap( Bitmap bitmap ) {
    mBitmap = bitmap;
    FaceDetector detector = new FaceDetector.Builder( getContext() )
            .setTrackingEnabled(true) 
            .setLandmarkType(FaceDetector.ALL_LANDMARKS)
            .setMode(FaceDetector.ACCURATE_MODE)
            .build(); 

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

@Override 
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    if ((mBitmap != null) && (mFaces != null)) {
        double scale = drawBitmap(canvas);
        drawFaceLandmarks(canvas, scale);
    } 
} 

private double drawBitmap(Canvas canvas) {
    double viewWidth = canvas.getWidth();
    double viewHeight = canvas.getHeight();
    double imageWidth = mBitmap.getWidth();
    double imageHeight = mBitmap.getHeight();
    double scale = Math.min(viewWidth / imageWidth, viewHeight / imageHeight);

    Rect destBounds = new Rect(0, 0, (int)(imageWidth * scale), (int)(imageHeight * scale));
    canvas.drawBitmap(mBitmap, null, destBounds, null);
    return scale;
} 

private void drawFaceBox(Canvas canvas, double scale) {
    //This should be defined as a member variable rather than 
    //being created on each onDraw request, but left here for 
    //emphasis. 
    Paint paint = new Paint();
    Paint.setColor(Color.GREEN);
    Paint.setStyle(Paint.Style.STROKE);
    Paint.setStrokeWidth(5);

    float left = 0;
    float top = 0;
    float right = 0;
    float bottom = 0;

    for( int i = 0; i < mFaces.size(); i++ ) {
        Face face = mFaces.valueAt(i);

        left = (float) ( face.getPosition().x * scale );
        top = (float) ( face.getPosition().y * scale );
        right = (float) scale * ( face.getPosition().x + face.getWidth() );
        bottom = (float) scale * ( face.getPosition().y + face.getHeight() );

        canvas.drawRect( left, top, right, bottom, Paint );
    } 
} 

private void drawFaceLandmarks( Canvas canvas, double scale ) {
    Paint paint = new Paint();
    Paint.setColor( Color.GREEN );
    Paint.setStyle( Paint.Style.STROKE );
    Paint.setStrokeWidth( 5 );

    for( int i = 0; i < mFaces.size(); i++ ) {
        Face face = mFaces.valueAt(i);

        for ( Landmark landmark : face.getLandmarks() ) {
            int cx = (int) ( landmark.getPosition().x * scale );
            int cy = (int) ( landmark.getPosition().y * scale );
            canvas.drawCircle( cx, cy, 10, Paint );
        } 

    } 
} 

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( "Tuts+ Face Detection", "Smiling: " + smilingProbability );
        Log.e( "Tuts+ Face Detection", "Left eye open: " + leftEyeOpenProbability );
        Log.e( "Tuts+ Face Detection", "Right eye open: " + rightEyeOpenProbability );
        Log.e( "Tuts+ Face Detection", "Euler Y: " + eulerY );
        Log.e( "Tuts+ Face Detection", "Euler Z: " + eulerZ );
    } 
} } 

Référence 

https://github.com/tutsplus/Android-PlayServices-FaceDetection/tree/master/app/src/main

0
Gibs