Augmented Faces API (ARCore) - Как заменить маску лица другой маской с помощью кнопки в Android Studio - PullRequest
0 голосов
/ 09 мая 2019

Я занимаюсь разработкой приложения для Android с использованием ARCore-Augmented Faces API в Android Studio.На данный момент я закончил настройку приложения (5 кнопок и соответствующая 3d-модель), и он работает хорошо, когда я нажимаю одну из этих кнопок, когда приложение запускается впервые.Проблема в том, что когда я нажимаю другую кнопку, чтобы изменить текущую маску, она не заменит текущую маску новой маской.

Однако, чтобы решить эту проблему.Я попытался использовать метод restart () и попытался удалить facenode.Но, похоже, эти решения вообще не работают.

Это часть моего кода, над которым я сейчас работаю (а не над исправлением), где я все еще застрял с проблемой, с которой сталкиваюсь.


        alchemist_ovalbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alchemistOval();
            }
        });

        scene.addOnUpdateListener(
                (FrameTime frameTime) -> {
                    if (faceRegionsRenderable == null) {
                        return;
                    }

                    Collection<AugmentedFace> faceList =
                            sceneView.getSession().getAllTrackables(AugmentedFace.class);

                    // Make new AugmentedFaceNodes for any new faces.
                    for (AugmentedFace face : faceList) {
                        if (!faceNodeMap.containsKey(face)) {
                            AugmentedFaceNode faceNode = new AugmentedFaceNode(face);
                            faceNode.setParent(scene);
                            faceNode.setFaceRegionsRenderable(faceRegionsRenderable);
                            faceNode.setFaceMeshTexture(faceMeshTexture);
                            faceNodeMap.put(face, faceNode);
                        }
                    }

                });

// Remove any AugmentedFaceNodes associated with an AugmentedFace that stopped tracking.

        Iterator<Map.Entry<AugmentedFace, AugmentedFaceNode>> iter =
                faceNodeMap.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry<AugmentedFace, AugmentedFaceNode> entry = iter.next();
            AugmentedFace face = entry.getKey();
            if (face.getTrackingState() == TrackingState.STOPPED) {
                AugmentedFaceNode faceNode = entry.getValue();
                faceNode.setParent(null);
                iter.remove();
            }
        }

public void alchemistOval() {

        ModelRenderable.builder()
                .setSource(this, R.raw.alchemist_oval)
                .build()
                .thenAccept(
                        modelRenderable -> {
                            faceRegionsRenderable = modelRenderable;
                            modelRenderable.setShadowCaster(false);
                            modelRenderable.setShadowReceiver(false);
                        });

    }

Итак, я ожидаю, что текущая маска будет заменена новой, когда пользователь нажмет другую кнопку.

...