3d object recognition for AR android app

2020-08-01 07:55发布

问题:

I'm trying to develop an AR android application.
it should detect and recognize the object captured by the camera, I'm using OpenCV for this purpose, but I'm not very familiar with object recognition for mobile devices in the AR field.

I have two questions:

1- which algorithm is better (in the meaning of precision and speed) SIFT, SURF, FAST, ORB, or something else?

2- I wonder if the process of detecting and tracking would be something like this :
taking a camera frame, detect its key points, compute its descriptors then match it with each image(Mat of descriptors) available in the database to find which one it belongs to.
I feel that the mentioned steps will be computationally heavy and especially if they're repeated for each frame to keep tracking the object.

please provide me with some details about the algorithm and the steps that best fit my goal.
Thanks in advance

回答1:

I know it is an old question but I feel it will be able to help others.

There is this good tutorial which is using Android, OpenCV and OpenGL ES 3.0 to build a small AR app with Android studio using the NDK. It has good explainations and a Github repo to check the code.

http://www.anandmuralidhar.com/blog/android/simple-ar/

It uses ORB features to detect/match marker to spawn 3D object on the scene. About your second point, the tutorial can give you an idea of how the process can work.



回答2:

FAST is only a detector where as SIFT, SURF, ORB and BRISK are detectors and descriptors.

Your question is a very generalized one.

  • SIFT descriptor is a classic approach, also the “original” inspiration for most of the descriptors proposed later. The drawback is that it is mathematically complicated and computationally heavy.
  • SURF detector is recognized as a more efficient substitution for SIFT. It has a Hessian-based detector and a distribution based descriptor generator.
  • SIFT and SURF are based on the histograms of gradients. That is, the gradients of each pixel in the patch need to be computed. These computations cost time. Even though SURF speeds up the computation using integral images, this still isn’t fast enough for some applications

SIFT and SURF are most accurate but they are patent protected and they can't be used without purchase.

  • FAST is a standalone feature detector and it is not a descriptor generator. It is designed to be very efficient and suitable for real-time applications of any complexity.
  • BRIEF descriptor is a light-weight, easy-to-implement descriptor based on binary strings. BRIEF descriptor is targeted to low-power devices, and compensates some of its robustness and accuracy to the efficiency.

Binary descriptors are an attractive solution to many modern applications, especially for mobile platforms where both compute and memory resources are limited.

In my view, I would like to prefer ORB as it is a binary based descriptor. It takes low computational and less Memory requirements when compared to BRISK.

You have to do a research work on all these available descriptors before finalizing it.