Comparaison de la vision par ordinateur Android JavaCV OpenCV FastCV


Je travaille sur un projet scolaire et une partie de celui-ci devrait concerner la situation actuelle des bibliothèques de vision par ordinateur pour Android. J'y suis allé avec beaucoup d'enthousiasme car la vision par ordinateur semble être un sujet fascinant mais j'ai cherché pendant plus d'une semaine et je n'ai pas trouvé grand-chose. J'aimerais pouvoir fournir des informations sur les bibliothèques elles-mêmes et sur la comparaison entre elles.

Je vais partager ce que j'ai trouvé jusqu'à présent.

OpenCV

  • Semble être le plus avancé et le plus populaire.

  • De Fournir le plus grand nombre de fonctions

  • Il avait un problème de compatibilité descendante

  • Est rapide(au moins j'ai entendu, mais je n'ai aucune information à ce sujet)

  • a la plus grande quantité de livres à ce sujet (au moins pour la version C++)

JavaCV

  • est wrapper pour quelques autres bibliothèques, y compris opencv

VSC rapide

  • nouveau avec Qualcomm derrière elle.

Wikitude

  • c'est plus pour augmentedreality mais dans son noyau est toujours l'ordinateur vision.

Comme vous pouvez le voir, j'ai un peu d'informations à ce sujet et faire mes propres tests pour chaque bibliothèque est bien au-delà de mes compétences actuelles en vision par ordinateur.

Cordialement, Pierre.

Author: Milind Deore, 2012-05-20

6 answers

Fondamentalement, il y a deux options: OpenCV et FastCV

OpenCV est une bibliothèque plus mature avec beaucoup plus de fonctionnalités que FastCV. Pour de nombreuses tâches de vision par ordinateur, vous ne pouvez trouver que les fonctionnalités les plus élémentaires dans FastCV, alors que vous pouvez avoir presque toutes les alternatives populaires disponibles dans OpenCV. Vérifiez les détecteurs de fonctions disponibles par exemple. OpenCV a Harris, SURF, TAMISER, RAPIDE, etc. FastCV, d'autre part, n'a que Harris et FAST. OpenCV contient des optimisations matérielles pour différents HW y compris les ordinateurs de bureau et les appareils informatiques mobiles. La possibilité d'utiliser OpenCV dans desktop vous offre une option de développement plus flexible, car vous pouvez modifier et tester le code sur un ordinateur de bureau rapide avant de commencer à travailler le développement mobile. OpenCV est également considéré comme faisant partie de une proposition du groupe Khronos Computer Vision . Donc, si cela est approuvé, OpenCV peut devenir l'API standard pour la vision par ordinateur. Pour autant que je puisse voir, FastCV fournit des optimisations supérieures pour les PROCESSEURS Snapdragon. Cela pourrait jouer un rôle important dans la décision à court terme, mais je suis sûr qu'OpenCV comblera l'écart très rapidement, le cas échéant.

Si vous choisissez le chemin OpenCV, il y a deux sous-chemins: OpenCV avec Android NDK vs. JavaCV avec Android SDK. JavaCV est un wrapper autour d'OpenCV basé sur JavaCpp. JavaCV enveloppe principalement l'API C, bien qu'OpenCV fournisse également une API C++ orientée objet. L'API C++ gère la libération automatique de la mémoire inutilisée, par exemple. Cependant, L'API C (donc JavaCV) vous oblige à gérer manuellement la libération des images inutilisées. De plus, lorsque vous rencontrez un problème dans JavaCV, il est difficile de résoudre le problème, car il y a trop d'indirections à vérifier. Les problèmes sont plus faciles à localiser lorsque vous utilisez OpenCV directement. Cependant, dans le cas d'Android, la difficulté supplémentaire de NDK ne doit pas être oubliée.

Si la fonctionnalité OpenCV disponible est nécessaire pour l'application spécifique et qu'aucun code de traitement personnalisé au niveau des pixels n'est nécessaire, JavaCV est la voie à suivre. Cependant, si une quantité considérable de code de traitement d'image personnalisé est requise, le code Java vous ralentira et vous devrez de toute façon passer à NDK. Dans ce dernier cas, OpenCV est l'alternative à choisir.

 24
Author: Hakan Serce, 2012-05-30 21:06:13

J'utiliserais OpenCV car c'est la meilleure bibliothèque de vision par ordinateur en ce moment. Vous programmerez vos fonctions en C++, puis vous compilerez l'application Android à l'aide de la bibliothèque JNI. Vous avez des informations sur la façon de le faire sur la documentation officielle.

J'ai travaillé avec cette configuration et les performances d'OpenCV dans Android sont vraiment agréables. Vous remarquerez des avantages si vous faites certaines fonctions en arithmétique à point fixe. Bonne chance

 7
Author: Jav_Rock, 2012-05-27 21:53:07

Pour un projet basé sur Android, il est facile de commencer avec JavaCV. Il contient presque toutes les fonctions disponibles sur OpenCV.

Mais il n'y a pas de documentation riche sur JavaCV, mais OpenCV a. Vous pouvez donc trouver les méthodes pertinentes dans la documentation OpenCV et les utiliser dans JavaCV(mêmes noms de méthode).

Il est un document complet à ici. C'est discuter de la façon de configurer JavaCV sur eclipse - environnement Android.

 5
Author: Keshan De Silva, 2012-05-25 08:09:55

Vizir a répondu très bien mais j'ai l'impression que son analyse a une erreur. Je pense qu'il ne sait pas qu'Opencv a une version pour Android appelée OpenCV4Android. Ce sont des wrappers Java pour la fonctionnalité c++, ce qui signifie que vous pouvez éviter d'utiliser Android NDK et tout programmer en Java. Cela rendrait la bibliothèque "non officielle" JavaCV redondante, sauf que celle-ci, en plus d'encapsuler opencv, encapsule également beaucoup d'autres bibliothèques de CV agréables.

Modifier:

Ceci ne change pas les conclusions de vizir sur la recommandation d'OpenCV, il ajoute en fait plus de points pour le choisir.

 3
Author: Rui Marques, 2012-05-30 09:25:14

Il y a une nouvelle option pour CV sur Android, le Google Mobile Vision API. L'API est exposée via com.google.android.gms.vision et vous permet de détecter différents types d'objets (visages, codes-barres et traits du visage) en fonction d'un bitmap d'image arbitraire.

 1
Author: class, 2015-08-13 20:34:09

Commencez par OpenCV, puis portez des fonctions importantes telles que le suivi des fonctionnalités, les circonvolutions, dilate/erode et peut-être SVM. Dans le cas de la compilation pour Android, enveloppez ces appels avec #ifdef __ANDROID__, appelez simplement l'équivalent FastCV. L'abstraction est votre amie.

 0
Author: Joel Teply, 2016-08-11 03:39:27