Skip to content
Tutoriales5 min de lectura

Clasificación de imágenes con Potato

Configura la clasificación de imágenes en Potato mostrando las imágenes con instance_display y recogiendo etiquetas con esquemas radio y multiselect, con controles de calidad incluidos.

Potato Team

Tarde o temprano, la mayoría de los proyectos de visión por computadora necesitan un montón de imágenes etiquetadas, y alguien tiene que etiquetarlas. Tanto si clasificas fotos de productos como si filtras contenido o categorizas imágenes médicas, Potato se encarga de la interfaz para que puedas concentrarte en las etiquetas. Este tutorial cubre las configuraciones habituales: clasificación de etiqueta única y multietiqueta, estructuras de categorías anidadas y los controles de calidad que mantienen fiables las tareas con imágenes.

Mostrar la imagen y después hacer la pregunta

En Potato, clasificar y dibujar son trabajos distintos, y confundirlos es el primer error habitual. instance_display pone la imagen en pantalla. annotation_schemes hace la pregunta. El tipo image_annotation sirve para dibujar cajas y máscaras sobre una imagen, así que una tarea de clasificación no lo usa en absoluto.

yaml
annotation_task_name: "Product Image Classification"
task_dir: "."
 
data_files:
  - data/products.json
 
item_properties:
  id_key: product_id
  text_key: image_url
 
instance_display:
  fields:
    - key: image_url
      type: image
      label: "Product image"
      display_options:
        max_width: 600
        zoomable: true
 
annotation_schemes:
  - annotation_type: radio
    name: category
    description: "What type of product is shown?"
    labels:
      - Electronics
      - Clothing
      - Home & Garden
      - Sports & Outdoors
      - Books & Media
      - Other
    sequential_key_binding: true
 
output_annotation_dir: annotation_output/
export_annotation_format: jsonl

sequential_key_binding asigna a las seis etiquetas las teclas del 1 al 6. En una tarea que consiste en un vistazo y un clic, el teclado aporta la mayor parte del ritmo de trabajo.

La interfaz muestra la imagen con las etiquetas de categoría debajo:

Interfaz de clasificación de imágenes con etiquetas de categoría y atajos de tecladoLa interfaz de anotación de imágenes con una imagen de producto, etiquetas de clasificación y atajos de teclado

Formato de datos

Crea data/products.json:

json
{"product_id": "P001", "image_url": "/images/products/laptop.jpg"}
{"product_id": "P002", "image_url": "/images/products/tshirt.jpg"}
{"product_id": "P003", "image_url": "/images/products/garden_tools.jpg"}
{"product_id": "P004", "image_url": "https://example.com/images/basketball.jpg"}

Las imágenes pueden ser rutas locales dentro del directorio de la tarea o URL absolutas. text_key apunta al campo que contiene la ruta, que es el campo que Potato entrega a la visualización.

Clasificación multietiqueta

Cuando una imagen pertenece a varias categorías a la vez, usa multiselect:

yaml
annotation_schemes:
  - annotation_type: multiselect
    name: attributes
    description: "Select all attributes that apply to this image"
    labels:
      - Contains people
      - Outdoor scene
      - Indoor scene
      - Contains text
      - Product photo
      - Lifestyle photo
      - Close-up shot
      - Wide angle

Categorías anidadas

Potato no tiene un tipo de etiqueta anidada para botones de opción, así que una taxonomía de dos niveles son dos esquemas. Cada esquema necesita sus propias labels, y la lista de subcategorías tiene que cubrir todas las categorías principales:

yaml
annotation_schemes:
  - annotation_type: radio
    name: main_category
    description: "Primary category"
    labels:
      - Apparel
      - Electronics
      - Home
 
  - annotation_type: radio
    name: subcategory
    description: "Subcategory within the primary category"
    labels:
      - Tops
      - Bottoms
      - Footwear
      - Phones & Tablets
      - Computers
      - Audio
      - Furniture
      - Kitchen
      - Decor

Cuando la segunda lista se haría larga, hierarchical_multiselect la reúne en un solo widget en lugar de dos esquemas.

Controles de calidad junto a la clasificación

yaml
annotation_schemes:
  - annotation_type: radio
    name: category
    description: "Product category"
    labels: [Electronics, Clothing, Home, Other]
 
  - annotation_type: radio
    name: image_quality
    description: "Is this image suitable for the product catalog?"
    labels:
      - name: Approved
        tooltip: "Clear, well-lit, product is visible"
      - name: Needs review
        tooltip: "Minor issues but potentially usable"
      - name: Rejected
        tooltip: "Poor quality, wrong product, or inappropriate"
 
  - annotation_type: multiselect
    name: quality_issues
    description: "If not approved, what issues are present?"
    labels:
      - Blurry or out of focus
      - Poor lighting
      - Wrong product shown
      - Watermark or text overlay
      - Inappropriate content
      - Multiple products in frame

La orientación de cada etiqueta va en tooltip, que es la clave que leen las etiquetas. Si la escribes como description: en una etiqueta, el texto no aparece en ningún sitio donde el anotador pueda verlo.

Ejemplo completo

yaml
annotation_task_name: "E-commerce Image Classification"
task_dir: "."
 
data_files:
  - data/images.json
 
item_properties:
  id_key: sku
  text_key: image_path
 
instance_display:
  fields:
    - key: image_path
      type: image
      label: "Product image"
      display_options:
        max_width: 700
        zoomable: true
 
annotation_schemes:
  - annotation_type: radio
    name: primary_category
    description: "Select the main product category"
    labels:
      - Electronics
      - Clothing & Accessories
      - Home & Living
      - Beauty & Personal Care
      - Sports & Fitness
      - Toys & Games
      - Other
    sequential_key_binding: true
 
  - annotation_type: multiselect
    name: image_attributes
    description: "Select all that apply"
    labels:
      - White background
      - Lifestyle shot
      - Multiple angles
      - Model wearing or using
      - Size reference included
      - Brand visible
    label_requirement:
      required: false
 
  - annotation_type: radio
    name: listing_ready
    description: "Is this image ready for the product listing?"
    labels:
      - Ready to publish
      - Needs editing
      - Reshoot required
    label_requirement:
      required: true
 
annotation_instructions: |
  ## Image Classification Guidelines
 
  ### Category selection
  Choose the most specific category that fits the product.
 
  ### Image quality
  - Ready to publish: clear, professional, meets standards
  - Needs editing: good photo that needs cropping or color correction
  - Reshoot required: fundamentally unsuitable
 
output_annotation_dir: annotation_output/
export_annotation_format: jsonl

Consejos para la anotación de imágenes

El color y el brillo varían entre monitores, así que, en cualquier tarea en la que eso importe, asegúrate de que los anotadores trabajen con pantallas razonablemente calibradas. Incluye imágenes de ejemplo en tus guías en lugar de describir las categorías con palabras; una imagen zanja más discusiones que un párrafo. Deja por escrito qué hacer con las imágenes ambiguas, porque las habrá. Y de vez en cuando, haz que el equipo etiquete el mismo lote y compara los resultados, para detectar pronto cualquier deriva.

Para los detalles de implementación, consulta la documentación de anotación de imágenes.

Próximos pasos


Consulta la documentación completa de anotación de imágenes en Anotación de imágenes.