- L’iPhone 15 Pro enregistre par défaut des images au format HEIC contenant une depth map
- Les fichiers HEIC stockent plusieurs images et une grande quantité de métadonnées ; en choisissant le format JPEG, la depth map, le HDR, etc. ne sont pas inclus
- Le projet open source HEIC Shenanigans permet d’extraire les images et les métadonnées d’un fichier HEIC et de les convertir au format EXR
- Le processus de conversion exploite divers standards et outils utilisés dans l’industrie du cinéma et de la télévision, comme OpenEXR, OpenImageIO et OpenColorIO
- Au final, les informations HDR, SDR, Gain Map et Depth Map des photos de l’iPhone 15 Pro peuvent être séparées et exploitées au format EXR
Contexte de la prise en charge de la depth map sur l’iPhone 15 Pro
- Depuis 2017, Apple intègre aux images de l’appareil photo de ses iPhone des informations de depth map à l’aide de scanners LiDAR, de 3D Time-of-Flight et de Structured-Light scanning
- Ces depth maps, métadonnées et multiples versions d’images sont stockées dans le format HEIF (HEIC)
- HEIC est un format de stockage d’images efficace, adopté comme format d’image par défaut sur l’iPhone depuis 2017
- En utilisant le format JPEG, il n’est pas possible de bénéficier de fonctions avancées comme la depth map ou le HDR
Exemple de vérification d’une depth map dans HEIC
- Finn Jaeger, responsable VFX chez la société de production Replayboys à Hambourg, en Allemagne, a partagé des captures d’écran de multiples depth maps générées par un iPhone ainsi que l’avancement du projet
- Son projet HEIC Shenanigans fournit un script Python de 374 lignes permettant d’extraire les images individuelles et les métadonnées d’un conteneur HEIC puis de les convertir en fichiers EXR
Informations sur l’environnement de développement
- La station de travail utilisée fonctionne avec un CPU Ryzen 9 9950X 16 cœurs, 96 Go de RAM DDR5, un SSD NVMe de 4 To, une carte mère ASRock X870E Nova 90, et Ubuntu 24 LTS sous WLS2 dans un environnement Windows 11 Pro
- Windows est l’environnement principal, notamment en raison de l’utilisation d’une Nvidia GTX 1080 et de certaines contraintes de compatibilité logicielle
Préparation des principaux outils et bibliothèques
- Un environnement Python 3.12.3 ainsi que d’autres bibliothèques CLI de conversion et de traitement d’image sont nécessaires
- exiftool joue un rôle important pour la prise en charge du HEIC, et les versions récentes peuvent inclure davantage de fonctionnalités et de correctifs
- jc (JSON Convert) transforme les sorties CLI en JSON afin d’améliorer leur intégration dans les pipelines
- Le dépôt HEIC Shenanigans est cloné, puis les dépendances sont installées dans un environnement virtuel Python
- Les images EXR finales peuvent être visualisées avec le viewer DJV
Démo de conversion et exemples d’images
- Un échantillon d’image HEIC pris avec un iPhone 15 Pro à Mumbai, en Inde, par Joel Joseph, spécialiste de la gamme de produits ArcGIS, est utilisé
Conversion HEIC → EXR et workflow
- L’Academy Software Foundation pilote des projets open source et des standards utilisés dans le cinéma, la télévision et la postproduction numérique
- Parmi ses projets, OpenEXR est un format d’image à grande plage dynamique (HDR) développé en 1999 sous l’impulsion d’ILM, passé en open source en 2003 et utilisé dans les effets visuels, le rendu 3D, etc.
Étapes détaillées de la conversion en EXR
- Le script heic_to_exr.py de heic_shenanigans est utilisé pour convertir une image HEIC d’entrée en fichier EXR
- Le résultat de la conversion (EXR) pèse 468 Mo et contient dans un seul fichier diverses images et informations de map
Utilisation d’un script oiiotool
- Extraction de la taille de l’image
- Conversion de l’espace colorimétrique et du gamma d’une image sRGB de Linear P3 vers ACEScg
- Utilisation d’un fichier de configuration OpenColorIO (OCIO) pour effectuer les profils couleur et les conversions d’espaces colorimétriques
- Conversion de la HDR Gain Map de Rec709 vers Linear, puis extension du canal Y vers RGB
- Extraction de la valeur de headroom de la Gain Map et application d’une mise à l’échelle par réciproque
- Génération de l’image de base HDR par multiplication avec la Gain Map
- Extraction du canal Y de la depth map, puis enregistrement au format EXR
- À l’étape finale, chaque canal créé (RGB, SDR, Gain Map, Depth Map) est ajouté comme canal distinct dans le fichier EXR
Structure des canaux dans l’EXR
- Les informations suivantes sont stockées par canal dans l’EXR
- RGB de l’image de base HDR
- Canal SDR (stocké séparément)
- Gain Map
- Depth Map
- Une couche matte peut également être ajoutée si elle existe
Usages et points de référence
- Ce processus permet de séparer et d’exploiter, dans un format professionnel (EXR), les informations composites comme la profondeur et le HDR d’images prises avec l’iPhone 15 Pro
- Cela montre le potentiel d’une exploitation efficace des images capturées sur iPhone dans divers pipelines de données, notamment en machine learning, en rendu 3D, dans le cinéma et les VFX
1 commentaires
Commentaires Hacker News
Comme d’autres l’ont mentionné, je voudrais souligner que le LIDAR de l’iPhone a une résolution trop faible pour servir de source principale aux depth maps. En pratique, l’iPhone utilise environ quatre méthodes d’extraction des données de profondeur selon le modèle et l’appareil photo utilisé. À l’origine, cela ne s’appliquait qu’aux photos en mode Portrait, mais les iPhone récents enregistrent aussi des depth maps pour les photos ordinaires.
La séparation du sujet évoquée dans l’article, ainsi que les images auxiliaires de reconnaissance des lunettes, cheveux, peau, etc. (portrait effect matte), sont des productions de machine learning.
J’ai moi aussi créé une app de filtres créatifs à partir des depth maps et des images matte du mode Portrait ; elle n’existe plus aujourd’hui, mais c’était vraiment une expérience amusante. Les idées artistiques exploitant les depth maps sont infinies.
Sur les iPhone récents, une depth map est aussi enregistrée automatiquement dans le mode photo principal lorsqu’un sujet (personne ou animal de compagnie) est détecté. J’ai moi-même développé par le passé une app de filtres créatifs basée sur les depth maps et les portrait effect mattes, donc je suis curieux de connaître le nom de cette app et de voir d’éventuelles vidéos associées.
À titre indicatif, j’ai créé un utilitaire appelé Matte Viewer, mais il sert simplement à visualiser les mattes et les depth maps (app Matte Viewer).
Je voudrais insister sur le fait que le LIDAR est un matériel optimisé non pas pour produire des depth maps en pleine résolution, mais pour l’autofocus (AF) et la mise au point rapide en basse lumière.
La troisième méthode date d’il y a 5 ans, donc je recommande de consulter cet open source plus récent sur l’estimation de profondeur basée sur le machine learning (ml-depth-pro).
Je me demande aussi si la quatrième méthode TrueDepth peut servir à la détection de liveness (distinguer une vraie personne) dans les apps de sécurité.
Article vraiment fascinant. Je trouve impressionnant que ces données de depth map servent au final à produire le flou d’arrière-plan (profondeur de champ, ce qu’on appelle le faux bokeh).
Le fait de pouvoir ajuster après la prise de vue la mise au point et la zone de profondeur, donc en pratique l’ouverture, est assez incroyable, mais je n’aime pas vraiment le bokeh artificiel. Il fait faux, au point de sembler moins bon qu’un rendu Photoshop.
Et j’ai aussi repéré plusieurs coquilles sur le format de fichier dans l’article (HEIC 14 fois, HIEC 3 fois).
Je voulais simplement signaler que j’ai corrigé les coquilles sur le format de fichier, merci de les avoir relevées.
À mon avis, si le bokeh artificiel semble maladroit, c’est parce qu’il ne reflète pas fidèlement l’optique ni les mathématiques de l’ouverture, et parce que d’un point de vue produit, il a été implémenté comme une approximation suffisante pour satisfaire 80 % des utilisateurs. On pourrait sans doute créer une meilleure app photo en appliquant les bonnes mathématiques d’ouverture, mais je me demande si les consommateurs verraient la différence et paieraient pour cela.
Les depth maps et la segmentation sémantique (semantic map) sont amusantes à regarder en elles-mêmes, et si on les importe dans des apps comme TouchDesigner, Blender ou Cinema 4D, on peut appliquer à des photos toutes sortes d’effets de profondeur.
Apple utilise aussi ces données pour le post-traitement photo (corrections, etc.).
Auparavant, elles n’étaient capturées qu’en mode Portrait, mais récemment elles sont aussi enregistrées automatiquement lors d’une prise de vue standard si un sujet (personne, animal de compagnie) est détecté.
Je développe moi aussi des apps et des outils photo, et mon Matte Viewer est spécialisé dans la consultation et l’export des depth maps et des images portrait matte (infos sur l’outil Heliographe, app Matte Viewer).
J’espère qu’un jour tous les smartphones prendront en charge nativement des images 3D basées sur le Gaussian splatting, sans capteurs coûteux. Le calcul est lourd, mais cela me paraît plus pratique si l’on peut éviter le coût et le poids supplémentaires de capteurs dédiés.
Il me manque peut-être quelque chose, mais je me demande en quoi le long passage de l’article sur les HDR gain maps est vraiment lié aux depth maps.
Je déteste l’affichage HDR de l’iPhone (et son ajustement automatique excessif de la luminosité), donc je supprime manuellement les HDR gain maps de mes photos.
L’ancien HDR consistait à fusionner trois photos à expositions différentes pour ne corriger que les zones insuffisantes, et je préférais cela au fait d’intégrer au résultat final un attribut explicite « HDR ».
À noter qu’il est possible de désactiver la fonction « Améliorer la luminosité HDR de l’écran » dans les réglages photo de l’iPhone.
J’ai eu la même impression en lisant l’article : l’introduction sur les depth maps était bonne, mais à partir du milieu, les HDR gain maps prennent le dessus et le propos semble un peu dispersé. Dans l’ensemble c’était bien, mais le fil du sujet m’a paru un peu brouillon.
Le LIDAR a en réalité une résolution bien plus faible que la depth map montrée dans l’article.
La depth map réelle est synthétisée en combinant les données du LIDAR et celles de la caméra.
Je me demande si Apple réutilise aussi cette technologie pour la fonction de « création de stickers » (appui long sur le sujet d’une photo pour l’extraire en sticker ou le copier dans une autre image).
Je me demande s’il est possible d’utiliser une depth map pour générer des stéréogrammes ou des SIRDS (single image random dot stereograms). J’ai de vieux souvenirs de création de stéréogrammes à partir d’images en niveaux de gris.
Les informations de champ de vision sont mappées à partir des données EXIF afin d’ajuster l’échelle en VR à la taille physique de la scène d’origine.
Personnellement, rien que cette fonction justifie à elle seule l’achat du Vision Pro à 4 000 $. Regarder en VR, à la bonne échelle et en 3D, des photos prises autrefois avec un vieux Nikon D7 déclenche une nostalgie extrêmement forte.
C’est dommage qu’Apple ne mette pas davantage cela en avant comme fonctionnalité clé du Vision Pro. C’est vraiment formidable.
Reality Composer sur iOS ne permet l’object capture que sur les appareils compatibles LIDAR, et il n’existe pas de solution de secours par photogrammetry sur les appareils qui n’en ont pas. Je partage cette frustration après avoir voulu faire du travail 3D.
Pour le scan 3D, c’est l’app Heges qui a eu le plus de succès pour moi. Le LIDAR est efficace pour les gros objets comme les voitures, et la caméra de profondeur Face ID est utile pour les petits objets.
J’ai essayé un scanner Creality Ferret SE (acheté environ 100 $ sur TikTok) pour de petits scans 3D, et c’était bien meilleur que ce que j’attendais.
Polycam bascule sur la photogrammetry sur les appareils sans LIDAR.
On m’a aussi recommandé Canvas (LIDAR séparé requis) et Scaniverse (LIDAR optionnel).
À chaque fois que je vois le titre, mon cerveau le lit comme « death maps », ce qui me fait bizarrement sourire.