2017-10-12 17 views
0

Je travaille sur une solution AR dans laquelle je rends des modèles 3D en utilisant Scenekit-ARKit. J'ai également intégré CoreML pour identifier les objets et rendre les objets 3D correspondants dans la scène.Est-il possible d'obtenir la position SCNVector3 d'un objet du monde réel en utilisant Core ML et ARKit et de créer un SCNPlane au-dessus de l'objet?

Mais maintenant je le rends juste au centre de l'écran dès que je détecte l'objet (Seulement pour la liste des objets que j'ai). Est-il possible d'obtenir la position de l'objet du monde réel afin que je puisse montrer une superposition au-dessus de l'objet?

C'est si j'ai une bouteille d'eau scannée, je devrais pouvoir obtenir la position de la bouteille d'eau. Il pourrait être n'importe où dans la bouteille d'eau, mais ne devrait pas sortir de celui-ci. Est-ce possible en utilisant Scenekit?

Répondre

4

Toutes les parties de ce que vous demandez sont théoriquement possibles , mais a) pour plusieurs parties, il n'y a pas d'API intégrée pour faire des choses pour vous, et b) vous êtes-vous signer probablement un more difficult problem than you think. Ce que vous avez probablement avec votre intégration Core ML est un classificateur d'image, car c'est ce que font la plupart des modèles ML faciles à trouver. classification d'images répond à une question: « quel est ce une image? »

Qu'est-ce que vous cherchez implique au moins deux questions supplémentaires:

  1. « Étant donné que cette image a été classé comme contenant (un objet spécifique), où dans l'image en 2D est cet objet? »
  2. « Compte tenu de la position d'un objet détecté dans l'image vidéo 2D, où est dans l'espace 3D suivis par Arkit? »

La question 1 est assez raisonnable. Il existe des modèles qui effectuent à la fois la classification et la détection (emplacement/limites dans une image) dans la communauté ML. Probablement le plus connu est YOLO - here’s a blog post about using it with Core ML.

La question 2 est la partie «équipe de recherche et cinq ans». Vous remarquerez dans les papiers YOLO qu'il ne vous donne que des boîtes de délimitation grossières pour les objets détectés - c'est-à-dire qu'il fonctionne dans l'espace d'image 2D, et non dans la reconstruction de scène 3D.

Pour vraiment connaître la forme, ou même la délimitation 3D d'un objet, il faut intégrer la détection d'objet à la reconstruction de la scène. Par exemple, si un objet a une certaine hauteur dans l'image 2D, regardez-vous un objet 3D qui est grand avec une petite empreinte, ou un objet qui est long et bas, reculant dans la distance? Une telle intégration nécessiterait de démonter le fonctionnement interne d'ARKit, ce que personne d'autre qu'Apple ne peut faire, ou de recréer un ARKit à partir de zéro.

Il se peut cependant que vous ayez quelques hypothèses à formuler pour obtenir des estimations très approximatives de la forme 3D à partir d'un cadre de délimitation 2D. Par exemple, si vous effectuez des tests d'impact AR sur les coins inférieurs d'une boîte et constatez qu'ils se trouvent sur un plan horizontal, vous pouvez deviner que la hauteur 2D de la boîte est proportionnelle à la hauteur 3D de l'objet, et que l'empreinte sur l'avion est proportionnelle à la largeur de la boîte. Vous devrez faire des recherches et des tests pour voir si des suppositions comme celles-là sont valables, en particulier dans les cas d'utilisation couverts par votre application.