web-dev-qa-db-fra.com

Est-il possible de suivre des objets dans ARKit comme dans Vuforia?

Je n'ai pu trouver aucune information si l'ARKit d'Apple prend en charge le suivi d'objets 3D (ou même le suivi d'images) comme le fait Vuforia. Je ne veux pas placer un modèle 3D n'importe où dans le monde. Au lieu de cela, je veux détecter un objet 3D spécifique et placer des objets AR devant et au-dessus de cet objet.

Exemple simple: je veux suivre une voiture jouet spécifique dans le monde réel et ajouter un spoiler par-dessus dans la scène AR.

Quelqu'un peut-il me fournir des informations sur ce qui est possible ou non?

15
Superwayne

Mise à jour pour iOS 12: Dans "ARKit 2" (alias ARKit sur iOS 12 ou version ultérieure) ...

  • La détection d'image est étendue au suivi d'image, donc jusqu'à quatre images ne sont pas détectées une seule fois, elles sont mises à jour "en direct" à chaque image même si elles se déplacent par rapport à l'espace mondial. Vous pouvez donc attacher une image 2D reconnaissable à votre jouet et faire en sorte que le contenu AR virtuel suive le jouet à l'écran.

  • Il y a aussi la détection d'objets - dans votre processus de développement, vous pouvez utiliser une application ARKit pour numériser un objet 3D réel et produire un fichier "objet de référence". Vous pouvez ensuite expédier ce fichier dans votre application et l'utiliser pour reconnaître cet objet dans l'environnement de l'utilisateur. Cela pourrait convenir à votre cas de "voiture jouet" ... mais sachez que la fonction de reconnaissance d'objet 3D est la détection, pas le suivi: ARKit ne suivra pas la voiture jouet pendant qu'elle se déplace.

Voir la conférence WWDC18 sur ARKit 2 pour plus de détails.


Mise à jour pour iOS 11.3: Dans "ARKit 1.5" (alias ARKit sur iOS 11.3 ou version ultérieure), il y a une nouvelle fonctionnalité de détection d'image dans ARKit. Si vous avez une image connue (comme une affiche ou une carte à jouer ou quelque chose comme ça), vous pouvez l'inclure dans votre projet Xcode et/ou la charger ailleurs en tant que ARReferenceImage et mettre dans le tableau detectionImages de la configuration de votre session. Ensuite, lorsque ARKit trouve ces images dans l'environnement utilisateur, il vous donne ARImageAnchor des objets vous indiquant où elles se trouvent.

Notez que ce n'est pas tout à fait le "RA basé sur les marqueurs" que vous voyez dans d'autres boîtes à outils - ARKit ne trouve une image de référence qu'une seule fois, il ne vous indique pas comment il se déplace dans le temps. C'est donc bon pour "déclencher" des expériences de contenu AR (comme ces promotions où vous pointez votre téléphone sur une affiche Star Wars dans un magasin et où un personnage en sort), mais pas, disons, pour les jeux de société AR où les personnages virtuels restent attachés aux pièces de jeu.


Autrement...

Il est possible d'accéder à l'image de la caméra dans chaque ARFrame capturé, donc si vous avez d'autres logiciels qui peuvent vous aider dans ces tâches, vous pouvez les utiliser en conjonction avec ARKit. Par exemple, le Vision framework (également nouveau dans iOS 11) propose plusieurs des blocs de construction pour de telles tâches - vous pouvez détecter les codes-barres et trouver leurs quatre coins, et après avoir identifié manuellement une région d'intérêt dans un l'image, suivre son mouvement entre les images.

28
rickster

Remarque: il s'agit certainement d'un hack, mais cela ajoute un suivi d'image persistant à ARKit Unity. La même idée peut également être appliquée à la bibliothèque native.

Téléchargez ARKit 1.5 beta https://bitbucket.org/Unity-Technologies/unity-arkit-plugin/branch/spring2018_update

Dans ARSessionNative.mm, ajoutez ce bloc de code:

extern "C" void SessionRemoveAllAnchors(void* nativeSession) {
    UnityARSession* session = (__bridge UnityARSession*)nativeSession;
    for (ARAnchor* a in session->_session.currentFrame.anchors)
    {
        [session->_session removeAnchor:a];
        return;
    }
}

Dans UnityARSessionNativeInterface.cs, ajoutez ce code sous SessionRemoveUserAnchor:

private static extern void SessionRemoveAllAnchors (IntPtr nativeSession);

Et cela sous RemoveUserAnchor:

public void RemoveAllAnchors() {
        #if !UNITY_EDITOR

        SessionRemoveAllAnchors(m_NativeARSession);
        #endif
    }

Appelez ensuite cela depuis une mise à jour ou une Coroutine:

UnityARSessionNativeInterface.GetARSessionNativeInterface().RemoveAllAnchors ();

Lorsque l'ancre est retirée, l'image peut à nouveau être reconnue. Ce n'est pas super lisse mais ça marche vraiment.

J'espère que vous avez trouvé cela utile! Faites moi savoir si vous avez besoin d'une aide supplémentaire.

3
Aidan Wolf

ARKit 2.0 pour iOS 12 prend en charge non seulement Camera Tracking mais aussi:

  • Suivi d'objets 3D
  • Suivi du visage
  • Suivi d'image
  • Détection d'image
  • Numérisation d'objets 3D

ARKit 3.0 pour iOS 13 prend en charge des fonctionnalités encore plus sophistiquées:

  • Occlusion de personnes (Compositing RGBAZ en temps réel)
  • Suivi du corps (alias Motion Capture)
  • Suivi de plusieurs visages (jusqu'à 3 visages)
  • Suivi simultané des caméras avant et arrière
  • Séances de collaboration
3
ARGeo