【问题标题】:Face Detection and extracting the faces using Bounding Box and creating a new Bitmap人脸检测和使用边界框提取人脸并创建新位图
【发布时间】:2020-09-20 03:40:42
【问题描述】:

如何使用 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】:

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

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

    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 包含包含在矩形参数中的仅面部位图数据。

    希望这会有所帮助....

    【讨论】:

      猜你喜欢
      • 2012-04-17
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 2016-02-25
      • 2019-06-18
      • 2021-08-27
      • 1970-01-01
      • 2013-07-16
      相关资源
      最近更新 更多