Multiple Image tracking with ARCore in Android Studio

197 Views Asked by At

This is mainActivity.java:


    public class MainActivity extends AppCompatActivity implements Scene.OnUpdateListener {
        private CustomArFragment arFragment;
        public DataBaseHelper mydb;
        public TextView mytext ;
        private Button button;
    AnchorNode anchorNode;
    Anchor anchor;
    
     protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
          
            setContentView(R.layout.activity_main);
      arFragment=(CustomArFragment)(Object)getSupportFragmentManager().findFragmentById(R.id.scene_frag);
            assert arFragment != null;
            arFragment.getArSceneView ().getScene ().addOnUpdateListener (this);
    }

Here I am adding images to Db


    public void setupdataBase(Config config, Session session){
            Bitmap mark1= BitmapFactory.decodeResource(getResources(),R.drawable.marks1);
            AugmentedImageDatabase aid=new AugmentedImageDatabase(session);
            Bitmap mark2= BitmapFactory.decodeResource(getResources(),R.drawable.marks2);
            Bitmap mark3= BitmapFactory.decodeResource(getResources(),R.drawable.marks3);
            Bitmap mark4= BitmapFactory.decodeResource(getResources(),R.drawable.marks4);
            Bitmap mark5= BitmapFactory.decodeResource(getResources(),R.drawable.markss5);
    //add marker
            aid.addImage("mark1",mark1);
            aid.addImage("mark2",mark2);
            aid.addImage("mark3",mark3);
            aid.addImage("mark4",mark4);
            aid.addImage("mark5",mark5);
    
            config.setAugmentedImageDatabase(aid);
    
    
        }

Main Code (on update)


    @Override
        public void onUpdate(FrameTime frameTime) {
            Frame frame=arFragment.getArSceneView ().getArFrame ();
            assert frame != null;
            Collection<AugmentedImage> images=frame.getUpdatedTrackables (AugmentedImage.class);
      for (AugmentedImage image:images) {
     String marker=image.getName ();
                    String[] tempname={"mark1","mark2","mark3","mark4","mark5"};
    
                    for (String s : tempname) {
                        if (s.equals (marker)) {
                          
                            createModel (image, marker);
    
                        }
                    }
                }
         @SuppressLint("SetTextI18n")
        private void createModel(AugmentedImage image, String marker) {
            ViewRenderable
                    .builder ()
                    .setView (this,R.layout.text_main)
                    .build ()
                    .thenAccept (viewRenderable -> setupModel(viewRenderable,image,marker));
    }

Renderable code


    @SuppressLint("SetTextI18n")
        private void setupModel(ViewRenderable viewRenderable, AugmentedImage image, String marker) {
    
            mytext=(TextView)viewRenderable.getView ().findViewById (R.id.planetInfoCard);
    
         anchor=image.createAnchor (image.getCenterPose ());
    
            anchorNode=new AnchorNode (anchor);
           
            anchorNode.setRenderable (viewRenderable);
            anchorNode.setParent (arFragment.getArSceneView ().getScene ());
            arFragment.getArSceneView ().getScene ().addChild (anchorNode);
    }

This Code is working fine but when I am moving the camera out of the marker/image "anchor is not getting removed", if I am scanning more than 2 markers app getting slow-down and crashes.

I have tried detaching anchors and removing children in the LastKnown_POSE state. But I am not able to do it perfectly. How can I solve it so anchors will be removed when the image gets out of camera focus?

0

There are 0 best solutions below