распознавание изображений путем сравнения изображений в базе данных - PullRequest
0 голосов
/ 13 февраля 2020

Я разрабатываю приложение, в котором пользователь может сделать свои изображения конфиденциальными. поэтому при регистрации они дают свое изображение, и мы сохраняем его в нашей базе данных, если какой-то другой человек загрузит групповую фотографию, содержащую изображение этого человека, тогда его лицо будет размыто. я выполнил многократное обнаружение лиц на групповой фотографии с помощью google vision, как здесь

        if (detector.isOperational() && bitmap != null) {
        editedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap
                .getHeight(), bitmap.getConfig());
        float scale = getResources().getDisplayMetrics().density;
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Color.GREEN);
        paint.setTextSize((int) (16 * scale));
        paint.setShadowLayer(1f, 0f, 1f, Color.WHITE);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(6f);
        Canvas canvas = new Canvas(editedBitmap);
        canvas.drawBitmap(bitmap, 0, 0, paint);
        Frame frame = new Frame.Builder().setBitmap(editedBitmap).build();
        SparseArray<Face> faces = detector.detect(frame);
        txtSampleDesc.setText(null);

        for (int index = 0; index < faces.size(); ++index) {
            Face face = faces.valueAt(index);
            canvas.drawRect(
                    face.getPosition().x,
                    face.getPosition().y,
                    face.getPosition().x + face.getWidth(),
                    face.getPosition().y + face.getHeight(), paint);


            canvas.drawText("Face " + (index + 1), face.getPosition().x + face.getWidth(), face.getPosition().y + face.getHeight(), paint);

            txtSampleDesc.setText(txtSampleDesc.getText() + "FACE " + (index + 1) + "\n");
            txtSampleDesc.setText(txtSampleDesc.getText() + "Smile probability:" + " " + face.getIsSmilingProbability() + "\n");
            txtSampleDesc.setText(txtSampleDesc.getText() + "Left Eye Is Open Probability: " + " " + face.getIsLeftEyeOpenProbability() + "\n");
            txtSampleDesc.setText(txtSampleDesc.getText() + "Right Eye Is Open Probability: " + " " + face.getIsRightEyeOpenProbability() + "\n\n");

            for (Landmark landmark : face.getLandmarks()) {
                int cx = (int) (landmark.getPosition().x);
                int cy = (int) (landmark.getPosition().y);
                canvas.drawCircle(cx, cy, 8, paint);
            }


        }

        if (faces.size() == 0) {
            txtSampleDesc.setText("Scan Failed: Found nothing to scan");
        } else {
            pic.setImageBitmap(editedBitmap);
            txtSampleDesc.setText(txtSampleDesc.getText() + "No of Faces Detected: " + " " + String.valueOf(faces.size()));
        }
    } else {
        txtSampleDesc.setText("Could not set up the detector!");
    }
}

Теперь мне нужно сравнить лица с лицом в моей БД и размыть лица, которые выбрали конфиденциальность фотографий. Есть ли способ сделать это в одиночку android без библиотеки opencv.

...