iPhone 15 Pro का Depth Map
(tech.marksblogg.com)- iPhone 2017 से LiDAR, 3D time-of-flight और structured-light 3D scan के ज़रिए खींची गई तस्वीरों में Depth Map भी साथ में सेव करता आ रहा है, और iPhone 15 Pro की HEIC फ़ाइलों से भी इसे निकाला जा सकता है
- HEIC/HEIF container मूल image के साथ-साथ HDR gain map, Depth Map और बहुत सारा metadata भी रख सकता है, इसलिए इसमें साधारण JPEG की तुलना में analysis के लिए ज़्यादा जानकारी होती है
- Finn Jaeger का HEIC Shenanigans HEIC के अंदर मौजूद images और metadata को अलग करने और उन्हें EXR में convert करने वाले Python scripts का संग्रह है; लिखे जाने के समय यह 374 lines का था
- 1.57MB के example HEIC से base TIFF 71MB, HDR gain map TIFF 5.9MB, depth TIFF 433KB और metadata JSON 14KB बने; Depth Map का resolution मूल 5712×4284 से कम, 768×576 है
- OpenEXR conversion में OpenImageIO, OpenColorIO और ACES settings के ज़रिए SDR, HDR gain map और Depth Map channels को combine किया जाता है; अंतिम EXR file 468MB तक बड़ी हो जाती है
iPhone photos में Depth Map सेव करने का तरीका
- Apple 2017 से iPhone से खींची गई images में Depth Map support करता है
- support किए गए तरीकों में LiDAR scanner, 3D time-of-flight scanner-less LIDAR और structured-light 3D scan शामिल हैं
- Depth Map और अन्य images को HEIF container file में साथ में सेव किया जाता है
- HEIF कई images और बहुत सारा metadata रख सकता है
- format 2013~2015 में design किया गया था, और Apple ने 2017 में HEIC variant अपनाया
- iPhone से खींची गई images इसके बाद default रूप से HEIC container में सेव होती हैं
- अगर Depth Map और HDR की जरूरत नहीं है, तो JPEG format भी इस्तेमाल किया जा सकता है
HEIC Shenanigans से अंदरूनी images को अलग करना
- Finn Jaeger ने एक screenshot पोस्ट किया, जिसमें दिखाया गया कि iPhone कई Depth Map बनाता है
- HEIC Shenanigans HEIC container से images और metadata को अलग करने और EXR file में convert करने के scripts देता है
- लिखे जाने के समय project में Python की 374 lines code थीं
- example में iPhone 15 Pro से ली गई HEIC image का इस्तेमाल करते हुए Finn के codebase को follow किया गया है
runtime environment और तैयारी के tools
- चलाने के लिए Python 3.12.3 और कई CLI tools चाहिए
jqopenexrlibimage-exiftool-perllibopenexr-devpython3-pippython3.12-venv
libimage-exiftool-perlpackage exiftool 12.76+dfsg-1 install करता है- यह version जनवरी 2024 के अंत में release हुआ था
- इसके बाद HEIC support issue fixes या improvements शामिल करने वाली कम से कम 10 releases आ चुकी थीं
- example steps के लिए यह version पर्याप्त है, लेकिन बाद में समस्या आए तो संभव है कि latest exiftool में उसका समाधान हो चुका हो
- JSON Convert
jcका इस्तेमाल कई CLI tools के output को JSON में बदलने के लिए किया जाता है - EXR images को DJV v2.0.8 से देखा गया
HEIC से Gain Map और Depth Map निकालना
- example HEIC file का size 1.57MB है
gain_map_extract.pyचलाने पर ये files बनती हैंIMG_E2153_metadata.json: 14KBIMG_E2153_depth_0.tiff: 433KBIMG_E2153_hdrgainmap_48.tiff: 5.9MBIMG_E2153_base.tiff: 71MB
- base TIFF के EXIF metadata में ये विशेषताएं हैं
- file format: TIFF
- compression: Uncompressed
- color: RGB
- image size: 5712×4284
- megapixels: 24.5
- Bits Per Sample: 8 8 8
- HDR Gain Map और Depth Map का resolution मूल image से कम है
- original image: 5712×4284
- HDR Gain Map: 2856×2142
- Depth Map: 768×576
- JSON metadata में
aux,nclx_profile,primary,xmpआदि शामिल हैंurn:com:apple:photo:2020:aux:hdrgainmapitem में[48]value हैprimarysize[5712, 4284]के रूप में दिखता है
- base64-encoded values को इंसानों के पढ़ने लायक रूप में decode करने के लिए 3 GitHub issues दर्ज किए गए हैं
HEIC को OpenEXR में convert करने का flow
- Academy Software Foundation film, TV और creative industries में इस्तेमाल होने वाले open source projects और standards को support करता है
- members में Academy of Motion Picture Arts and Sciences, Disney, Nvidia, Netflix आदि शामिल हैं
- OpenEXR HDR image file format है
- इसे 1999 में Industrial Light and Magic ने पहली बार develop किया था
- 2003 में इसे open source के रूप में release किया गया
- इसका इस्तेमाल visual effects और 3D rendering production में होता है
heic_to_exr.pyचलाने पर iPhone 15 Pro HEIC image OpenEXR file में convert हो जाती है- output file size 468MB है
- conversion script OpenImageIO के image processing tool
oiiotoolको कई बार call करता है
EXR बनाने के चरणों में channel configuration
- सबसे पहले
oiiotool --infoसे source image का size check किया जाता है - base image के RGB channels को
sdr.R,sdr.G,sdr.Bनाम दिया जाता है और color space convert किया जाता है- sRGB curve से Linear Rec.709 के ज़रिए
- Linear P3-D65 से ACEScg में convert किया जाता है
- color conversion के लिए OpenColorIO configuration file इस्तेमाल होती है
- इस्तेमाल की गई OCIO file
studio-config-v1.0.0_aces-v1.3_ocio-v2.1.ocioहै - यह file text-based है और 1,242 lines की है
- description में
Academy Color Encoding System - Studio Config [COLORSPACES v1.0.0] [ACES v1.3] [OCIO v2.1]शामिल है
- इस्तेमाल की गई OCIO file
- HDR gain map TIFF के Y channel का इस्तेमाल करके EXR में बनाया जाता है
- इसे
gainmap.Ychannel नाम दिया जाता है - size 4032×3024 में resize किया जाता है
- Rec.709 curve से Linear में convert किया जाता है
- इसे
- gain map में Y channel को तीन बार duplicate करके RGB में बदला जाता है
gainmap.Rgainmap.Ggainmap.B
exiftoolसेHDRGainMapHeadroomvalue निकालने के बाद, gain map को उस headroom value के inverse का इस्तेमाल करके scale किया जाता है- HDR base image, base image और scaled gain map को multiply करके बनाई जाती है
- Depth Map TIFF के Y channel से EXR format का
depth.Ychannel बनाता है- size 4032×3024 में resize किया जाता है
- final EXR file कई channels को क्रम से जोड़कर बनती है
- HDR base के
R,G,B - SDR base के
sdr.R,sdr.G,sdr.B - gain map के
gainmap.R,gainmap.G,gainmap.B - Depth Map का
depth.Y
- HDR base के
- अगर source image में matte होता, तो उस चरण में matte layer भी process करके add की जाती
- final
final.exrfile को source image के पास<prefix>_acesCG.exrनाम से move किया जाता है
1 टिप्पणियां
Hacker News की राय
जैसा दूसरे comments ने सही पकड़ा है, LIDAR resolution इतना कम है कि उसे depth map के मुख्य data के रूप में इस्तेमाल नहीं किया जा सकता
मेरी समझ में iPhone, model और camera के हिसाब से, लगभग चार तरीकों से depth data हासिल करता है। पहले ऐसे depth maps सिर्फ Portrait mode में save होते थे, लेकिन हाल के iPhone सामान्य photos में भी इन्हें save करते दिखते हैं
article में जो helper images व्यक्ति, चश्मा, बाल और skin को सफेद दिखाती हैं, उन्हें Apple portrait effects mattes कहता है और वे machine learning से generate होती हैं
पहले मैंने Portrait photos के depth maps और portrait effects mattes का इस्तेमाल करके creative filters बनाने वाला app बनाया था; काफी मजेदार था, लेकिन अब हट चुका है। depth maps में नई artistic possibilities बहुत हैं
मैं जानना चाहूंगा कि उस app का नाम क्या था और क्या कोई video बचा है। मैंने भी photo tools की series के हिस्से के रूप में Matte Viewer नाम का छोटा tool बनाया है; इसमें effects नहीं हैं, सिर्फ viewing और export support है: https://apps.apple.com/us/app/matte-viewer/id6476831058
दिलचस्प article है। ऐसे depth maps शायद “Portrait” mode में depth-of-field background blur, यानी fake bokeh, के लिए इस्तेमाल होते हैं
photo लेने के बाद भी focus बदल पाना और “aperture” से depth of field adjust कर पाना हमेशा interesting लगा है, लेकिन fake bokeh की shape अच्छी नहीं लगती। हमेशा घटिया Photoshop जैसी दिखती है
file format notation में typo लगता है: “HEIC” 14 बार, “HIEC” 3 बार
सही aperture math से बेहतर camera app बनाया जा सकता है, लेकिन सोचता हूं कि लोग इसके लिए पैसे देंगे या phone users फर्क महसूस ही नहीं करेंगे और परवाह नहीं करेंगे
अगर सुंदर portrait photos चाहिए, तो सस्ता DSLR खरीदना या borrow करना 100 गुना बेहतर result देगा
iOS के लिए Reality Composer में LIDAR का इस्तेमाल करके objects capture करने का dedicated feature है
यह जानकर निराशा हुई कि जिन Apple devices में LIDAR नहीं है, उनमें इसकी जगह photogrammetry fallback नहीं होता। मेरे जैसे 3D modeling या photogrammetry work करने वालों के लिए यह जानकारी काम की है
छोटी चीजें scan करने के लिए मैंने TikTok पर करीब 100 डॉलर में Creality Ferret SE खरीदा था, और यह बहुत शानदार है
मैंने अच्छी reviews भी सुनी हैं कि Canvas को LiDAR चाहिए, और Scaniverse में LiDAR optional है
depth maps और semantic maps देखने में काफी मजेदार होते हैं, और इन्हें TouchDesigner, Blender, Cinema 4D जैसे programs में डालने पर photos से शानदार depth effects बनाए जा सकते हैं
इन्हें photo processing में भी इस्तेमाल किया जा सकता है, और आखिरकार Apple भी इन्हीं कामों के लिए इस्तेमाल करता है
पहले ये सिर्फ Portrait mode में save होते थे, लेकिन हाल के iPhone scene में व्यक्ति या pet detect होने पर लगभग automatically save कर लेते हैं
मैं photo apps और tools बना रहा हूं (https://heliographe.net), और उनमें से Matte Viewer ऐसे data को देखने और export करने का tool है: https://apps.apple.com/us/app/matte-viewer/id6476831058
LIDAR की अपनी resolution article में दिखे depth map से कहीं कम है। इसे LIDAR और normal camera data को combine करके बनाया जाना चाहिए
लेख में HDR gain map पर काफी लंबी चर्चा है, लेकिन यह depth map से कैसे जुड़ा है, यह साफ़ समझ नहीं आया
सोच रहा हूँ कि क्या HDR gain map से जुड़ी processing को छोड़ते हुए depth map को बनाए रखा जा सकता है
व्यक्तिगत रूप से मुझे iPhone का HDR display पसंद नहीं है, क्योंकि यह user द्वारा सेट की गई maximum brightness से भी ज़्यादा screen brightness बढ़ा देता है। मैं अपनी photos से HDR gain map हटाने की कोशिश करता हूँ
पुराने HDR का मतलब था तीन shots लेकर उन्हें merge करना और under/over-exposed हिस्सों को हटाना; resulting image अपने साथ यह अलग information नहीं रखती थी कि वह HDR है
सोच रहा हूँ कि क्या depth map से stereogram या SIRDS बनाए जा सकते हैं। याद है कि पहले कभी बहुत मिलती-जुलती grayscale images से stereogram generate किया था
अगर album की photo में depth map है, या resolution इतना high है कि machine learning approximation काफी अच्छी तरह काम कर सके, तो उसे “Spatial Format” में convert किया जा सकता है
यह EXIF भी पढ़ता है और original shooting angle of view के हिसाब से image के physical size को “scale” करता है। इसलिए wide-angle photos VR space में telephoto photos की तुलना में physically काफी बड़ी दिखती हैं
व्यक्तिगत रूप से, सिर्फ इसी button और feature ने device पर खर्च किए गए 4,000 dollars को justify कर दिया। 2007 में Nikon D7 से ली गई photos को पूर्ण 3D और सही scale में देखकर पुरानी भूली हुई nostalgia और memories लौट आईं, और यह काफी emotional था
Apple का इसे Vision Pro के core selling point के रूप में आगे न रखना एक गलती है। यह सचमुच कमाल है
सोच रहा हूँ कि Apple photos में subject को long-press करके sticker बनाने या दूसरी image में copy करने वाली “create sticker” feature में इसका इस्तेमाल करता है या नहीं
depth information भी असल में शायद ज़्यादा मददगार नहीं होगी। ऐसा करने पर subject जिस floor या table पर है, वह भी लगभग पूरा शामिल हो जाएगा
यह शायद सिर्फ machine learning इस्तेमाल करने वाला semantic segmentation approach है
उस दिन का इंतज़ार है जब महंगे sensors के बिना हर phone hardware default रूप से Gaussian splatting का इस्तेमाल करके 3D images capture करेगा
compute cost बड़ी हो सकती है, लेकिन महंगे sensors जोड़ने और weight बढ़ाने की तुलना में शायद यह ज्यादा सस्ता हो सकता है
site iOS Chrome में अजीब behave करती है। page को नीचे scroll करने पर font size बड़ा हो जाता है, और ऊपर scroll करने पर फिर छोटा हो जाता है, जिससे काफी confusion होता है
फिर भी oiiotool के बारे में पहली बार पता चला, और यह बहुत शानदार है