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

Videos

Abrir menú Cerrar menú
  • Colecciones
  • Temas
  • Todos los videos
  • Información

Más videos

  • Información
  • Resumen
  • Transcripción
  • Código
  • Lee documentos con la estructura Vision

    Conoce los últimos avances en la estructura Vision. Presentaremos RecognizeDocumentsRequest y cómo usarlo para leer líneas de texto y agruparlas en párrafos, leer tablas, etc. También profundizaremos en la detección de manchas en el lente de la cámara y cómo identificar imágenes potencialmente manchadas en fototecas o en tu propio canal de tomas fotográficas.

    Capítulos

    • 0:00 - Introducción
    • 1:22 - Lectura de documentos
    • 13:35 - Detección de manchas en el lente de la cámara
    • 17:59 - Actualización de la postura de la mano

    Recursos

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

    Videos relacionados

    WWDC25

    • Descubre las estructuras de aprendizaje automático e IA en las plataformas de 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 este video…

    Hola, soy Megan Williams, ingeniera del equipo de la estructura Vision. Vision, a través de sus API, te permite incorporar el aprendizaje automático en tus apps para casos de uso como la detección de personas y objetos, el seguimiento de poses corporales y de manos, y el análisis de trayectorias.

    Todas estas API se ejecutan íntegramente en el dispositivo, la forma más rápida y segura de realizar tareas de visión por computadora en tu app.

    Las API están disponibles en iOS, macOS, iPadOS, tvOS y visionOS.

    Son más de 31 API para distintos tipos de análisis de imágenes. Y hoy agregamos dos más. En este video, presentamos nuevas API para leer documentos y detectar manchas lentes de cámaras. Y hablaremos de una actualización en la detección de poses de manos.

    Empecemos.

    Actualmente, Vision te permite detectar y extraer líneas de texto de una imagen con RecognizeTextRequest. Es una gran función, pero algunos documentos tienen un formato muy estructurado del que se puede extraer aún más información.

    Por ejemplo, en este volante hay un título, varios párrafos, una lista, una tabla y un código de barras.

    Si solo leo las líneas de texto del documento, pierdo información estructural importante. Por ejemplo, si extraigo solo el texto de esta tabla, no sé cómo están organizadas las filas y columnas. Quiero saber no solo qué dice el texto, sino también cómo está formateado. Este año, Vision incorpora una nueva API para lograr justo eso y mucho más.

    Te presento RecognizeDocumentsRequest. Gracias al reconocimiento de texto en 26 idiomas, esta API permite extraer elementos estructurales e información clave de los documentos. Puede detectar estructuras, como tablas y listas; agrupar líneas de texto en párrafos; detectar códigos legibles por máquina, como códigos QR; e identificar

    datos importantes, como direcciones de correo, teléfonos o URL. Estas capacidades te permiten comprender mejor el documento y facilitar el análisis con menos líneas de código.

    Supongamos que tienes una tienda y quieres que los clientes que entren puedan suscribirse a tu boletín mensual.

    Para ello, ponemos una hoja de registro donde pueden escribir su nombre, correo electrónico y número de teléfono.

    Quiero crear una app que escanee la hoja y genere un contacto por cada persona.

    Antes usaba RecognizeTextRequest para extraer el texto; eso devolvía cada celda de la tabla como un objeto independiente.

    Si quería crear un contacto por persona, tenía que usar la posición de cada cuadro de texto para saber qué celdas iban en la misma fila.

    Ahora puedo usar RecognizeDocumentsRequest, que analiza la tabla por mí. Las celdas se agrupan automáticamente en filas, lo que facilita mucho procesar la hoja de registro. Veamos cómo usar la API.

    RecognizeDocumentsRequest funciona como otras solicitudes de Vision. Para acceder una guía completa, revisa Descubre Swift Enhancements en la estructura Vision de la WWDC 2024. Aquí haré un repaso rápido.

    En Vision, procesamos imágenes mediante solicitudes. La solicitud determina el tipo de análisis de imagen que nos gustaría realizar. Al ejecutar la solicitud sobre una imagen obtenemos una o más observaciones. Estas observaciones nos dan información de la imagen, por ejemplo, dónde están los rostros.

    RecognizeDocumentsRequest genera un DocumentObservation.

    Los DocumentObservation describen el contenido y la estructura de tu documento. Actualmente, al ejecutar RecognizeDocumentsRequest, Vision devuelve una observación del documento por imagen. La observación tiene una estructura jerárquica: un documento puede contener texto, tablas, listas o códigos de barras.

    Las tablas se componen de celdas, y las listas se componen de ítems, los cuales también pueden contener otros elementos, como texto. Ahora, podemos usar la observación de un documento para analizar nuestra hoja de registro.

    Primero, queremos extraer la estructura de la tabla del documento.

    Voy a tomar una foto del documento con mi iPad.

    Mi app usa RecognizeDocumentsRequest para detectar la tabla y resaltarla en pantalla.

    Veamos el código.

    Tengo la imagen recién capturada y quiero extraer la tabla. Primero crearé un RecognizeDocumentsRequest y luego ejecutaré la solicitud sobre la imagen. Recibo un DocumentObservation. Puedo acceder a la propiedad tables del documento para extraer las tablas de esta imagen.

    En este caso, espero que mi documento solo contenga una tabla, así que devolveré la primera que se detecte.

    Ahora que detecté la tabla, veamos qué contiene.

    Una tabla está formada por una matriz 2D de celdas Puedes acceder a estas celdas por filas o por columnas.

    También definimos el límite de la tabla como boundingRegion, lo que te da las coordenadas de la tabla dentro de la imagen. Cada celda tiene una propiedad que indica a qué fila y columna pertenece.

    Como una celda puede abarcar varias filas o columnas, ese valor se expresa como un rango.

    El contenido de la celda es un contenedor; incluye cualquier elemento presente en un documento (texto, tablas, listas o códigos de barras).

    Los contenedores también tienen su boundingRegion.

    Debido a que extraje los datos como tabla, puedo leer mi hoja de registro fila por fila.

    Necesito revisar el contenido de cada celda para extraer el texto.

    Veamos el texto con más detalle. Hay varias formas de visualizar el texto de un contenedor.

    La propiedad transcript entrega el texto del contenedor en una sola cadena. La propiedad lines es otra forma de ver el texto como un arreglo de líneas.

    Las líneas pueden agruparse en párrafos, lo que refleja cómo se leería el texto de forma natural. Si una línea no pertenece a ningún grupo, se considera un párrafo independiente. También podemos obtener una lista de palabras individuales, aunque no se admite en ciertos idiomas, como chino, japonés, coreano y tailandés.

    Por último, las detectedData son cadenas especiales dentro del texto que representan información clave, como correos, fechas o URL. Vision usa la nueva estructura DataDetection, que permite escanear cadenas en busca de datos importantes.

    Se pueden detectar números de teléfono, correos electrónicos y direcciones postales de varios formatos.

    Las URL se detectan como enlaces, y las horas y fechas, como eventos de calendario.

    Las mediciones y sus unidades se detectan juntas, al igual que los montos en dólares y su moneda.

    Números de seguimiento, identificadores de pago y números de vuelo también pueden identificarse.

    Con todas estas capacidades, ampliemos nuestra app de ejemplo. Ya detectamos una tabla y ahora podemos extraer su texto para crear nuestra lista de contactos. Podemos leer los nombres de la primera columna y usar la detección de datos para identificar la información de contacto en las demás columnas.

    Actualicemos nuestro código de muestra. Voy a analizar la tabla que detecté antes y generar una lista de contactos.

    Para cada contacto, quiero un nombre, un correo y, opcionalmente, un número de teléfono.

    Voy a iterar las filas de la tabla y crear un contacto por cada fila.

    La mayoría de las hojas de registro tienen el nombre en la primera columna, así que obtendré la primera celda.

    Puedo leer el texto de esa celda para obtener el nombre del contacto.

    Usaré transcript para conseguir todo el texto de la celda como una cadena.

    Ahora buscaré otra información de contacto en la misma fila.

    Primero iteraré las celdas restantes.

    Luego puedo buscar detectedData en cada celda.

    Iteremos los datos para ver qué hemos detectado.

    Puedo usar los detalles de cada dato para encontrar correos y teléfonos específicamente.

    Si encuentro un correo, puedo crear un contacto con la información detectada.

    Ahora puedo extraer fácilmente una lista de contactos de mi hoja de registro.

    Voy a pasar esa lista a mi vista de contactos, que mostrará los contactos en la app. Veamos los contactos.

    Bien.

    Añadí la opción de exportar la tabla como cadena separada por tabulaciones.

    Así puedo copiar la tabla y pegarla en apps compatibles como Notas y Numbers.

    Para ver el código de esta función, descarga la app de muestra desde el sitio de Apple Developer. En resumen, RecognizeDocumentsRequest ofrece a los desarrolladores una forma sencilla de extraer información importante de los documentos.

    La API brinda una interfaz simple para entender la estructura del documento, lo que permite analizar fácilmente texto formateado, como tablas, e identificar información relevante, como correos y teléfonos.

    Ahora hablemos de otra novedad de Vision este año:

    la detección de manchas en la lente de la cámara.

    Al tomar el dispositivo para escanear la hoja de registro, puedo ensuciar la lente con el dedo sin querer.

    Esto produce fotos de baja calidad, que podrían ser difíciles de procesar.

    Por suerte, Vision trae este año una nueva función. La clase DetectLensSmudgeRequest puede identificar si la imagen se tomó con la lente manchada, para que puedas pedir al usuario que la limpie o que use otra foto. Puedes usar esta solicitud para asegurarte de procesar solo imágenes de alta calidad en tu app.

    DetectLensSmudgeRequest funciona como otras solicitudes en la estructura Vision. Puedes ejecutar la solicitud sobre una imagen y obtendrás una observación de mancha.

    La observación incluye un valor de confianza que indica la probabilidad de que la imagen esté manchada.

    El valor de confianza siempre está entre 0 y 1.

    Valores cercanos a 1 indican alta probabilidad de mancha.

    Un valor de cero indica que es muy probable que la imagen no esté manchada. Veamos cómo usar esto en el código.

    Tengo una imagen y quiero saber si está manchada.

    Primero crearé una DetectLensSmudgeRequest.

    Luego ejecutamos la solicitud sobre la imagen.

    Esto genera una observación de mancha.

    El valor de confianza de la observación nos dice la probabilidad de que la imagen esté manchada.

    Podemos comparar ese valor con un umbral para descartar imágenes de baja calidad.

    Aquí elegí 0.9. Consideraremos manchadas las imágenes con un valor mayor que el umbral y no las procesaremos.

    Tú puedes elegir el umbral que mejor funcione para tu app. Aquí hay tres documentos con distintos valores de confianza de mancha.

    Un umbral alto te permitirá procesar más imágenes, pero su calidad podría ser inferior.

    Un umbral más bajo rechazará más imágenes, algunas de ellas falsos positivos, por lo que podrías descartar imágenes buenas.

    Algunas imágenes sin lente manchada también pueden dar un valor de mancha alto.

    Por ejemplo, esta imagen tiene desenfoque por movimiento de la cámara, que puede producir fotos que parecen tomadas con la lente manchada. Lo mismo ocurre con fotos de larga exposición o imágenes de nubes o niebla. Es importante notar que, aunque una foto tenga un puntaje de mancha bajo, eso no garantiza que sea de alta calidad. Por ejemplo, esta imagen de una rejilla no está manchada, pero tampoco es una foto interesante o atractiva que quiera compartir con amigos. Vision ofrece otras API que puedes combinar con DetectLensSmudgeRequest para hallar fotos de alta calidad.

    Si tu imagen contiene caras, puedes usar DetectFaceCaptureQualityRequest para obtener buenas capturas. Esta solicitud da un puntaje de calidad de captura por cara, también entre 0 y 1, en el que 1 es la mejor calidad.

    Si la imagen no tiene rostros, usa CalculateImageAestheticScoresRequest para obtener un puntaje global.

    Esta solicitud también puede identificar imágenes de utilidad, fotos bien tomadas pero con contenido poco memorable, como documentos o recibos. Puedes conocer más sobre CalculateImageAestheticScoresRequest en la charla de Vision de la WWDC 2024.

    Antes de cerrar, mencionemos una actualización en la detección de poses de mano.

    Desde 2020, los desarrolladores pueden usar DetectHandPoseRequest para ubicar las 21 articulaciones de una mano.

    Las articulaciones se devuelven en un HandPoseObservation.

    Esta tecnología impulsa clasificadores de poses de mano y de acciones con ML, que permiten reconocer poses y gestos.

    Por ejemplo, puedes entrenar estos modelos para reconocer gestos que controlen funciones de tu app. Para saber cómo entrenar un clasificador de poses de mano, consulta Clasificar las poses y acciones de las manos con CreateML de la WWDC 2021.

    Este año, Vision reemplaza el modelo de detección de poses de mano por uno más pequeño y moderno.

    El nuevo modelo sigue detectando 21 articulaciones, pero con mayor precisión, menos memoria y menor latencia. Aunque la precisión mejora, las articulaciones no se devuelven en la misma posición que en el modelo anterior. Por lo tanto, si ya entrenaste un clasificador de poses o acciones de mano con ML, te sugerimos reentrenarlo con el nuevo modelo para ganar precisión.

    Para recapitular las novedades de este año, presentamos dos nuevas solicitudes. Tenemos RecognizeDocumentsRequest para la comprensión estructurada de documentos y DetectCameraLensSmudgeRequest para detectar fotos tomadas con lente manchada. También tenemos un modelo de detección de poses de mano actualizado.

    Puedes descargar la app de muestra desde el sitio de Apple Developer. Y no olvides echar un vistazo a Descubre Swift Enhancements en la estructura Vision, de la WWDC 2024, para conocer más API que ofrece Vision. Gracias por ver este video.

    • 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 - Introducción
    • La estructura Vision proporciona las API para integrar el aprendizaje automático en apps en varias plataformas de Apple. Con estas API se pueden realizar tareas como detección de personas y objetos, seguimiento posicional y análisis de trayectorias, todo ello ejecutándose en el dispositivo para lograr un rendimiento y una seguridad óptimos. La estructura actualmente incluye 31 API, con dos nuevas incorporaciones para la lectura de documentos y la detección de manchas en el lente de la cámara, y una actualización para el reconocimiento de la postura de la mano.

    • 1:22 - Lectura de documentos
    • Hay una nueva API llamada “RecognizeDocumentsRequest” que se basa en la funcionalidad existente “RecognizeTextRequest”, con la cual puedes extraer información estructurada de los documentos. Con “RecognizeDocumentsRequest”, ahora puedes procesar imágenes y obtener una estructura jerárquica del contenido del documento. La API puede detectar varios elementos, como tablas, listas, párrafos y códigos legibles por máquinas como códigos QR. Se trata de mucho más que extraer texto; detecta el formato del texto, así es mucho más fácil analizar e interpretar los datos. Por ejemplo, piensa en una hoja de registro con nombres, direcciones de correo electrónico y números de teléfono. Antes, el proceso para extraer esta información era complejo y requería la determinación manual de las relaciones de celda. Sin embargo, con 'RecognizeDocumentsRequest', el sistema analiza automáticamente la tabla y agrupa las celdas en filas, simplificando el proceso de creación de contactos a partir de la hoja escaneada.

    • 13:35 - Detección de manchas en el lente de la cámara
    • La nueva funcionalidad de Vision de detección de manchas en el lente de la cámara, “DetectLensSmudgeRequest”, reconoce imágenes manchadas con un puntaje de confianza entre 0 y 1. Puedes establecer umbrales para filtrar imágenes de mala calidad; los valores de confianza más altos indican una imagen falsa. Los umbrales más altos procesan más imágenes, pero pueden incluir las de menor calidad, mientras que los umbrales más bajos rechazan más imágenes, e incluyen potencialmente las de buena calidad. Factores como el desenfoque por movimiento de la cámara, la exposición prolongada, las nubes o la niebla a veces pueden provocar falsos positivos. Además, Vision ofrece otras API para evaluar la calidad de la imagen, como “DetectFaceCaptureQualityRequest” para imágenes con rostros y “CalculateImageAestheticScoresRequest” para imágenes sin rostros, como documentos o recibos.

    • 17:59 - Actualización de la postura de la mano
    • La estructura Vision también tiene un modelo actualizado de reconocimiento de la postura de la mano. El original, disponible desde 2020, identifica 21 articulaciones de una mano para el reconocimiento de gestos en apps. El nuevo modelo es más pequeño, rápido y preciso, pero usa ubicaciones de las articulaciones distintas, por lo que hay que volver a entrenar los clasificadores existentes.

Developer Footer

  • Videos
  • WWDC25
  • Lee documentos con la estructura 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