{"slug": "ia-nao-e-so-chat-o-mundo-de-computer-vision-3d-e-ia-multimodal", "title": "IA Não é Só Chat: o Mundo de Computer Vision, 3D e IA Multimodal", "summary": "A developer provides a comprehensive overview of computer vision, covering image classification, object detection, 3D reconstruction, and modern vision-language models. The article explains the data representations, preprocessing steps, and neural network architectures, positioning computer vision as a multifaceted field beyond simple object detection.", "body_md": "Quando alguém fala em Computer Vision, a primeira coisa que costuma vir à cabeça é detecção de objetos.\n\nÉ uma parte importante, mas está longe de ser tudo.\n\nNa prática, Computer Vision reúne problemas bem diferentes: entender imagens, acompanhar objetos em vídeo, estimar profundidade, descobrir a posição de uma câmera, reconstruir ambientes em 3D, trabalhar com LiDAR, interpretar documentos e, mais recentemente, conectar visão com modelos de linguagem.\n\nUm sistema mais completo pode ter algo parecido com isto:\n\n```\nCamera / LiDAR / IMU\n        ↓\nPreprocessing\n        ↓\nDetection / Segmentation\n        ↓\nTracking / Pose\n        ↓\nDepth / Geometry\n        ↓\nSfM / MVS / SLAM\n        ↓\nPoint Cloud\n        ↓\nMesh / 3D Representation\n        ↓\nScene Understanding\n        ↓\nVision-Language Model\n        ↓\nLLM\n```\n\nA ideia deste texto é organizar esse universo de forma prática para quem desenvolve software e quer entender como as peças se encaixam.\n\nUma forma simples de dividir Computer Vision é:\n\n```\nCOMPUTER VISION\n│\n├── Imagens\n│   ├── Classification\n│   ├── Detection\n│   ├── Segmentation\n│   ├── OCR\n│   ├── Image Retrieval\n│   ├── Image Restoration\n│   └── Image Generation\n│\n├── Vídeo\n│   ├── Object Tracking\n│   ├── Action Recognition\n│   ├── Optical Flow\n│   └── Motion Analysis\n│\n├── Geometria\n│   ├── Camera Models\n│   ├── Camera Calibration\n│   ├── Stereo Vision\n│   ├── Depth Estimation\n│   ├── Epipolar Geometry\n│   ├── SfM\n│   ├── MVS\n│   └── 3D Reconstruction\n│\n├── 3D\n│   ├── LiDAR\n│   ├── Point Clouds\n│   ├── Registration\n│   ├── SLAM\n│   ├── Mesh Reconstruction\n│   ├── NeRF\n│   ├── Gaussian Splatting\n│   └── 3D Object Detection\n│\n├── Humanos\n│   ├── Face Detection\n│   ├── Face Recognition\n│   ├── Pose Estimation\n│   ├── Hand Tracking\n│   └── Gesture Recognition\n│\n└── IA Moderna\n    ├── CNN\n    ├── Vision Transformers\n    ├── Vision-Language Models\n    ├── Embeddings\n    ├── Multimodal AI\n    └── Vision + LLM\n```\n\nO interessante é que essas áreas não ficam isoladas. Em projetos reais, normalmente existe uma combinação delas.\n\nAntes de falar de modelos, vale entender o dado de entrada.\n\nUma imagem RGB pode ser representada como:\n\n```\nH × W × 3\n```\n\nPor exemplo:\n\n```\n1920 × 1080 × 3\n```\n\nEm frameworks de Deep Learning, é comum encontrar:\n\n```\n[B, C, H, W]\n```\n\nonde:\n\n`B`\n\n= batch;`C`\n\n= canais;`H`\n\n= altura;`W`\n\n= largura.Uma imagem pode ser vista como uma função:\n\n```\nI(x, y, c)\n```\n\nonde `x`\n\ne `y`\n\nrepresentam a posição do pixel e `c`\n\no canal.\n\nParece uma definição simples, mas praticamente todo pipeline de visão começa aqui.\n\nAntes de colocar uma imagem em uma rede neural, muitas vezes é necessário prepará-la.\n\nAlgumas operações comuns:\n\nUm pipeline básico:\n\n```\nImagem original\n      ↓\nResize\n      ↓\nNormalização\n      ↓\nCorreção / filtragem\n      ↓\nModelo\n```\n\nBibliotecas muito usadas:\n\n```\nOpenCV\nPillow\nNumPy\nscikit-image\n```\n\nNem todo problema precisa de Deep Learning. Em alguns casos, OpenCV resolve praticamente tudo.\n\nClassification responde:\n\nQual é a classe dessa imagem?\n\nPor exemplo:\n\n```\nImagem\n  ↓\nModelo\n  ↓\ndog: 0.96\ncat: 0.03\nhorse: 0.01\n```\n\nFormalmente:\n\n```\nP(class | image)\n```\n\nArquiteturas clássicas:\n\nClassification é normalmente o ponto de entrada para quem começa a estudar visão computacional com Deep Learning.\n\nAs Convolutional Neural Networks foram responsáveis por uma grande parte da evolução inicial do Deep Learning aplicado a imagens.\n\nA convolução percorre a imagem utilizando filtros que aprendem padrões.\n\nDe forma simplificada:\n\n```\nImage\n  ↓\nConvolution\n  ↓\nFeature Map\n  ↓\nActivation\n  ↓\nPooling\n  ↓\nMore Features\n  ↓\nClassifier\n```\n\nNo começo da rede aparecem padrões mais simples:\n\n```\nedges\ncorners\ntextures\n```\n\nNas camadas seguintes:\n\n```\nshapes\nparts\nobjects\n```\n\nE no final:\n\n```\nsemantic representation\n```\n\nClassification diz o que existe.\n\nDetection também precisa dizer onde.\n\nUma saída típica contém:\n\n```\nclass\nconfidence\nx1\ny1\nx2\ny2\n```\n\nOu:\n\n```\nclass\nconfidence\ncenter_x\ncenter_y\nwidth\nheight\n```\n\nVisualmente:\n\n```\n┌──────────────────────────────┐\n│                              │\n│    ┌───────────────┐         │\n│    │    person     │         │\n│    └───────────────┘         │\n│                              │\n│                  ┌────────┐  │\n│                  │  car   │  │\n│                  └────────┘  │\n│                              │\n└──────────────────────────────┘\n```\n\nExemplos:\n\n```\nR-CNN\nFast R-CNN\nFaster R-CNN\nMask R-CNN\n```\n\nA ideia geral:\n\n```\nImage\n ↓\nRegion Proposals\n ↓\nClassification\n ↓\nBounding Box Refinement\n```\n\nExemplos:\n\n```\nYOLO\nSSD\nRetinaNet\n```\n\nA ideia:\n\n```\nImage\n ↓\nNeural Network\n ↓\nBoxes + Classes + Confidence\n```\n\nEssa abordagem costuma ser muito interessante quando existe requisito de tempo real.\n\nUm exemplo conhecido é o DETR.\n\nAqui a detecção é formulada de uma maneira diferente, usando a arquitetura Transformer para prever os objetos.\n\nDetection gera muitas previsões.\n\nDuas bounding boxes podem representar o mesmo objeto.\n\nPara medir a sobreposição, usamos IoU:\n\n```\nIoU = Intersection / Union\n```\n\nQuanto mais próximo de `1`\n\n, maior a sobreposição.\n\nDepois, algoritmos como Non-Maximum Suppression (NMS) ajudam a remover previsões duplicadas.\n\nUma versão simplificada:\n\n```\nDetections\n   ↓\nOrdenar por confidence\n   ↓\nEscolher melhor box\n   ↓\nComparar IoU\n   ↓\nRemover duplicatas\n```\n\nDetection trabalha com bounding boxes.\n\nSegmentation trabalha em nível de pixel.\n\nCada pixel recebe uma classe:\n\n```\npixel → class\n```\n\nPor exemplo:\n\n```\nroad\ncar\nperson\nsky\nbuilding\n```\n\nAqui cada objeto é uma instância separada:\n\n```\nperson #1\nperson #2\nperson #3\n```\n\nMesmo todos pertencendo à classe `person`\n\n.\n\nCombina semantic segmentation e instance segmentation para representar a cena de forma mais completa.\n\nModelos como SAM popularizaram uma abordagem mais geral para segmentação.\n\nEm vez de ter um modelo treinado exclusivamente para uma classe específica, podemos fornecer diferentes tipos de prompt.\n\nPor exemplo:\n\n```\npoint\nbox\nmask\ntext\n```\n\nUm pipeline pode ser:\n\n```\nImagem\n  ↓\nPrompt\n  ↓\nSegmentation Model\n  ↓\nMask\n```\n\nIsso é útil para ferramentas interativas, edição de imagens e pipelines de anotação.\n\nOCR significa Optical Character Recognition.\n\nO objetivo é transformar texto presente em pixels em texto digital.\n\nUm pipeline tradicional:\n\n```\nImage\n ↓\nPreprocessing\n ↓\nText Detection\n ↓\nText Recognition\n ↓\nPost-processing\n ↓\nText\n```\n\nPor exemplo:\n\n``` bash\nImagem de documento\n       ↓\n\"NOTA FISCAL\"\n\"VALOR: R$ 1.250,00\"\n\"CNPJ: ...\"\n```\n\nOCR moderno pode combinar CNNs, LSTMs, Transformers e modelos multimodais.\n\nOCR resolve apenas uma parte do problema.\n\nUm documento real também possui layout, tabelas, campos e relações entre informações.\n\nUm pipeline de Document AI pode ser:\n\n```\nDocument\n   ↓\nOCR\n   ↓\nLayout Analysis\n   ↓\nEntity Extraction\n   ↓\nDocument Understanding\n```\n\nO sistema pode identificar:\n\n```\ninvoice_number\ncustomer\ncompany\ndate\ntotal\ntax\nitems\n```\n\nIsso aparece bastante em automação de processos, sistemas financeiros, jurídico e governo.\n\nOutra aplicação é encontrar imagens semelhantes.\n\nA ideia moderna é transformar uma imagem em um embedding:\n\n```\nImage\n  ↓\nVision Encoder\n  ↓\nEmbedding\n```\n\nPor exemplo:\n\n```\n[0.12, -0.81, 0.43, 0.19, ...]\n```\n\nDepois armazenamos esses vetores e fazemos busca por similaridade.\n\n```\nQuery Image\n     ↓\nEmbedding\n     ↓\nVector Database\n     ↓\nNearest Neighbors\n     ↓\nSimilar Images\n```\n\nTecnologias comuns:\n\n```\nFAISS\nQdrant\nMilvus\nWeaviate\npgvector\n```\n\nUm vídeo é uma sequência temporal:\n\n```\nFrame 1\nFrame 2\nFrame 3\n...\nFrame N\n```\n\nEntão temos duas dimensões importantes:\n\n```\nspatial information\n+\ntemporal information\n```\n\nÉ isso que torna vídeo mais complicado que uma imagem isolada.\n\nDetection identifica objetos.\n\nTracking tenta manter a identidade desses objetos ao longo dos frames.\n\n```\nFrame 1 → person #17\nFrame 2 → person #17\nFrame 3 → person #17\nFrame 4 → person #17\n```\n\nAssim podemos obter uma trajetória:\n\n```\n(x1, y1)\n(x2, y2)\n(x3, y3)\n...\n```\n\nAlgumas abordagens conhecidas:\n\n```\nKalman Filter\nSORT\nDeepSORT\nByteTrack\nBoT-SORT\n```\n\nOptical Flow tenta estimar o movimento aparente dos pixels entre frames.\n\nUm vetor pode ser representado por:\n\n```\nu(x,y)\nv(x,y)\n```\n\nO resultado é um campo de movimento:\n\n```\n→ → →\n→ → →\n→ → →\n```\n\nAplicações:\n\nAgora o objetivo não é apenas descobrir que existe uma pessoa.\n\nQueremos descobrir o que ela está fazendo:\n\n```\nwalking\nrunning\njumping\nfalling\nsitting\n```\n\nIsso exige informação temporal.\n\nArquiteturas podem utilizar:\n\n```\nCNN + RNN\n3D CNN\nVideo Transformer\n```\n\nDepois de detectar e acompanhar objetos, podemos analisar:\n\nUm pipeline:\n\n```\nVideo\n ↓\nDetection\n ↓\nTracking\n ↓\nTrajectory\n ↓\nMotion Analysis\n ↓\nEvent Detection\n```\n\nÉ uma base para aplicações como monitoramento, análise esportiva e robótica.\n\nPara entrar em visão 3D, precisamos entender como uma câmera transforma o mundo 3D em uma imagem 2D.\n\nUm ponto:\n\n```\nP = (X, Y, Z)\n```\n\npode ser projetado aproximadamente como:\n\n```\nx = fX/Z\ny = fY/Z\n```\n\nonde `f`\n\nrepresenta a distância focal.\n\nUma câmera real normalmente é representada por uma matriz intrínseca:\n\n```\nK =\n[ fx  0  cx ]\n[ 0  fy  cy ]\n[ 0   0   1 ]\n```\n\nIsso aparece constantemente em reconstrução 3D.\n\nCalibration determina os parâmetros da câmera.\n\nExemplos:\n\n```\nfx\nfy\ncx\ncy\nk1\nk2\nk3\np1\np2\n```\n\nOs primeiros representam parâmetros internos da câmera e os demais podem representar distorção.\n\nRepresentam a pose da câmera:\n\n```\nR\nt\n```\n\nonde:\n\n```\nR = rotation\nt = translation\n```\n\nUma transformação pode ser escrita como:\n\n```\nP_camera = R P_world + t\n```\n\nLentes reais introduzem distorções.\n\nAs mais conhecidas:\n\n```\nradial distortion\ntangential distortion\n```\n\nUm pipeline pode começar com:\n\n```\nDistorted Image\n      ↓\nUndistortion\n      ↓\nRectified Image\n```\n\nIsso é especialmente importante em aplicações geométricas.\n\nDuas câmeras permitem estimar profundidade.\n\n```\nLeft Camera             Right Camera\n      \\                     /\n       \\                   /\n        \\                 /\n             Object\n```\n\nA diferença entre a posição de um ponto nas duas imagens é a disparidade:\n\n```\ndisparity = d\n```\n\nUma relação simplificada:\n\n```\nZ = fB / d\n```\n\nonde:\n\n```\nZ = profundidade\nf = focal length\nB = baseline\nd = disparity\n```\n\nQuanto maior a disparidade, normalmente menor a distância do objeto.\n\nDepth estimation tenta produzir um mapa de profundidade.\n\nEntrada:\n\n```\nRGB Image\n```\n\nSaída:\n\n```\nDepth Map\n```\n\nPode ser:\n\nRepresentação:\n\n```\nRGB\n ↓\nDepth Network\n ↓\nDepth Map\n```\n\nModelos modernos utilizam arquiteturas profundas, inclusive Transformers.\n\nEm stereo e reconstrução 3D, epipolar geometry é fundamental.\n\nUm ponto em uma imagem não corresponde a qualquer lugar da segunda imagem. Ele está restrito a uma linha epipolar.\n\nConceitos importantes:\n\n```\nFundamental Matrix\nEssential Matrix\nEpipoles\nEpipolar Lines\n```\n\nUma relação clássica:\n\n```\nx'ᵀ F x = 0\n```\n\nonde `F`\n\né a Fundamental Matrix.\n\nPara reconstruir uma cena a partir de imagens, precisamos encontrar pontos que possam ser reconhecidos em diferentes views.\n\nAlgoritmos clássicos:\n\n```\nSIFT\nSURF\nORB\nAKAZE\n```\n\nUm feature normalmente envolve:\n\n```\nkeypoint\n+\ndescriptor\n```\n\nO keypoint representa a localização.\n\nO descriptor representa as características daquela região.\n\nDepois de extrair features de duas imagens:\n\n```\nImage A\n  ↓\nDescriptors A\n\nImage B\n  ↓\nDescriptors B\n```\n\npodemos procurar correspondências:\n\n```\nA[124] ↔ B[87]\nA[233] ↔ B[152]\nA[901] ↔ B[421]\n```\n\nEsses matches são a matéria-prima de muitos pipelines de reconstrução.\n\nNem todo match é correto.\n\nAlguns são outliers.\n\nRANSAC é usado para estimar modelos geométricos de forma robusta.\n\n```\nMatches\n  ↓\nRANSAC\n  ↓\nInliers + Outliers\n```\n\nOs inliers são usados para estimar uma transformação ou modelo geométrico mais confiável.\n\nSfM, ou Structure from Motion, tenta recuperar:\n\n```\ncamera poses\n+\n3D structure\n```\n\na partir de várias imagens.\n\nUm pipeline simplificado:\n\n```\nImages\n  ↓\nFeature Extraction\n  ↓\nFeature Matching\n  ↓\nCamera Pose Estimation\n  ↓\nTriangulation\n  ↓\nSparse Point Cloud\n```\n\nA grande vantagem é que não precisamos necessariamente de um sensor de profundidade dedicado.\n\nA geometria pode ser recuperada a partir das imagens.\n\nSe temos:\n\n```\nCamera A\nCamera B\n```\n\ne um mesmo ponto aparece nas duas imagens, podemos estimar sua posição 3D.\n\n```\nCamera A\n    \\\n     \\\n      P\n     /\n    /\nCamera B\n```\n\nEsse processo é chamado de triangulação.\n\nO resultado é um ponto no espaço:\n\n```\nP = (X, Y, Z)\n```\n\nDurante SfM, as estimativas iniciais podem conter erros.\n\nBundle Adjustment otimiza simultaneamente:\n\n```\ncamera poses\n+\n3D points\n```\n\nbuscando minimizar o erro de reprojeção.\n\nConceitualmente:\n\n```\nminimize Σ || observed_pixel - projected_3D_point ||²\n```\n\nEsse tipo de otimização é uma das partes mais importantes de um pipeline de reconstrução fotogramétrica.\n\nSfM normalmente produz uma reconstrução esparsa.\n\nMVS tenta gerar uma reconstrução muito mais densa.\n\n```\nSfM\n ↓\nSparse Point Cloud\n ↓\nMVS\n ↓\nDense Point Cloud\n```\n\nUma maneira útil de pensar:\n\n```\nSfM = entender câmeras + estrutura inicial\n\nMVS = recuperar geometria densa\n```\n\nUm pipeline de fotogrametria pode ser:\n\n```\nPhotos\n ↓\nFeature Extraction\n ↓\nFeature Matching\n ↓\nCamera Calibration\n ↓\nSfM\n ↓\nSparse Reconstruction\n ↓\nMVS\n ↓\nDense Point Cloud\n ↓\nSurface Reconstruction\n ↓\nMesh\n ↓\nTexture\n```\n\nFerramentas conhecidas:\n\n```\nCOLMAP\nOpenMVG\nOpenMVS\nAliceVision / Meshroom\nOpen3D\n```\n\nUma Point Cloud é um conjunto de pontos 3D.\n\nO mínimo:\n\n```\nX\nY\nZ\n```\n\nMas um ponto pode carregar muito mais informação:\n\n```\nX\nY\nZ\nR\nG\nB\nnormal\nintensity\nconfidence\ntimestamp\n```\n\nPor exemplo:\n\n```\nP1 = (1.2, 0.4, 2.1)\nP2 = (1.3, 0.5, 2.0)\nP3 = (1.4, 0.5, 2.2)\n```\n\nSe temos duas nuvens:\n\n```\nCloud A\nCloud B\n```\n\nprecisamos encontrar a transformação que alinha uma com a outra.\n\nUm algoritmo clássico é o ICP:\n\nIterative Closest Point\n\nPipeline:\n\n```\nInitial Alignment\n      ↓\nNearest Neighbors\n      ↓\nEstimate Transform\n      ↓\nApply Transform\n      ↓\nRepeat\n```\n\nA transformação normalmente pertence ao grupo de movimentos rígidos:\n\n```\nT ∈ SE(3)\n```\n\nLiDAR significa Light Detection and Ranging.\n\nO princípio básico é medir o tempo que a luz leva para ir até uma superfície e retornar.\n\nUma aproximação:\n\n```\nd = cΔt / 2\n```\n\nonde:\n\n```\nd  = distância\nc  = velocidade da luz\nΔt = tempo de voo\n```\n\nO sensor pode gerar uma representação 3D do ambiente.\n\nCâmera e LiDAR têm características diferentes.\n\nA câmera oferece:\n\n```\ncolor\ntexture\nsemantic information\n```\n\nO LiDAR oferece:\n\n```\ndepth\ngeometry\n```\n\nCom calibração entre os dois sensores, podemos projetar pontos do LiDAR na imagem.\n\n```\nLiDAR Point\n     ↓\nExtrinsic Transform\n     ↓\nCamera Coordinate System\n     ↓\nPixel Projection\n```\n\nIsso permite, por exemplo, associar cor RGB a pontos 3D.\n\nSLAM significa:\n\nSimultaneous Localization and Mapping\n\nO sistema precisa resolver duas coisas ao mesmo tempo:\n\n```\nOnde estou?\n```\n\ne:\n\n```\nComo é o ambiente?\n```\n\nPipeline simplificado:\n\n```\nSensor\n  ↓\nFeature / Point Extraction\n  ↓\nMotion Estimation\n  ↓\nPose\n  ↓\nMap Update\n  ↓\nLoop Closure\n```\n\nAplicações:\n\nNo Visual SLAM, câmeras são usadas para estimar movimento e construir o mapa.\n\nAlguns sistemas conhecidos:\n\n```\nORB-SLAM\nORB-SLAM2\nORB-SLAM3\nVINS\nOpenVSLAM\n```\n\nA qualidade depende bastante de fatores como textura, iluminação, movimento e características da câmera.\n\nPodemos combinar câmera e IMU:\n\n```\nCamera\n+\nIMU\n```\n\nA IMU normalmente fornece:\n\n```\naccelerometer\ngyroscope\n```\n\nOs sensores podem ser combinados:\n\n```\nCamera ─────┐\n            ├──> Sensor Fusion ──> Pose\nIMU ────────┘\n```\n\nIsso ajuda principalmente em movimentos rápidos e cenários onde a imagem sozinha é insuficiente.\n\nPoint cloud não é necessariamente uma superfície.\n\nUma mesh possui:\n\n```\nvertices\nedges\nfaces\n```\n\nNormalmente utilizamos triângulos:\n\n```\nTriangle Mesh\n```\n\nPipeline:\n\n```\nPoint Cloud\n ↓\nSurface Reconstruction\n ↓\nMesh\n```\n\nPoisson Surface Reconstruction é um método bastante conhecido para transformar pontos orientados em uma superfície.\n\n```\nPoint Cloud\n+\nNormals\n ↓\nPoisson Reconstruction\n ↓\nSurface\n ↓\nTriangle Mesh\n```\n\nA qualidade das normais e da densidade da nuvem influencia bastante o resultado.\n\nTSDF significa Truncated Signed Distance Function.\n\nA ideia é integrar várias observações de profundidade em um volume.\n\n```\nDepth Frame 1\nDepth Frame 2\nDepth Frame 3\n...\nDepth Frame N\n        ↓\n    TSDF Volume\n        ↓\nSurface Extraction\n        ↓\nMesh\n```\n\nEssa técnica aparece em vários sistemas de reconstrução RGB-D.\n\nNeRF significa Neural Radiance Fields.\n\nEm vez de representar uma cena apenas com pontos ou polígonos, o sistema aprende uma representação neural.\n\nDe forma simplificada:\n\n```\n(x, y, z, direction)\n          ↓\n    Neural Network\n          ↓\n density + color\n```\n\nDepois podemos renderizar a cena a partir de diferentes posições de câmera.\n\nA ideia geral:\n\n```\nCamera Ray\n    ↓\nSample Points\n    ↓\nNeural Field\n    ↓\nVolume Rendering\n    ↓\nPixel\n```\n\n3D Gaussian Splatting segue outra abordagem para representar uma cena.\n\nEm vez de uma mesh tradicional, a cena é composta por gaussianas 3D.\n\nUma gaussiana pode carregar:\n\n```\nposition\nscale\nrotation\nopacity\ncolor\n```\n\nPipeline:\n\n```\nScene\n ↓\n3D Gaussians\n ↓\nRasterization\n ↓\nRendered Image\n```\n\nÉ uma técnica especialmente interessante para visualização e reconstrução de cenas.\n\nDetection também pode acontecer diretamente no espaço 3D.\n\nEntrada:\n\n```\nPoint Cloud\n```\n\nSaída:\n\n```\n3D Bounding Box\n```\n\nUma bounding box 3D pode conter:\n\n```\nx\ny\nz\nwidth\nheight\ndepth\nrotation\nclass\nconfidence\n```\n\nIsso aparece bastante em:\n\nFace Detection responde:\n\nOnde existem rostos?\n\nNormalmente produz bounding boxes.\n\n```\nImage\n ↓\nFace Detector\n ↓\nBounding Boxes\n```\n\nIsso é diferente de reconhecimento facial.\n\nRecognition tenta gerar uma representação que permita comparar rostos.\n\nPipeline:\n\n```\nFace Detection\n ↓\nFace Alignment\n ↓\nFace Embedding\n ↓\nSimilarity\n```\n\nO rosto vira um vetor:\n\n```\n[0.13, -0.44, 0.82, ...]\n```\n\nE podemos comparar embeddings usando medidas de distância ou similaridade.\n\nPose Estimation tenta localizar partes do corpo.\n\nExemplo:\n\n```\nhead\nshoulder\nelbow\nwrist\nhip\nknee\nankle\n```\n\nUma saída 2D pode ser:\n\n```\n(x, y, confidence)\n```\n\nEm 3D:\n\n```\n(x, y, z)\n```\n\nIsso permite aplicações de:\n\nMãos podem ser representadas por landmarks.\n\nUm modelo pode retornar dezenas de pontos:\n\n```\nlandmark\n    ├── x\n    ├── y\n    ├── z\n    └── confidence\n```\n\nCom esses pontos podemos construir reconhecimento de gestos.\n\n```\nCamera\n ↓\nHand Detection\n ↓\nLandmarks\n ↓\nGesture Classification\n```\n\nTransformers mudaram primeiro o NLP e depois passaram a dominar uma parte importante da visão computacional.\n\nNo caso do Vision Transformer:\n\n```\nImage\n ↓\nPatch Extraction\n ↓\nPatch Embeddings\n ↓\nTransformer\n ↓\nVisual Representation\n```\n\nUma imagem pode ser dividida em patches.\n\nPor exemplo:\n\n```\n224 × 224\n```\n\ncom patches de:\n\n```\n16 × 16\n```\n\nresulta em:\n\n```\n14 × 14 = 196 patches\n```\n\nEsses patches podem ser tratados como uma sequência de tokens visuais.\n\nO mecanismo de atenção permite que diferentes partes da imagem sejam relacionadas entre si.\n\nA operação básica é:\n\n```\nAttention(Q, K, V)\n=\nsoftmax(QKᵀ / √d)V\n```\n\nIsso ajuda o modelo a capturar relações de longo alcance.\n\nEm comparação com convoluções, a atenção oferece uma maneira diferente de modelar dependências espaciais.\n\n| Característica | CNN | Vision Transformer |\n|---|---|---|\n| Operação principal | Convolução | Attention |\n| Viés espacial | Forte | Mais flexível |\n| Relações locais | Muito boas | Aprendidas |\n| Relações globais | Mais limitadas | Muito fortes |\n| Escalabilidade | Alta | Muito alta |\n| Uso atual | Muito relevante | Muito relevante |\n\nNão existe uma regra simples de que um substituiu completamente o outro. Ambos continuam sendo usados.\n\nVision-Language Models conectam visão e linguagem.\n\nUm modelo pode receber:\n\n```\nImage\n+\nQuestion\n```\n\ne produzir:\n\n```\nAnswer\n```\n\nOu:\n\n```\nImage\n ↓\nDescription\n```\n\nA ideia é criar uma representação compartilhada ou conectada entre conteúdo visual e linguagem.\n\nIsso abre espaço para sistemas que conseguem conversar sobre imagens.\n\nMultimodal vai além de imagem + texto.\n\nUm sistema pode trabalhar com:\n\n```\nImage\nVideo\nAudio\nText\n3D\nSensors\n```\n\nConceitualmente:\n\n```\nImage Encoder ───┐\nVideo Encoder ───┤\nAudio Encoder ───┼──> Multimodal Representation\nText Encoder ────┤\n3D Encoder ──────┘\n```\n\nEsse tipo de arquitetura é particularmente interessante quando o problema não pode ser resolvido olhando apenas para um tipo de dado.\n\nUma arquitetura cada vez mais comum:\n\n```\nCamera\n ↓\nVision Encoder\n ↓\nVisual Features\n ↓\nLLM\n ↓\nReasoning\n ↓\nAction\n```\n\nPor exemplo:\n\n```\nCamera\n ↓\nDetection\n ↓\nScene Understanding\n ↓\nVision-Language Model\n ↓\nLLM\n ↓\n\"Existe um obstáculo aproximadamente 2 metros à frente.\"\n```\n\nAqui a visão deixa de ser apenas uma etapa de classificação e passa a fazer parte de um sistema de raciocínio.\n\nEmbeddings são uma das peças importantes dos sistemas modernos.\n\n```\nImage\n ↓\nEncoder\n ↓\nVector\n```\n\nDepois podemos usar o vetor para:\n\nUm exemplo:\n\n```\nQuery Image\n      ↓\nEmbedding\n      ↓\nVector Database\n      ↓\nSimilar Content\n      ↓\nLLM / Application\n```\n\nRAG tradicional costuma trabalhar com texto.\n\nEm uma arquitetura multimodal, podemos recuperar:\n\n```\ndocuments\nimages\ntables\ndiagrams\nphotos\n```\n\nPipeline:\n\n```\nUser Question\n      ↓\nQuery Embedding\n      ↓\nVector Search\n      ↓\nRelevant Images + Documents\n      ↓\nMultimodal Model\n      ↓\nAnswer\n```\n\nIsso pode ser usado para manuais técnicos, documentação, inspeções, plantas, contratos e outros conteúdos.\n\nSistemas avançados raramente precisam depender de um único sensor.\n\nPodemos combinar:\n\n```\nCamera\nLiDAR\nRadar\nIMU\nGPS\nDepth Sensor\n```\n\nA arquitetura:\n\n```\nCamera ───┐\nLiDAR ────┤\nRadar ────┼──> Sensor Fusion\nIMU ──────┤\nGPS ──────┘\n                ↓\n            World Model\n```\n\nCada sensor tem pontos fortes e limitações.\n\nA fusão tenta obter uma representação mais confiável do ambiente.\n\nUm perception stack pode ser:\n\n```\nCameras\nLiDAR\nRadar\nIMU\n   ↓\nSensor Fusion\n   ↓\nObject Detection\n   ↓\nTracking\n   ↓\nDepth / 3D Perception\n   ↓\nLocalization\n   ↓\nScene Understanding\n   ↓\nPlanning\n```\n\nA visão é apenas uma parte do sistema inteiro.\n\nUm robô precisa perceber o ambiente antes de tomar decisões.\n\nUm pipeline possível:\n\n```\nSensors\n ↓\nPerception\n ↓\nLocalization\n ↓\nMapping\n ↓\nPlanning\n ↓\nControl\n```\n\nA percepção pode envolver:\n\n```\nDetection\nSegmentation\nDepth\nSLAM\n3D Reconstruction\nPose Estimation\n```\n\nAR depende bastante de entender a relação entre câmera e mundo.\n\nUm pipeline típico:\n\n```\nCamera\n ↓\nTracking\n ↓\nSLAM\n ↓\nPlane Detection\n ↓\nWorld Tracking\n ↓\nVirtual Object Placement\n```\n\nSem uma estimativa razoável da pose da câmera, objetos virtuais não conseguem permanecer corretamente posicionados no ambiente.\n\nUm scanner 3D é um ótimo exemplo de como várias áreas se juntam.\n\nPodemos ter:\n\n```\nCamera\n+\nLiDAR\n+\nIMU\n```\n\ne um pipeline:\n\n```\nCapture\n ↓\nFrame Selection\n ↓\nImage Quality\n ↓\nFeature Extraction\n ↓\nFeature Matching\n ↓\nCamera Pose\n ↓\nDepth\n ↓\nPoint Cloud\n ↓\nRegistration\n ↓\nDense Reconstruction\n ↓\nMesh\n ↓\nTexture\n ↓\n3D Model\n```\n\nAqui aparecem praticamente todos os conceitos discutidos anteriormente.\n\nMais imagens não significa necessariamente uma reconstrução melhor.\n\nAlguns fatores importantes:\n\n```\nsharpness\nexposure\noverlap\ntexture\nviewpoint diversity\nmotion blur\nlighting\ncamera calibration\n```\n\nSe uma imagem estiver muito borrada, os features podem ser ruins.\n\nSe houver pouca sobreposição entre duas imagens, o matching pode falhar.\n\nSe todas as imagens forem praticamente iguais, também pode faltar informação geométrica.\n\nEm uma aplicação de captura contínua, não é necessário guardar todos os frames.\n\nPodemos avaliar:\n\n```\nblur score\nfeature count\nmotion\nimage quality\noverlap\npose change\n```\n\nPor exemplo:\n\n```\nQuality < threshold\n    → discard\n\nFeature count < threshold\n    → discard\n\nPose change muito pequeno\n    → skip\n\nMotion muito alto\n    → wait\n```\n\nIsso reduz processamento, armazenamento e tráfego de rede.\n\nNem todo processamento precisa acontecer no servidor.\n\nPodemos dividir o pipeline:\n\n```\nMobile\n ├── Capture\n ├── Preprocessing\n ├── Detection\n ├── Tracking\n └── Quality Control\n\nServer\n ├── SfM\n ├── MVS\n ├── Reconstruction\n └── Heavy Inference\n```\n\nEssa arquitetura pode reduzir:\n\n```\nlatency\nbandwidth\nserver load\n```\n\ne em determinados cenários também pode ajudar com privacidade.\n\nComputer Vision moderno pode ser bastante pesado.\n\nCPU é muito útil para:\n\nGPU é especialmente boa para:\n\nUm pipeline pode ser:\n\n```\nCPU\n ↓\nData Preparation\n ↓\nGPU\n ↓\nInference\n ↓\nCPU\n ↓\nPost-processing\n```\n\nUm stack bastante comum:\n\n```\nPython\nNumPy\nOpenCV\nPyTorch\nscikit-image\nOpenCV\nMediaPipe\nOpen3D\nPCL\nCOLMAP\nOpenMVG\nOpenMVS\nMeshroom\nOpen3D\nPyTorch\nTensorFlow\nONNX\nTensorRT\nARKit\nVision\nCore ML\nTensorFlow Lite\nONNX Runtime\n```\n\nOpenCV continua sendo uma das bibliotecas mais importantes da área.\n\nEla oferece ferramentas para:\n\n```\nimage processing\nfeature detection\ncamera calibration\nstereo vision\noptical flow\nvideo processing\ngeometric transformations\n```\n\nMesmo quando o modelo de IA é desenvolvido em PyTorch, OpenCV frequentemente aparece em outras partes do pipeline.\n\nOpen3D é especialmente útil para aplicações 3D.\n\nPode trabalhar com:\n\n```\nPoint Clouds\nMeshes\nRGB-D\nRegistration\nVisualization\nSurface Reconstruction\n```\n\nUm pipeline típico:\n\n```\nRGB-D\n ↓\nPoint Cloud\n ↓\nRegistration\n ↓\nFusion\n ↓\nMesh\n```\n\nCOLMAP é uma das ferramentas mais conhecidas para reconstrução 3D a partir de imagens.\n\nUm pipeline típico:\n\n```\nImages\n ↓\nFeature Extraction\n ↓\nFeature Matching\n ↓\nSfM / Mapper\n ↓\nSparse Reconstruction\n ↓\nDense Reconstruction\n ↓\nPoint Cloud\n```\n\nÉ uma ferramenta importante para quem trabalha com:\n\n```\nphotogrammetry\nSfM\nMVS\n3D reconstruction\n```\n\nUm modelo não deve ser avaliado apenas olhando alguns resultados.\n\nÉ necessário usar métricas.\n\n```\nAccuracy\nPrecision\nRecall\nF1\nTop-k Accuracy\nIoU\nPrecision\nRecall\nmAP\nIoU\nDice\nPixel Accuracy\nMOTA\nMOTP\nIDF1\nHOTA\n```\n\nPara classificação:\n\n```\n                 Predicted\n              Cat       Dog\n\nActual Cat     TP        FN\n\nActual Dog     FP        TP\n```\n\nA partir disso:\n\n```\nPrecision = TP / (TP + FP)\n\nRecall = TP / (TP + FN)\n\nF1 = 2 × Precision × Recall\n     ------------------------\n     Precision + Recall\n```\n\nIoU é utilizado principalmente em detection e segmentation.\n\n```\nIoU = Intersection / Union\n```\n\nExemplo conceitual:\n\n```\nPrediction\n┌───────────────┐\n│               │\n│    ┌──────────┼────┐\n│    │          │    │\n└────┼──────────┘    │\n     └───────────────┘\n      Ground Truth\n```\n\nQuanto maior a interseção relativa, melhor a sobreposição.\n\nMean Average Precision é uma métrica muito usada em object detection.\n\nEla envolve a relação entre:\n\n```\nPrecision\nRecall\nIoU\n```\n\nÉ comum encontrar:\n\n```\nmAP@50\nmAP@50:95\n```\n\nÉ importante observar exatamente qual métrica está sendo reportada antes de comparar dois modelos.\n\nEm aplicações reais, accuracy não é tudo.\n\nTambém precisamos medir:\n\n```\nLatency\nFPS\nMemory\nGPU utilization\nPower consumption\n```\n\nUm modelo muito preciso pode não servir para uma aplicação que exige tempo real.\n\nPor exemplo:\n\n```\n30 FPS\n```\n\nsignifica aproximadamente:\n\n```\n33 ms por frame\n```\n\nEntão todo o pipeline precisa caber nesse orçamento de tempo.\n\nModelos podem ser quantizados:\n\n```\nFP32\n ↓\nFP16\n ↓\nINT8\n```\n\nIsso pode reduzir:\n\n```\nmemory\nlatency\npower consumption\n```\n\nmas pode haver perda de precisão dependendo do modelo e da estratégia utilizada.\n\nAlgumas técnicas:\n\n```\nPruning\nKnowledge Distillation\nQuantization\nOperator Fusion\nONNX\nTensorRT\nCompilation\n```\n\nUm pipeline de deployment pode ser:\n\n```\nTraining Model\n      ↓\nExport\n      ↓\nOptimization\n      ↓\nQuantization\n      ↓\nCompilation\n      ↓\nDeployment\n```\n\nO modelo pode rodar em:\n\n```\nCloud\nServer\nDesktop\nEdge Device\nMobile\nEmbedded Hardware\n```\n\nUm exemplo híbrido:\n\n```\nMobile Camera\n      ↓\nOn-device Model\n      ↓\nLocal Filtering\n      ↓\nAPI\n      ↓\nBackend\n      ↓\nHeavy Model\n```\n\nA arquitetura depende de latência, custo, hardware, conectividade e privacidade.\n\nUm dos maiores erros ao começar em Machine Learning é assumir que o modelo é a parte mais importante.\n\nNa prática, a qualidade dos dados tem enorme impacto.\n\nProblemas comuns:\n\n```\ndataset pequeno\nlabels ruins\nclasses desbalanceadas\nlighting diferente\ncamera diferente\nresolution diferente\ndomain shift\n```\n\nUm modelo excelente treinado com dados ruins continuará produzindo resultados ruins.\n\nDurante o treinamento podemos variar os dados:\n\n```\nrotation\ncrop\nflip\nscale\nbrightness\ncontrast\nnoise\nblur\nperspective\ncolor jitter\n```\n\nPor exemplo:\n\n```\nOriginal\n   ↓\nAugmentation\n   ↓\nTraining Samples\n```\n\nA ideia é tornar o modelo menos dependente de condições específicas do dataset.\n\nUm modelo treinado em um ambiente pode se comportar de maneira completamente diferente em outro.\n\nPor exemplo:\n\n```\nTraining:\nstudio lighting\n\nProduction:\noutdoor lighting\n```\n\nOu:\n\n```\nTraining:\nhigh-end camera\n\nProduction:\nmobile camera\n```\n\nEsse problema é conhecido como domain shift.\n\nÉ uma das razões pelas quais modelos que parecem excelentes em benchmarks podem precisar de ajustes quando chegam à produção.\n\nPodemos juntar várias dessas ideias em uma arquitetura:\n\n```\n                    SENSORS\n                       │\n       ┌───────────────┼───────────────┐\n       ▼               ▼               ▼\n    Camera            LiDAR           IMU\n       │               │               │\n       └───────────────┼───────────────┘\n                       ▼\n                 Sensor Fusion\n                       │\n                       ▼\n                Object Detection\n                       │\n                       ▼\n                    Tracking\n                       │\n                       ▼\n                 Depth / 3D\n                       │\n                       ▼\n                  Localization\n                       │\n                       ▼\n               Scene Understanding\n                       │\n                       ▼\n                   World Model\n                       │\n                       ▼\n                    Decision\n```\n\nEssa arquitetura aparece, com variações, em robótica, veículos autônomos, AR e sistemas de mapeamento.\n\nExiste uma evolução interessante quando passamos de reconhecimento para entendimento espacial.\n\nPrimeiro:\n\n```\n\"Existe uma cadeira.\"\n```\n\nDepois:\n\n```\n\"A cadeira está a 2 metros.\"\n```\n\nDepois:\n\n```\n\"A cadeira está à esquerda e está orientada nessa direção.\"\n```\n\nE finalmente:\n\n```\n\"Existe espaço suficiente para passar ao lado da cadeira.\"\n```\n\nO sistema deixa de apenas classificar objetos e começa a construir uma representação do ambiente.\n\nIsso aproxima Computer Vision de conceitos como:\n\n```\n3D perception\nspatial reasoning\nworld models\nrobotics\nmultimodal AI\n```\n\nUma arquitetura mais ambiciosa poderia ser:\n\n```\n                    WORLD\n                      │\n                      ▼\n                 ┌─────────┐\n                 │ Sensors │\n                 └────┬────┘\n                      │\n          ┌───────────┼───────────┐\n          ▼           ▼           ▼\n       Camera       LiDAR        IMU\n          │           │           │\n          └───────────┼───────────┘\n                      ▼\n                Preprocessing\n                      │\n                      ▼\n              Computer Vision\n                      │\n        ┌─────────────┼─────────────┐\n        ▼             ▼             ▼\n    Detection     Segmentation    Tracking\n        │             │             │\n        └─────────────┼─────────────┘\n                      ▼\n                  Geometry\n                      │\n        ┌─────────────┼─────────────┐\n        ▼             ▼             ▼\n      Depth          SfM           SLAM\n        │             │             │\n        └─────────────┼─────────────┘\n                      ▼\n                   3D World\n                      │\n        ┌─────────────┼─────────────┐\n        ▼             ▼             ▼\n   Point Cloud       Mesh       Neural Field\n        │             │             │\n        └─────────────┼─────────────┘\n                      ▼\n              Scene Understanding\n                      │\n                      ▼\n             Vision-Language Model\n                      │\n                      ▼\n                     LLM\n                      │\n                      ▼\n                  Reasoning\n                      │\n                      ▼\n                    Action\n```\n\nPara um desenvolvedor, uma sequência possível seria:\n\n```\nPython\n ↓\nNumPy\n ↓\nOpenCV\n ↓\nImage Processing\n ↓\nCNN\n ↓\nClassification\n ↓\nObject Detection\n ↓\nSegmentation\n ↓\nVideo Processing\n ↓\nTracking\n ↓\nCamera Geometry\n ↓\nCalibration\n ↓\nStereo\n ↓\nDepth\n ↓\nFeature Matching\n ↓\nSfM\n ↓\nMVS\n ↓\nPoint Clouds\n ↓\nRegistration\n ↓\nSLAM\n ↓\nMesh Reconstruction\n ↓\nVision Transformers\n ↓\nVision-Language Models\n ↓\nMultimodal AI\n ↓\nVision + LLM\n```\n\nNão é necessário dominar tudo para começar a construir aplicações. Mas esse mapa ajuda a entender onde cada tecnologia se encaixa.\n\nUm stack prático para estudar e prototipar:\n\n```\nLanguage\n    Python\n\nNumerical Computing\n    NumPy\n\nImage Processing\n    OpenCV\n\nDeep Learning\n    PyTorch\n\nObject Detection\n    YOLO / DETR\n\nSegmentation\n    SAM / segmentation models\n\n3D\n    Open3D\n\nPhotogrammetry\n    COLMAP\n\nPoint Clouds\n    Open3D / PCL\n\nOptimization\n    SciPy / Ceres\n\nModel Runtime\n    ONNX Runtime / TensorRT\n\nBackend\n    FastAPI\n\nMobile\n    Swift / Kotlin / React Native\n\nMultimodal\n    VLM + LLM\n```\n\nO mais importante para quem desenvolve sistemas de Computer Vision é não enxergar essas tecnologias como ferramentas isoladas.\n\nUm projeto real pode começar com:\n\n```\nCamera\n```\n\ne terminar com:\n\n```\n3D Model\n+\nScene Understanding\n+\nLLM\n```\n\nNo meio existem dezenas de etapas:\n\n```\nCapture\n ↓\nPreprocessing\n ↓\nDetection\n ↓\nSegmentation\n ↓\nTracking\n ↓\nCalibration\n ↓\nDepth\n ↓\nPose Estimation\n ↓\nSfM\n ↓\nMVS\n ↓\nPoint Cloud\n ↓\nRegistration\n ↓\nMesh\n ↓\nVision Model\n ↓\nVLM\n ↓\nLLM\n```\n\nCada etapa resolve um problema diferente.\n\nE é justamente a combinação delas que permite construir sistemas realmente sofisticados.\n\nComputer Vision não é apenas reconhecimento de imagens.\n\nÉ a combinação de várias áreas:\n\n```\nComputer Vision\n+\nDeep Learning\n+\nGeometry\n+\nComputer Graphics\n+\n3D Reconstruction\n+\nRobotics\n+\nGenerative AI\n+\nMultimodal AI\n+\nLLMs\n```\n\nUma forma de enxergar a evolução é:\n\n```\nPixels\n  ↓\nFeatures\n  ↓\nObjects\n  ↓\nSemantics\n  ↓\nMotion\n  ↓\nDepth\n  ↓\nGeometry\n  ↓\n3D\n  ↓\nScene Understanding\n  ↓\nMultimodal Reasoning\n  ↓\nAction\n```\n\nUma câmera produz pixels.\n\nUm detector encontra objetos.\n\nUm modelo de segmentação separa regiões.\n\nUm sistema geométrico recupera profundidade e pose.\n\nSfM e MVS conseguem reconstruir uma cena.\n\nLiDAR fornece medições espaciais.\n\nSLAM conecta percepção e localização.\n\nModelos multimodais conectam visão e linguagem.\n\nE um LLM pode usar todas essas informações para raciocinar sobre o que está acontecendo.\n\nÉ aí que Computer Vision começa a deixar de ser apenas \"reconhecimento de imagem\" e passa a funcionar como uma camada de percepção de sistemas inteligentes.\n\n```\nOpenCV\nPyTorch\nscikit-image\nMediaPipe\nYOLO\nFaster R-CNN\nDETR\nU-Net\nMask R-CNN\nSAM\nCamera Calibration\nStereo Vision\nEpipolar Geometry\nSfM\nMVS\nCOLMAP\nOpenMVG\nOpenMVS\nMeshroom\nOpen3D\nPCL\nSLAM\nNeRF\nGaussian Splatting\nVision Transformers\nVision-Language Models\nMultimodal LLMs\nVisual Embeddings\nRAG\n```\n\nO caminho mais interessante, na minha visão, não está em escolher entre Computer Vision, 3D ou LLM.\n\nEstá em conectar essas áreas.\n\n```\nPerception\n    +\nGeometry\n    +\n3D\n    +\nDeep Learning\n    +\nLanguage\n    =\nIntelligent Systems\n```\n\nQuando essas camadas começam a trabalhar juntas, a aplicação deixa de apenas \"ver\" e passa a construir uma representação cada vez mais rica do mundo.", "url": "https://wpnews.pro/news/ia-nao-e-so-chat-o-mundo-de-computer-vision-3d-e-ia-multimodal", "canonical_source": "https://dev.to/alexandrejusten/computer-vision-de-imagens-a-reconstrucao-3d-e-ia-multimodal-1gh3", "published_at": "2026-08-30 05:25:31+00:00", "updated_at": "2026-08-30 05:52:08.748978+00:00", "lang": "en", "topics": ["computer-vision", "machine-learning", "large-language-models", "artificial-intelligence"], "entities": ["OpenCV", "Pillow", "NumPy", "scikit-image"], "alternates": {"html": "https://wpnews.pro/news/ia-nao-e-so-chat-o-mundo-de-computer-vision-3d-e-ia-multimodal", "markdown": "https://wpnews.pro/news/ia-nao-e-so-chat-o-mundo-de-computer-vision-3d-e-ia-multimodal.md", "text": "https://wpnews.pro/news/ia-nao-e-so-chat-o-mundo-de-computer-vision-3d-e-ia-multimodal.txt", "jsonld": "https://wpnews.pro/news/ia-nao-e-so-chat-o-mundo-de-computer-vision-3d-e-ia-multimodal.jsonld"}}