La Depth Map de l’iPhone 15 Pro
(tech.marksblogg.com)- Depuis 2017, l’iPhone enregistre avec les images prises une Depth Map, via LiDAR, 3D time-of-flight et scan 3D par lumière structurée ; on peut aussi l’extraire des fichiers HEIC de l’iPhone 15 Pro
- Le conteneur HEIC/HEIF peut stocker non seulement l’image d’origine, mais aussi une HDR gain map, une Depth Map et une grande quantité de métadonnées, ce qui offre davantage d’informations à analyser qu’un simple JPEG
- HEIC Shenanigans de Finn Jaeger est un ensemble de scripts Python qui séparent les images et métadonnées internes d’un fichier HEIC et les convertissent en EXR ; au moment de la rédaction, il compte 374 lignes
- À partir d’un exemple HEIC de 1,57 Mo ont été générés un TIFF de base de 71 Mo, un TIFF de HDR gain map de 5,9 Mo, un TIFF de depth de 433 Ko et un JSON de métadonnées de 14 Ko ; la résolution de la Depth Map est de 768×576, inférieure aux 5712×4284 de l’original
- La conversion OpenEXR combine les canaux SDR, HDR gain map et Depth Map en passant par OpenImageIO, OpenColorIO et une configuration ACES ; le fichier EXR final atteint 468 Mo
Comment la Depth Map est stockée dans les photos iPhone
- Depuis 2017, Apple prend en charge la Depth Map dans les images prises avec l’iPhone
- Les méthodes prises en charge incluent le scanner LiDAR, le LIDAR 3D time-of-flight sans scanner, et le scan 3D par lumière structurée
- La Depth Map et les autres images sont stockées ensemble dans un fichier conteneur HEIF
- HEIF peut contenir plusieurs images et de nombreuses métadonnées
- Le format a été conçu entre 2013 et 2015, et Apple a adopté la variante HEIC en 2017
- Depuis, les images prises avec l’iPhone sont stockées par défaut dans un conteneur HEIC
- Si la Depth Map et le HDR ne sont pas nécessaires, le format JPEG peut aussi être utilisé
Séparer les images internes avec HEIC Shenanigans
- Finn Jaeger a publié une capture d’écran montrant l’iPhone générant plusieurs Depth Maps
- HEIC Shenanigans fournit des scripts pour séparer les images et métadonnées d’un conteneur HEIC et les convertir en fichiers EXR
- Au moment de la rédaction, le projet contient 374 lignes de Python
- L’exemple suit la base de code de Finn avec une image HEIC prise avec un iPhone 15 Pro
Environnement d’exécution et outils requis
- L’exécution nécessite Python 3.12.3 et plusieurs outils CLI
jqopenexrlibimage-exiftool-perllibopenexr-devpython3-pippython3.12-venv
- Le paquet
libimage-exiftool-perlinstalle exiftool 12.76+dfsg-1- Cette version est sortie fin janvier 2024
- Depuis, au moins 10 versions ont inclus des corrections ou améliorations liées à la prise en charge de HEIC
- Cette version suffit pour les étapes de l’exemple, mais si des problèmes apparaissent ensuite, ils peuvent avoir été résolus dans une version plus récente d’exiftool
- JSON Convert
jcest utilisé pour convertir en JSON la sortie de plusieurs outils CLI - Les images EXR sont vérifiées avec DJV v2.0.8
Extraction de la Gain Map et de la Depth Map depuis HEIC
- Le fichier HEIC d’exemple pèse 1,57 Mo
- L’exécution de
gain_map_extract.pygénère les fichiers suivantsIMG_E2153_metadata.json: 14 KoIMG_E2153_depth_0.tiff: 433 KoIMG_E2153_hdrgainmap_48.tiff: 5,9 MoIMG_E2153_base.tiff: 71 Mo
- Les métadonnées EXIF du TIFF de base présentent les caractéristiques suivantes
- Format de fichier : TIFF
- Compression : Uncompressed
- Couleur : RGB
- Taille de l’image : 5712×4284
- Mégapixels : 24,5
- Bits Per Sample : 8 8 8
- La HDR Gain Map et la Depth Map ont une résolution inférieure à celle de l’original
- Image d’origine : 5712×4284
- HDR Gain Map : 2856×2142
- Depth Map : 768×576
- Les métadonnées JSON incluent notamment
aux,nclx_profile,primaryetxmp- L’entrée
urn:com:apple:photo:2020:aux:hdrgainmapa la valeur[48] - La taille de
primaryest indiquée sous la forme[5712, 4284]
- L’entrée
- Trois issues GitHub ont été ouvertes pour demander le décodage, sous une forme lisible par un humain, des valeurs encodées en base64
Flux de conversion de HEIC vers OpenEXR
- L’Academy Software Foundation soutient des projets et standards open source utilisés dans le cinéma, la télévision et les industries créatives
- Parmi ses membres figurent l’Academy of Motion Picture Arts and Sciences, Disney, Nvidia, Netflix, etc.
- OpenEXR est un format de fichier d’image HDR
- Il a été développé initialement par Industrial Light and Magic en 1999
- Il a été publié en open source en 2003
- Il est utilisé dans la production d’effets visuels et de rendu 3D
- L’exécution de
heic_to_exr.pyconvertit l’image HEIC de l’iPhone 15 Pro en fichier OpenEXR- Le fichier obtenu pèse 468 Mo
- Le script de conversion appelle à plusieurs reprises
oiiotool, l’outil de traitement d’images d’OpenImageIO
Composition des canaux lors de la génération de l’EXR
oiiotool --infoest d’abord utilisé pour vérifier la taille de l’image source- L’image de base renomme les canaux RGB en
sdr.R,sdr.G,sdr.Bet convertit l’espace colorimétrique- De la courbe sRGB vers Linear Rec.709
- De Linear P3-D65 vers ACEScg
- La conversion des couleurs utilise un fichier de configuration OpenColorIO
- Le fichier OCIO utilisé est
studio-config-v1.0.0_aces-v1.3_ocio-v2.1.ocio - Ce fichier est basé sur du texte et comporte 1 242 lignes
- Sa description inclut
Academy Color Encoding System - Studio Config [COLORSPACES v1.0.0] [ACES v1.3] [OCIO v2.1]
- Le fichier OCIO utilisé est
- La HDR gain map est générée en EXR à partir du canal Y du TIFF
- Elle est nommée canal
gainmap.Y - Sa taille est redimensionnée en 4032×3024
- Elle est convertie de la courbe Rec.709 vers Linear
- Elle est nommée canal
- La gain map devient du RGB en répliquant trois fois le canal Y
gainmap.Rgainmap.Ggainmap.B
- Après extraction de la valeur
HDRGainMapHeadroomavecexiftool, la gain map est mise à l’échelle avec l’inverse de cette valeur de headroom - L’image HDR de base est créée en multipliant l’image de base par la gain map mise à l’échelle
- La Depth Map crée un canal
depth.Yau format EXR à partir du canal Y du TIFF- Sa taille est redimensionnée en 4032×3024
- Le fichier EXR final est constitué en ajoutant plusieurs canaux dans l’ordre
R,G,Bde la base HDRsdr.R,sdr.G,sdr.Bde la base SDRgainmap.R,gainmap.G,gainmap.Bde la gain mapdepth.Yde la Depth Map
- Si l’image source contenait un matte, la couche matte serait également traitée et ajoutée à cette étape
- Le fichier final
final.exrest déplacé à côté de l’image source sous le nom<prefix>_acesCG.exr
1 commentaires
Avis sur Hacker News
Comme d’autres commentaires l’ont justement souligné, la résolution du LIDAR est trop faible pour servir de source principale à une carte de profondeur.
D’après ce que je sais, l’iPhone obtient les données de profondeur d’environ quatre manières selon le modèle et l’appareil photo. Auparavant, ce type de carte de profondeur n’était enregistré qu’en mode Portrait, mais les iPhone récents semblent aussi l’enregistrer pour les photos ordinaires.
Les images auxiliaires de l’article qui marquent en blanc les personnes, les lunettes, les cheveux et la peau sont ce qu’Apple appelle des portrait effects mattes, générées par apprentissage automatique.
Il y a quelque temps, j’avais créé une app qui utilisait les cartes de profondeur et les portrait effects mattes des photos en mode Portrait pour produire des filtres créatifs ; c’était assez amusant, mais elle n’est plus disponible aujourd’hui. Les cartes de profondeur ouvrent beaucoup de nouvelles possibilités artistiques.
Je me demande quel était le nom de cette app et s’il reste une vidéo. Moi aussi, dans le cadre d’une série d’outils photo, j’ai créé un petit outil appelé Matte Viewer : il n’applique pas d’effets, il permet seulement d’afficher et d’exporter : https://apps.apple.com/us/app/matte-viewer/id6476831058
Article intéressant. Ce type de carte de profondeur semble servir au flou d’arrière-plan avec profondeur de champ du mode « Portrait », autrement dit au faux bokeh.
J’ai toujours trouvé intéressant de pouvoir changer la mise au point après la prise de vue et régler la profondeur de champ avec l’« ouverture », mais l’aspect du faux bokeh ne me plaît pas. On dirait toujours un Photoshop mal fait.
Il semble y avoir une coquille dans la notation du format de fichier : « HEIC » 14 fois, « HIEC » 3 fois.
On pourrait sans doute faire une meilleure app photo avec des mathématiques d’ouverture correctes, mais je me demande si les gens paieraient pour ça, ou si les utilisateurs de smartphones ne verraient pas la différence et s’en ficheraient.
Si l’on veut de beaux portraits, acheter ou emprunter un DSLR bon marché donnera des résultats 100 fois meilleurs.
Reality Composer pour iOS dispose d’une fonction dédiée à la capture d’objets avec le LIDAR.
J’ai été déçu de découvrir que, sur les appareils Apple dépourvus de LIDAR, elle n’est pas remplacée par de la photogrammétrie. C’est bon à savoir pour ceux qui, comme moi, veulent faire de la modélisation 3D ou de la photogrammétrie.
Pour scanner de petits objets, j’ai acheté sur TikTok une Creality Ferret SE à environ 100 dollars, et elle est excellente.
J’ai aussi entendu de bons retours disant que Canvas nécessite le LiDAR, tandis que Scaniverse le rend optionnel.
Les cartes de profondeur et cartes sémantiques sont assez amusantes à regarder, et si on les importe dans des programmes comme TouchDesigner, Blender ou Cinema 4D, on peut créer de superbes effets de profondeur à partir de photos.
Elles peuvent aussi servir au traitement photo ; au final, Apple les utilise aussi dans ce but.
Auparavant, elles n’étaient enregistrées qu’en mode Portrait, mais les iPhone récents les enregistrent presque automatiquement lorsqu’une personne ou un animal de compagnie est détecté dans la scène.
Je développe des apps et outils photo (https://heliographe.net), et Matte Viewer est l’un d’eux : il sert à visualiser et exporter ces données : https://apps.apple.com/us/app/matte-viewer/id6476831058
La résolution propre du LIDAR est bien inférieure à celle de la carte de profondeur montrée dans l’article. Elle doit être produite en fusionnant les données du LIDAR et celles de l’appareil photo classique.
L’article consacre pas mal de place à la gain map HDR, mais je ne vois pas bien le lien avec la carte de profondeur
Je me demande s’il est possible de conserver la carte de profondeur tout en sautant le traitement lié à la gain map HDR
Personnellement, je n’aime pas l’affichage HDR de l’iPhone, parce qu’il augmente la luminosité de l’écran au-delà de la luminosité maximale définie par l’utilisateur. J’essaie de supprimer les gain maps HDR de mes photos
À l’origine, le HDR consistait à prendre trois clichés et à les fusionner en éliminant les zones sous- ou surexposées, et l’image finale ne transportait pas d’information distincte indiquant qu’elle était HDR
Je me demande si l’on peut créer des stéréogrammes ou des SIRDS à partir d’une carte de profondeur. Je me souviens avoir généré des stéréogrammes à partir d’images en niveaux de gris très similaires autrefois
Si une photo d’un album possède une carte de profondeur, ou si sa résolution est suffisamment élevée pour qu’une approximation par apprentissage automatique fonctionne assez bien, on peut la convertir au “Spatial Format”
Les EXIF sont aussi lus afin de “mettre à l’échelle” la taille physique de l’image en fonction de l’angle de champ de la prise de vue originale. Ainsi, dans un espace VR, une photo au grand-angle apparaît physiquement beaucoup plus grande qu’une photo prise au téléobjectif
Personnellement, ce bouton et cette fonctionnalité justifient à eux seuls les 4 000 dollars dépensés pour l’appareil. Voir en 3D complète et à la bonne échelle des photos prises en 2007 avec un Nikon D7 a ravivé une nostalgie et des souvenirs longtemps oubliés, et c’était assez émouvant
Apple fait une erreur en ne présentant pas cela comme un argument de vente central du Vision Pro. C’est vraiment impressionnant
Je me demande si Apple utilise cela pour la fonctionnalité “create sticker”, qui permet d’appuyer longuement sur un sujet dans une photo pour en faire un sticker ou le copier dans une autre image
Les informations de profondeur ne seraient probablement pas très utiles non plus en pratique. En procédant ainsi, on inclurait presque entièrement le sol ou la table sur lesquels se trouve le sujet
Il s’agit probablement d’une approche de segmentation sémantique reposant uniquement sur l’apprentissage automatique
J’attends le jour où tout le matériel des smartphones pourra par défaut prendre des images 3D avec du Gaussian splatting, sans capteurs coûteux
Le coût de calcul pourrait être élevé, mais ce serait probablement moins cher que d’ajouter des capteurs coûteux et d’augmenter le poids
Le site se comporte bizarrement dans Chrome sur iOS. Quand on fait défiler la page vers le bas, la taille de la police augmente, puis elle diminue à nouveau quand on remonte, ce qui est assez déroutant
Cela dit, je découvre oiiotool, et c’est vraiment très chouette