- O iPhone 15 Pro salva imagens por padrão no formato HEIC, incluindo mapa de profundidade
- O arquivo HEIC armazena várias imagens e uma grande quantidade de metadados em conjunto, e ao escolher JPEG, recursos como mapa de profundidade e HDR não são incluídos
- Com o projeto open source HEIC Shenanigans, é possível extrair imagens e metadados de arquivos HEIC e convertê-los para o formato EXR
- No processo de conversão, são usados vários padrões e ferramentas da indústria de cinema/TV, como OpenEXR, OpenImageIO e OpenColorIO
- Como resultado, é possível separar e aproveitar em formato EXR as informações de HDR, SDR, Gain Map e Depth Map das fotos do iPhone 15 Pro
Contexto do suporte a mapa de profundidade no iPhone 15 Pro
- Desde 2017, a Apple vem incluindo informações de mapa de profundidade nas imagens da câmera de seus iPhones usando scanner LiDAR, 3D Time-of-Flight e escaneamento por luz estruturada
- Esses mapas de profundidade, metadados e várias versões da imagem são armazenados no formato HEIF (HEIC)
- O HEIC é um formato eficiente para armazenamento de imagens e foi adotado como formato padrão de imagem do iPhone a partir de 2017
- Ao usar o formato JPEG, não é possível utilizar recursos avançados como mapa de profundidade e HDR
Exemplo de verificação de mapa de profundidade em HEIC
- Finn Jaeger, supervisor de VFX da produtora Replayboys, sediada em Hamburgo, Alemanha, compartilhou capturas de tela de múltiplos mapas de profundidade gerados no iPhone e o andamento do projeto
- O projeto HEIC Shenanigans de Finn Jaeger fornece um script Python (374 linhas) que extrai imagens individuais e metadados do contêiner HEIC e os converte em arquivos EXR
Informações do ambiente de desenvolvimento
- A workstation usada roda com CPU Ryzen 9 9950X de 16 núcleos, 96GB de RAM DDR5, SSD NVMe de 4TB, placa-mãe ASRock X870E Nova 90 e Ubuntu 24 LTS (WLS2) em um ambiente Windows 11 Pro
- O Windows é o ambiente principal, incluindo o uso de uma Nvidia GTX 1080, e foi escolhido também por questões de compatibilidade com alguns softwares
Preparação das principais ferramentas e bibliotecas
- É necessário instalar o ambiente Python 3.12.3, além de outras bibliotecas de CLI e de conversão/processamento de imagens
- O exiftool tem papel importante no suporte a HEIC, e versões mais recentes podem incluir mais recursos e correções de bugs
- O jc (JSON Convert) converte a saída de CLI em JSON, aumentando a utilidade em pipelines
- O repositório HEIC Shenanigans é clonado e as dependências são instaladas em um ambiente virtual Python
- As imagens EXR finais podem ser verificadas no visualizador DJV
Demo de conversão e imagens de exemplo
- Foi usada uma amostra de imagem HEIC capturada com um iPhone 15 Pro em Mumbai, na Índia, por Joel Joseph, especialista na linha de produtos ArcGIS
Conversão de HEIC → EXR e workflow
- A Academy Software Foundation lidera projetos open source e padrões usados em cinema/TV/pós-produção digital
- Entre seus projetos, o OpenEXR é um formato de imagem de alta faixa dinâmica (HDR) desenvolvido sob liderança da ILM em 1999, tornado open source em 2003, e usado em efeitos visuais e renderização 3D
Etapas detalhadas da conversão para EXR
- A imagem HEIC de entrada é convertida em arquivo EXR com o script heic_to_exr.py do heic_shenanigans
- O resultado da conversão (EXR) tem 468MB e contém em um único arquivo várias informações de imagem e mapas
Uso de script com oiiotool
- Extração do tamanho da imagem
- Conversão de espaço de cor e gama da imagem sRGB de Linear P3 → ACEScg
- Uso do arquivo de configuração do OpenColorIO (OCIO) para perfil de cor, conversões de color space etc.
- Conversão do HDR Gain Map de Rec709 para Linear e expansão do canal Y → RGB
- Extração do valor de headroom do Gain Map e aplicação de escala inversa
- A imagem base HDR é gerada por operação de multiplicação com o Gain Map
- Extração do canal Y do mapa de profundidade (Depth Map) e salvamento em formato EXR
- Na etapa final, cada canal gerado (RGB, SDR, Gain Map e Depth Map) é adicionado como canal separado dentro do arquivo EXR
Composição dos canais dentro do EXR
- O EXR armazena por canal as seguintes informações
- RGB da imagem base HDR
- Canal SDR (armazenado separadamente)
- Gain Map
- Depth Map
- Se houver uma camada matte, ela também pode ser incluída adicionalmente
Uso e observações
- Com esse processo, é possível separar e aproveitar em formato profissional (EXR) as informações compostas, como profundidade e HDR, das imagens capturadas no iPhone 15 Pro
- Isso mostra o potencial de usar com eficiência imagens capturadas no iPhone em vários pipelines de dados, como machine learning, renderização 3D, cinema e VFX
1 comentários
Comentários do Hacker News
Como outros mencionaram, quero enfatizar que o LIDAR do iPhone tem resolução baixa demais para ser usado como principal fonte de dados de mapa de profundidade. Na prática, o iPhone usa cerca de quatro métodos de extração de profundidade, dependendo do modelo e da câmera em uso. Originalmente isso só era aplicado a fotos no modo retrato, mas os iPhones recentes também gravam mapas de profundidade em fotos normais.
A separação de pessoas mostrada no artigo e as imagens auxiliares de reconhecimento de óculos, cabelo, pele etc. (
portrait effect matte) são resultados de machine learning.Eu também já fiz um app de filtros criativos usando o mapa de profundidade do retrato e as imagens matte; ele não existe mais, mas foi uma experiência muito divertida. As ideias artísticas usando mapas de profundidade são praticamente infinitas.
Nos iPhones recentes, quando o aparelho reconhece um assunto (pessoa ou animal de estimação), ele grava automaticamente um mapa de profundidade mesmo no modo principal de foto. Já tive experiência desenvolvendo um app de filtros criativos com mapa de profundidade e
portrait effect matte, então fiquei curioso para saber se dá para ver o nome desse app e algum vídeo relacionado.Aliás, já criei uma ferramenta utilitária chamada Matte Viewer, mas ela serve apenas para visualizar os mattes e o mapa de profundidade (app Matte Viewer)
Quero enfatizar que o LIDAR é um hardware otimizado não para gerar mapas de profundidade em resolução total, mas sim para foco automático (AF) e foco rápido em ambientes com pouca luz
O terceiro método é de 5 anos atrás, então recomendo consultar o open source mais recente sobre estimativa de profundidade com machine learning (ml-depth-pro)
Também fiquei curioso se o quarto método, o TrueDepth, pode ser usado em apps de segurança para detecção de liveness (distinguir uma pessoa real)
Artigo realmente interessante. É impressionante como esse tipo de dado de mapa de profundidade acaba sendo usado para implementar desfoque de fundo (profundidade de campo, o chamado faux bokeh).
É fascinante poder ajustar depois da foto o foco e a área de profundidade, ou seja, a abertura, mas pessoalmente não gosto muito de bokeh artificial. Parece falso, a ponto de eu achar pior que um resultado de Photoshop.
E também notei alguns erros de digitação no formato de arquivo ao longo do artigo (14 vezes HEIC, 3 vezes HIEC)
Só queria informar rapidamente que corrigi os erros de digitação no formato de arquivo, obrigado por apontar
Acho que o motivo de o bokeh artificial parecer ruim é que ele não reflete corretamente a óptica e a matemática da abertura, e do ponto de vista de produto foi implementado como uma aproximação suficiente para satisfazer 80% dos usuários. Parece que daria para fazer um app de câmera melhor aplicando a matemática correta da abertura, mas fico me perguntando se os consumidores perceberiam a diferença e realmente pagariam por isso
Mapas de profundidade e segmentação semântica (
semantic map) já são divertidos só de olhar, e se você importar isso para apps como TouchDesigner, Blender ou Cinema 4D, dá para aplicar vários efeitos de profundidade às fotos.A própria Apple também usa esses dados no pós-processamento de fotos (correções etc.).
Antes isso só era capturado no modo retrato, mas recentemente passou a ser gravado automaticamente também em fotos normais quando um assunto (pessoa, animal de estimação) é detectado.
Eu também sou desenvolvedor de apps e ferramentas de fotografia, e o Matte Viewer que criei é focado em visualizar e exportar mapas de profundidade e imagens de
portrait matte(informações sobre a ferramenta Heliographe, app Matte Viewer)Espero o dia em que todos os smartphones passem a oferecer por padrão imagens 3D baseadas em Gaussian splatting, sem precisar de sensores caros. O custo computacional é alto, mas ainda me parece mais prático do que adicionar custo e peso extras com sensores adicionais
Posso estar deixando algo passar, mas fiquei me perguntando qual é exatamente a relação entre mapas de profundidade e o fato de o artigo dedicar um bom espaço a HDR gain map.
Eu odeio o HDR display do iPhone (o ajuste excessivo de brilho automático), então removo manualmente o HDR gain map das minhas fotos.
O HDR antigo era melhor nesse aspecto: juntava três fotos com exposições diferentes e corrigia apenas as áreas deficientes, sem embutir no resultado uma propriedade específica chamada “HDR”
Só acrescentando que dá para desligar o recurso “Aumentar brilho HDR da tela” nas configurações de Fotos do iPhone
Tive exatamente a mesma impressão lendo o artigo: a introdução sobre mapas de profundidade foi boa, mas da metade em diante o foco mudou para HDR gain map e a coisa ficou um pouco dispersa. No geral gostei, mas o fluxo da thread pareceu um pouco desorganizado
O LIDAR na verdade tem resolução bem menor do que o mapa de profundidade mostrado no artigo.
O mapa de profundidade real é composto pela fusão dos dados do LIDAR com os dados da câmera
Fiquei curioso se a Apple também aplica essa tecnologia ao recurso de “geração de adesivo” (segurar sobre o assunto na foto para extrair como sticker ou copiar para outra foto)
Fiquei pensando se seria possível usar mapas de profundidade para gerar estereogramas ou SIRDS (single-image random dot stereograms). Tenho boas lembranças de fazer estereogramas a partir de imagens em tons de cinza no passado
As informações de campo de visão são mapeadas a partir do EXIF para ajustar a escala no VR ao tamanho físico da cena original.
Pessoalmente, só esse recurso já fez valer os US$ 4000 que gastei no Vision Pro. Ver em VR, no tamanho correto e em 3D, fotos que tirei antigamente com uma Nikon D7 desperta uma nostalgia muito profunda.
Acho uma pena que a Apple não destaque isso como recurso principal do Vision Pro. É algo realmente impressionante
O Reality Composer para iOS só permite object capture em aparelhos com suporte a LIDAR, e em dispositivos sem LIDAR não há um recurso de backup com photogrammetry (reconstrução 3D composta). Compartilhando uma frustração que tive ao tentar trabalhar com 3D
Para trabalho de escaneamento 3D, o app Heges foi o que teve mais sucesso para mim. O LIDAR é eficaz para objetos grandes, como carros, enquanto a câmera de profundidade do Face ID é útil para objetos pequenos.
Tentei fazer escaneamentos 3D pequenos com um scanner Creality Ferret SE (comprei no TikTok por cerca de US$ 100) e ele foi muito melhor do que eu esperava
O Polycam funciona como substituto usando photogrammetry em aparelhos sem suporte a LIDAR.
Também já recebi recomendação do Canvas (precisa de LIDAR separado) e do Scaniverse (LIDAR opcional)
Toda vez que vejo o título, meu cérebro lê “death maps”, e isso tem um efeito estranhamente engraçado