人脸检测并使用边界框提取人脸并创建新的位图

问题描述 投票:0回答:1

我如何使用Rect rect = face.getBoundingBox()数据从位图中裁剪出检测到的面部并将其另存为新位图。香港专业教育学院试图使用rect.left等构造位图,并只是在imageview中显示提取的脸..但它似乎不起作用。

此外,是否可以直接访问这些面孔?如果我正确理解检测器创建的FirebaseVisionFace列表,这些列表是什么?它如何列出一张脸?是否可以访问它们?

private void processFaceDetection(final Bitmap bitmap) {
        FirebaseVisionImage firebaseVisionImage = FirebaseVisionImage.fromBitmap(bitmap);  //firebaseVisionImage is an object created from bitmap firebase uses to detect faces

        FirebaseVisionFaceDetectorOptions firebaseVisionFaceDetectorOptions  = new FirebaseVisionFaceDetectorOptions.Builder().build();

        FirebaseVisionFaceDetector firebaseVisionFaceDetector = FirebaseVision.getInstance().getVisionFaceDetector(firebaseVisionFaceDetectorOptions);

        firebaseVisionFaceDetector.detectInImage(firebaseVisionImage).addOnSuccessListener(new OnSuccessListener<List<FirebaseVisionFace>>() {
            @Override
            public void onSuccess(List<FirebaseVisionFace> firebaseVisionFaces) {
                int counter = 0;

                for (FirebaseVisionFace face : firebaseVisionFaces) {
                    Rect rect = face.getBoundingBox();
                    RectOverlay rectOverlay = new RectOverlay(graphicOverlay, rect);
                    graphicOverlay.add(rectOverlay);
                    Bitmap faceSaved = Bitmap.createBitmap(Math.round(Math.abs(rect.left - rect.right)), Math.round(Math.abs(rect.top - rect.bottom)), Bitmap.Config.ALPHA_8);
                    imageview.setImageBitmap(facesaved);
                    imageview.setVisibility(View.VISIBLE);
                    counter++;

                }
java bitmap firebase-mlkit rect
1个回答
0
投票

答案:要使用可通过rect.toShortString()收集的rect数据,将为left,top,right,bottom生成4个值。即[280,495] [796,1011]。这些由FirebaseVisionFaceDetector创建,并存储在每个检测到的面部的列表(列表)中。

要保存包含在不同矩形(面)中的位图数据

for (FirebaseVisionFace face : firebaseVisionFaces) {
Rect rect = face.getBoundingBox();

Bitmap original = Bitmap.createScaledBitmap(capturedImage, cameraView.getWidth(), cameraView.getHeight(), false); //scaled bitmap created from captured image

Bitmap faceCrop = Bitmap.createBitmap(original, rect.left, rect.top, rect.width(), rect.height()); //face cropped using rect values

faceCrop包含矩形参数内包含的仅面部位图数据。

希望这会帮助....

© www.soinside.com 2019 - 2024. All rights reserved.