ARNO*

Geek dilettante habitant une belle et grande propriété sur la Côte d’améthyste

    • Pour la détection d’objets 3D, il faut créer un scan de cet objet. De ce que je comprends, cela pour se faire directement avec un app qui s’occupe de créer ce scan avec l’appareil iOS, et l’installer comme « asset » dans sa app. J’ignore si ça sera faisable avec n’importe quel appareil compatible ARKit, ou s’il faudra un iPhone X avec ses deux lentilles.

    • En train de downloader les beta, je vais tenter le coup. Ça ne dit pas qu’il faut un iPhone X pour faire les scans, mais ça suggère tout de même que :

      High-quality object scanning requires peak device performance. Reference objects scanned with a recent, high-performance iOS device work well for detection on all ARKit-supported devices.

    • @kent1 : c’est l’idée assez banale de reconnaître des œuvres dans un musée (comme tu sais, c’est notre spécialité) pour afficher la fiche de chaque œuvre. L’originalité du produit que j’essaie de monter (et qui fonctionne déjà drôlement bien pour les tableaux), c’est que je gère tout ça avec un site sous SPIP.

    • Purée, ça marche !

      – La app de scan d’objet est facile à utiliser, mais sur mon iPhone 6s, c’est un poil poussif, mais ça fonctionne et ça m’exporte bien un objet avec une terminaison .arobject. Et une fois qu’on a fini de scanner, avec la même app on peut tester la détection de ce même objet.

      – Ensuite j’importe cet objet dans mon application dans Xcode (version 10 beta évidemment), et en gros dans la app c’est quasiment le même code que pour la détection des images, donc c’est très simple.

      – Et bon ben c’est OK, ma app détecte correctement la « statue » et me sort sa fiche, comme elle le fait avec un tableau. Trop cool.

      Il va falloir que je teste avec des statues du vrai musée, de différentes tailles et avec les éclairages qui changent… Ce que je crains : (a) certaines sont sous verre, je me demande si le scan va fonctionner, (b) il y a différentes tailles, il va donc falloir tester, (c) les statues classiques sont monochromes, alors que ma petite sculpture de test à la maison est en couleurs.

    • C’est assez curieux en fait : c’est bien un fichier que je récupère depuis l’iPhone, et j’arrive à l’installer dans SPIP en tant que document joint. Mais si je fais glisser-déposer ce fichier dans Xcode, il est transformé en dossier du même nom (reprenant donc la terminaison .arobject), qui contient cette fois un fichier trackingData.cv3dmap, une image preview.jpg et le usuel Contents.json des assets Xcode.

      Si j’essaie de mettre directement le fichier .arobject dans mon dossier de ressources .arresourcegroup, hé ben ce n’est pas détecté par Xcode.

      J’aimerais bien réussir à faire l’extraction du fichier vers le dossier, comme je le fais avec les images (transformées en dossiers .arreferenceimage), depuis PHP/SPIP, parce que l’aspect super-intégré du truc me plaît bien.

    • Bon, classique : le fichier . arobject est en fait un fichier ZIP. En remplaçant la terminaison par .zip, ça se dézippe sans difficulté et on se retrouve avec un dossier dont le nom se termine par .arobject, comme dans Xcode.

    • Par contre, la différence entre le dossier dézippé par mes soins et le dossier fabriqué par Xcode quand on importe le fichier compacté, c’est qu’il y ajoute un fichier Contents.json, dont le contenu est du genre :

      {
       "info" : {
         "version" : 1,
         "author" : "xcode"
       },
       "properties" : {
         "preview" : "preview.jpg",
         "rotation" : [
           0,
           1,
           0,
           -0.5993993878364563
         ],
         "content" : "trackingData.cv3dmap",
         "scale" : [
           0.99999988079071045,
           1,
           0.99999988079071045
         ],
         "translation" : [
           0.026983261108398438,
           0.18246164917945862,
           0.0040581226348876953
         ],
         "version" : 1
       }
      }

      Et pour l’instant, je n’ai aucune idée d’où je peux aller extraire ces informations (je suppose que c’est planqué dans le fichier .cv3dmap, mais je sais pas encore faire).

    • Bon, un autre souci apparaît : quand j’active la détection des objets en même temps que la détection des images, la détection des images devient extrêmement lente et approximative.

      Par exemple, j’essaie de détecter successivement 16 tableaux : je montre un tableau, j’attends que ça détecte et je passe au suivant. Sur iPhone 6s.

      – Avec uniquement le détection des tableaux activée : les 16 tableaux sont identifiés, et ça a pris environ 80 secondes. D’après XCode, CPU stable autour de 100% (déjà, en temps normal, ça, ça bouffe…)

      – Si j’active en plus la détection des objets (statues, donc), ça me prend plus de 4 minutes, et j’ai 2 tableaux que je n’ai pas réussi à identifier (ce qui fait que la durée « par tableau » est totalement approximative, puisque j’ai perdu une bonne minute devant chaque tableau problématique avant de laisser tomber et de passer au suivant). CPU autour de 160%…

      J’espère que ça va être corrigé avant la sortie définitive, parce que sinon c’est inutilisable dans un musée si on ne peut pas identifier à la fois des tableaux et des statues…

    • Je viens de bien me faire chier avec les .arobject.

      – Si je veux initialiser la reconnaissance des objets à partir des du « bundle », avec la fonction referenceObjects(inGroupNamed…), alors les fichiers .arobject sont bien ceux transformés par Xcode (des dossiers avec cette terminaison.

      – Mais si je veux charger les objets de référence un par un, avec la commande ARReferenceObject.init(archiveURL), alors tiens-toi bien, c’est bien l’objet zippé directement issu du logiciel de scan 3D qu’il faut appeler.

      Je ne suis pas très pro en matière d’AR et de 3D, mais ça m’a l’air totalement con cette histoire.

      (Après, ça m’arrange de ne gérer que des .arobject qui sont des zip, comme ça je peux m’interface beaucoup plus facilement avec SPIP, un document unique pour chaque objet, sans devoir convertir les fichiers dans Xcode.)