View in English

  • Global Nav Open Menu Global Nav Close Menu
  • Apple Developer
Search
Cancel
  • Apple Developer
  • News
  • Discover
  • Design
  • Develop
  • Distribute
  • Support
  • Account
Only search within “”

Quick Links

5 Quick Links

Vídeos

Abrir menu Fechar menu
  • Coleções
  • Tópicos
  • Todos os vídeos
  • Sobre

Voltar para WWDC25

  • Sobre
  • Resumo
  • Transcrição
  • Código
  • Leia documentos usando o framework Vision

    Saiba mais sobre as últimas novidades do framework Vision. Vamos apresentar o RecognizeDocumentsRequest e como você pode usá-lo para ler linhas de texto e agrupá-las em parágrafos, ler tabelas, etc. Também vamos nos aprofundar na detecção de manchas na lente da câmera e em como identificar imagens possivelmente borradas em fototecas ou no seu próprio pipeline de captura de câmera.

    Capítulos

    • 0:00 - Introdução
    • 1:22 - Ler documentos
    • 13:35 - Detecção de manchas na lente da câmera
    • 17:59 - Atualização na detecção de pose das mãos

    Recursos

    • Classifying Images with Vision and Core ML
    • Image Classification with Vision and CoreML
    • Recognizing tables within a document
    • Vision
      • Vídeo HD
      • Vídeo SD

    Vídeos relacionados

    WWDC25

    • Conheça os frameworks de aprendizado de máquina e IA nas plataformas Apple

    WWDC24

    • Discover Swift enhancements in the Vision framework

    WWDC23

    • Detect animal poses in Vision
    • Explore 3D body pose and person segmentation in Vision
  • Buscar neste vídeo...

    Olá! Meu nome é Megan Williams. Sou engineer na equipe Framework Vision. Vision disponibiliza APIs para aprendizado de máquina nos apps com diversos usos, como detecção de objetos e pessoas, monitoramento de poses de mãos e corpo e análise de trajetória. Apenas para citar alguns. Todas as APIs Vision são executadas no dispositivo, tornando as tarefas de visão computacional no app mais eficientes e seguras. Nossas APIs estão disponíveis no iOS, macOS, iPadOS, tvOS e visionOS.

    O Vision tem 31 APIs para diversos tipos de análise de imagens. E hoje, vamos adicionar mais duas. Neste vídeo, apresentaremos as novas APIs para leitura de documentos e detecção de manchas na lente da câmera. E falaremos sobre uma atualização no recurso de detecção de poses de mãos.

    Vamos começar.

    Atualmente, o Vision pode detectar e extrair linhas de texto de uma imagem usando o RecognizeTextRequest. Ele é um ótimo recurso, mas alguns documentos têm um formato altamente estruturado do qual seria possível extrair mais informações.

    Por exemplo, neste folheto, temos o título, os parágrafos, uma lista, uma tabela e um código de barras.

    Se apenas fizer a leitura das linhas de texto do documento, perderei algumas informações estruturais importantes. Por exemplo, nesta tabela, se apenas extrair as linhas de texto, não saberei como as linhas e colunas são organizadas. Mas quero saber o que o texto diz e como está formatado. Este ano, o Vision apresenta uma nova API para fazer exatamente isso e muito mais.

    Conheça o RecognizeDocumentsRequest. Como pode reconhecer texto em 26 idiomas, essa API permite extrair elementos estruturais e informações importantes dos documentos. A API detecta as estruturas como tabelas e listas, agrupa linhas de texto em parágrafos, detecta códigos legíveis por máquina, como códigos QR, e identifica informações importantes, como endereços de e-mail, números de telefone ou URLs. Esses recursos fornecem uma melhor compreensão do documento, o que facilita a análise com menos linhas de código.

    Vamos supor que administramos uma loja e queremos que nossos clientes possam se cadastrar em nosso boletim mensal.

    Fornecemos um formulário de inscrição onde os clientes podem inserir o nome, endereço de e-mail e número de telefone.

    Quero criar um app para escanear o formulário e criar um contato de cada pessoa.

    Antes, eu usava o RecognizeTextRequest para extrair texto, que retornava cada célula da tabela como um objeto separado.

    Se eu quisesse criar um contato de cada pessoa, teria que usar a posição de cada caixa de texto para identificar as células da mesma linha.

    Agora, em vez disso, posso usar o RecognizeDocumentsRequest, que analisa a tabela para mim. As células são agrupadas automaticamente em linhas, o que facilita a análise do formulário de inscrição. Vamos ver como usar a API.

    O RecognizeDocumentsRequest funciona como outras solicitações no Vision. Para saber como usar o framework Vision, confira "Conhecer os aprimoramentos do Swift no framework Vision" da WWDC 2024. Mas não se preocupe, vou dar uma visão geral aqui.

    No Vision, processamos imagens por meio de solicitações. A solicitação determina o tipo de análise de imagem que gostaríamos de fazer. Podemos fazer a solicitação em uma imagem e isso produz uma ou mais observações. Essas observações fornecem informações sobre a imagem, por exemplo, a localização dos rostos na imagem.

    O RecognizeDocumentsRequest produzirá um DocumentObservation.

    O DocumentObservations informa o conteúdo e a estrutura do documento. No momento, quando você executa o RecognizeDocumentsRequest, o Vision retorna uma observação de documento por imagem. A observação de documento tem uma estrutura hierárquica. Cada documento é um contêiner que pode ter: texto, tabelas, listas ou códigos de barras.

    As tabelas são compostas por células e as listas são compostas por itens,

    que são contêineres e podem conter outros elementos, como texto. Agora que sabemos o que é uma observação de documento, podemos usá-la para analisar o formulário de inscrição.

    Primeiro, vamos extrair a estrutura da tabela do documento.

    Vou tirar uma foto do documento com o iPad.

    Meu app usa o RecognizeDocumentsRequest para detectar uma tabela e destacá-la na tela.

    Agora o código.

    Tenho uma imagem que acabei de capturar da qual quero extrair a tabela. Primeiro, criarei o RecognizeDocumentsRequest e depois executarei a solicitação na imagem. Recebo de volta um DocumentObservation. Acesso a propriedade tables no documento para extrair as tabelas na imagem.

    Aqui, creio que o documento contenha apenas uma tabela, então retornarei apenas a primeira tabela detectada.

    Agora que detectei uma tabela, vejamos o que ela contém.

    Uma tabela é composta de uma matriz 2D de células. As células podem ser acessadas por linhas ou colunas.

    Fornecemos as coordenadas da tabela em relação à imagem para definirmos o limite da tabela com a região delimitadora. Cada célula da tabela tem uma propriedade para indicar a linha e a coluna a que ela pertence.

    Como uma única célula pode abranger várias linhas ou colunas, esse valor é expresso como um intervalo.

    O conteúdo da célula é um contêiner, que pode conter qualquer conteúdo encontrado em um documento, como texto, tabelas, listas ou códigos de barras. Os contêineres também têm sua própria região delimitadora.

    Depois de extrair os dados como uma tabela, posso ler o formulário de inscrição linha por linha.

    Vou precisar olhar o conteúdo de cada célula para extrair o texto.

    Vamos olhar o texto mais detalhadamente. Há várias maneiras de visualizar o texto no contêiner.

    A transcrição fornecerá todo o texto em um contêiner como uma única string. De forma alternativa, as linhas permitem visualizar o texto como uma matriz de linhas.

    As linhas podem ser agrupadas em parágrafos, o que dá uma visualização mais natural de como o texto seria lido. Se uma linha não faz parte de um agrupamento de parágrafos, ela será considerada como um parágrafo independente. Também podemos obter uma lista de palavras individuais, mas não há suporte para isso em alguns idiomas, como chinês, japonês, coreano e tailandês. Por fim, os dados detectados são strings especiais identificadas no texto que representam informações importantes nos documentos, como endereços de e-mail, datas ou URLs. O Vision usa o novo framework DataDetection, que permite escanear as strings em busca de dados importantes.

    É possível detectar números de telefone, endereços de e-mail e endereços postais em vários formatos.

    Os URLs são detectados como links, e as horas e as datas são detectadas como eventos de calendário.

    As medidas e respectivas unidades são detectadas juntas, assim como os valores em dólar com a respectiva moeda.

    Também é possível identificar números de rastreamento, identificadores de pagamento e números de voos.

    Com todos esses recursos, vamos expandir o app de exemplo. Já detectamos uma tabela. Agora podemos extrair o texto dentro da tabela para criar a lista de contatos. Podemos ler os nomes da primeira coluna e depois usar a detecção de dados para identificar as informações de contato nas outras colunas.

    Vamos atualizar o código de exemplo. Vou analisar a tabela que detectei anteriormente e gerar uma lista de contatos.

    Para cada contato, quero nome, e-mail e, opcionalmente, número de telefone. Vou repetir nas linhas da tabela e criar um contato direto de cada linha.

    A maioria dos formulários de inscrição tem o nome como a primeira coluna, então vamos pegar a primeira célula na linha.

    Posso olhar o texto da célula para obter o nome do contato.

    Usarei a transcrição para obter todo o texto na célula como uma string.

    Agora vou buscar outras informações de contato na linha.

    Vou primeiro repetir o processo nas células restantes.

    Agora vou procurar os dados detectados em cada célula.

    Vamos iterar os dados para ver o que detectamos.

    Posso ativar os detalhes dos dados para procurar especificamente e-mails e números de telefone.

    Se encontrar um e-mail, posso criar um contato com as informações detectadas.

    Agora posso extrair facilmente uma lista de contatos do formulário de inscrição.

    Vou passar a lista para o modo de exibição de contato, que exibirá os contatos no app. Vamos visualizar os contatos.

    Legal.

    Adicionei o recurso para exportar a tabela como uma string separada por tabulação.

    Isso permite copiar a tabela e colá-la nos apps compatíveis, como Notas e Numbers.

    Para ver o código por trás do recurso, baixe o app de exemplo no site para desenvolvedores da Apple. Recapitulando, o RecognizeDocumentsRequest dá aos desenvolvedores uma maneira fácil de extrair informações importantes de documentos.

    A API fornece uma interface simples para você entender a estrutura do documento, o que permite analisar facilmente o texto formatado, como tabelas, e identificar as informações importantes, como e-mails e números de telefone.

    Agora vamos ver outra novidade no Vision este ano:

    detecção de manchas na lente da câmera.

    Quando pego o dispositivo para escanear o formulário de inscrição, posso borrar acidentalmente a lente com o dedo.

    Isso gera fotos de baixa qualidade que podem ser difíceis de processar.

    Felizmente, este ano, o Vision tem um novo recurso para ajudar. O DetectLensSmudgeRequest identifica se uma imagem foi tirada com lente suja, então você pode solicitar que os usuários limpem a lente ou forneçam outra foto. Você pode usar essa solicitação a fim de garantir que apenas imagens de alta qualidade sejam processadas nos apps.

    O DetectLensSmudgeRequest funciona como outras solicitações no framework Vision. Você realiza a solicitação em uma imagem para produzir uma observação sobre manchas.

    A observação tem uma pontuação de confiança que informa a probabilidade de a imagem estar borrada.

    A pontuação de confiança é sempre entre 0 e 1.

    Pontuações mais próximas de 1 indicam uma alta probabilidade de que a imagem esteja borrada.

    Pontuação 0 indica uma alta probabilidade de que a imagem não esteja borrada. Vamos ver como usar isso no código.

    Tenho uma imagem e quero saber se está borrada.

    Primeiro, vou criar uma solicitação de detecção de manchas de lente.

    Depois, faço a solicitação na imagem.

    Isso produz uma observação sobre manchas.

    A pontuação da observação informa a probabilidade de a imagem estar borrada.

    Podemos comparar essa pontuação a um limite para filtrar as imagens de baixa qualidade.

    Aqui escolhi 0,9. Vamos considerar imagens com uma pontuação maior do que o limite como borradas e não vamos processá-las.

    Você pode escolher um limite que funcione melhor para o seu app. Aqui tenho três documentos com pontuações diferentes para manchas.

    Um limite alto permitirá que você processe mais imagens, mas a qualidade delas poderá ser mais baixa.

    Um limite mais baixo rejeitará mais imagens. Em alguns casos, elas poderão ser falsos positivos, o que levará à rejeição de imagens boas.

    Algumas imagens sem uma lente borrada também podem ter uma pontuação para manchas alta. Por exemplo, esta imagem tem desfoque causado pelo movimento da câmera, o que pode dar a impressão de uma lente suja. Isso também pode ocorrer com imagens tiradas com longa exposição ou imagens de nuvens ou nevoeiro. Note que só porque uma foto tem uma pontuação para manchas baixa, isso não indica que ela seja uma foto de alta qualidade. Esta imagem de um respiradouro não está borrada, mas também não é visualmente interessante para compartilhar com amigos. O Vision tem outras APIs que podem ser usadas em combinação com o DetectLensSmudgeRequest para encontrar fotos de alta qualidade.

    Se houver rostos na imagem, você pode usar o DetectFaceCaptureQualityRequest para encontrar boas capturas de rosto. Essa solicitação produz uma pontuação de qualidade de captura para cada rosto,

    também entre 0 e 1, sendo 1 a de melhor qualidade.

    Se não houver rostos na imagem, você poderá usar o CalculateImageAestheticScoresRequest para obter uma pontuação geral para a imagem. Essa solicitação também identifica imagens utilitárias, que são fotos bem feitas, mas sem conteúdo interessante, como imagens de documentos ou recibos. Saiba mais sobre o CalculateImageAestheticScoresRequest na apresentação do Vision na WWDC 2024. Antes de terminar, gostaria de mencionar uma atualização no recurso de detecção de poses de mãos.

    Desde 2020, os desenvolvedores conseguiram usar o DetectHandPoseRequest para identificar a localização de 21 articulações em uma mão.

    As articulações são apresentadas como um HandPoseObservation.

    Essa tecnologia viabiliza os classificadores de ML para poses de mão e os classificadores de ação de mão, que identificam poses e movimentos com as mãos.

    Por exemplo, você pode treinar esses modelos para reconhecer movimentos que controlam recursos no seu app. Para saber como treinar um classificador de pose de mãos, confira "Classificar poses e ações de mão com o CreateML" da WWDC 2021.

    Este ano, o Vision substituirá o modelo para detecção de pose de mãos por um modelo menor e mais moderno.

    O novo modelo ainda detectará as 21 articulações, mas com precisão aprimorada, menos latência e menor uso de memória. Embora a precisão do novo modelo tenha sido aprimorada, as articulações não estão mais no mesmo local que o modelo anterior. Portanto, se você já treinou um classificador de ML para poses de mãos ou de ação no passado, recomendamos retreinar o classificador com o novo modelo para aumentar a precisão.

    Vamos recapitular os novos recursos previstos para este ano, apresentamos duas novas solicitações. Temos o RecognizeDocumentsRequest, para compreensão de documento estruturada, e DetectCameraLensSmudgeRequest, que identifica fotos tiradas com uma lente suja. Também temos um modelo de detecção de pose de mãos atualizado.

    Você pode baixar o app de exemplo neste vídeo no site para desenvolvedores da Apple. Não deixe de conferir "Descobrir os aprimoramentos do Swift no framework Vision" da WWDC 2024 para saber mais sobre as APIs que o Vision tem a oferecer. Agradeço sua participação.

    • 6:39 - Detect tables

      /// Process an image and return the first table detected
      func extractTable(from image: Data) async throws -> DocumentObservation.Container.Table {
          
          // The Vision request.
          let request = RecognizeDocumentsRequest()
          
          // Perform the request on the image data and return the results.
          let observations = try await request.perform(on: image)
      
          // Get the first observation from the array.
          guard let document = observations.first?.document else {
              throw AppError.noDocument
          }
          
          // Extract the first table detected.
          guard let table = document.tables.first else {
              throw AppError.noTable
          }
          
          return table
      }
    • 10:50 - Parse contacts

      /// Extract name, email addresses, and phone number from a table into a list of contacts.
      private func parseTable(_ table: DocumentObservation.Container.Table) -> [Contact] {
          var contacts = [Contact]()
          
          // Iterate over each row in the table.
          for row in table.rows {
              // The contact name will be taken from the first column.
              guard let firstCell = row.first else {
                  continue
              }
              // Extract the text content from the transcript.
              let name = firstCell.content.text.transcript
              
              // Look for emails and phone numbers in the remaining cells.
              var detectedPhone: String? = nil
              var detectedEmail: String? = nil
              
              for cell in row.dropFirst() {
                  // Get all detected data in the cell, then match emails and phone numbers.
                  let allDetectedData = cell.content.text.detectedData
                  for data in allDetectedData {
                      switch data.match.details {
                      case .emailAddress(let email):
                          detectedEmail = email.emailAddress
                      case .phoneNumber(let phoneNumber):
                          detectedPhone = phoneNumber.phoneNumber
                      default:
                          break
                      }
                  }
              }
              // Create a contact if an email was detected.
              if let email = detectedEmail {
                  let contact = Contact(name: name, email: email, phoneNumber: detectedPhone)
                  contacts.append(contact)
              }
          }
          return contacts
      }
    • 0:00 - Introdução
    • O framework Vision fornece APIs para integrar o aprendizado de máquina a apps em várias plataformas da Apple. Essas APIs permitem tarefas como detecção de pessoa e objetos, rastreamento de pose e análise de trajetória, todas executadas no dispositivo para oferecer melhor desempenho e segurança. Atualmente, o framework é composto por 31 APIs, com duas novas adições para leitura de documentos e detecção de manchas na lente da câmera e uma atualização para detecção de pose manual.

    • 1:22 - Ler documentos
    • Há uma nova API chamada 'RecognizeDocumentsRequest' que se baseia no recurso 'RecognizeTextRequest' existente, permitindo a extração de informações estruturadas de documentos. Com 'RecognizeDocumentsRequest', é possível processar imagens e obter uma estrutura hierárquica do conteúdo do documento. A API pode detectar vários elementos, como tabelas, listas, parágrafos e códigos legíveis por máquina, como códigos QR. Ela vai além de extrair o texto; ela entende a formatação do texto, o que facilita a análise e interpretação dos dados. Por exemplo, imagine uma folha de inscrição com nomes, endereços de e-mail e números de telefone. Antes, a extração dessas informações era complexa, exigindo a determinação manual das relações celulares. No entanto, com 'RecognizeDocumentsRequest', o sistema analisa automaticamente a tabela e agrupa as células em linhas, simplificando o processo de criação de contatos a partir da planilha digitalizada.

    • 13:35 - Detecção de manchas na lente da câmera
    • O novo recurso de detecção de manchas na lente da câmera da Vision, 'DetectLensSmudgeRequest', identifica imagens borradas usando uma pontuação de confiança entre 0 e 1. É possível definir limites para filtrar imagens de baixa qualidade, em que pontuações mais altas indicam uma imagem borrada. Limiares mais altos processam mais imagens, mas podem incluir algumas de qualidade inferior, enquanto limiares mais baixos rejeitam mais imagens, podendo descartar algumas que são boas. Fatores como desfoque de movimento da câmera, longa exposição, nuvens ou nevoeiro podem causar falsos positivos. Além disso, o Vision oferece outras APIs para avaliar a qualidade da imagem, como 'DetectFaceCaptureQualityRequest' para imagens com rostos e 'CalculateImageAestheticScoresRequest' para imagens sem rostos, incluindo documentos ou recibos.

    • 17:59 - Atualização na detecção de pose das mãos
    • O framework Vision também tem um modelo atualizado de detecção de pose das mãos. O original, disponível desde 2020, identifica 21 articulações em uma mão para reconhecimento de movimentos em apps. O novo modelo é menor, mais rápido e preciso, mas se baseia em articulações diferentes, o que requer novo treinamento dos classificadores existentes.

Developer Footer

  • Vídeos
  • WWDC25
  • Leia documentos usando o framework Vision
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • App Store
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Fonts
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Open Source
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Sample Code
    • Tutorials
    • Downloads
    • Forums
    • Videos
    Open Menu Close Menu
    • Support Articles
    • Contact Us
    • Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Get the Apple Developer app.
    Copyright © 2025 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines