Skip to content
Tutorials5 min read

Classificação de Imagens com Potato

Configure a classificação de imagens no Potato exibindo as imagens com instance_display e coletando rótulos com esquemas radio e multiselect, incluindo verificações de qualidade.

Potato Team

Mais cedo ou mais tarde, a maioria dos projetos de visão computacional precisa de uma pilha de imagens rotuladas, e alguém tem que fazer a rotulagem. Seja organizando fotos de produtos, filtrando conteúdo ou classificando exames médicos, o Potato cuida da interface para que você possa focar nos rótulos. Este tutorial cobre as configurações mais comuns: classificação de rótulo único e multirrótulo, estruturas de categorias aninhadas e as verificações de qualidade que mantêm as tarefas de imagem confiáveis.

Primeiro mostrar a imagem, depois fazer a pergunta

No Potato, classificar e desenhar são trabalhos diferentes, e confundir os dois é o erro inicial mais comum. instance_display coloca a imagem na tela. annotation_schemes faz a pergunta. O tipo image_annotation serve para desenhar caixas e máscaras sobre uma imagem, então uma tarefa de classificação não o usa.

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 atribui aos seis rótulos as teclas de 1 a 6. Numa tarefa que se resume a uma olhada e um clique, o teclado responde pela maior parte da velocidade.

A interface exibe a imagem com os rótulos de categoria abaixo dela:

Interface de classificação de imagens com rótulos de categoria e atalhos de tecladoA interface de anotação de imagens mostrando a imagem de um produto com rótulos de classificação e atalhos de teclado

Formato dos dados

Crie 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"}

As imagens podem ser caminhos locais dentro do diretório da tarefa ou URLs absolutas. text_key aponta para o campo que contém o caminho, que é o campo que o Potato repassa para a exibição.

Classificação multirrótulo

Quando uma imagem pertence a várias categorias ao mesmo tempo, use 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

Categorias aninhadas

O Potato não tem um tipo de rótulo aninhado para botões de rádio, então uma taxonomia de dois níveis vira dois esquemas. Cada esquema precisa dos seus próprios labels, e a lista de subcategorias tem que cobrir todas as categorias principais:

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

Quando a segunda lista ficar longa, hierarchical_multiselect a reúne em um único widget em vez de dois esquemas.

Verificações de qualidade junto com a classificação

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

A orientação específica de cada rótulo vai em tooltip, que é a chave que os rótulos leem. Se você a escrever como description: em um rótulo, o texto não aparece em nenhum lugar que o anotador consiga ver.

Exemplo 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

Dicas para anotação de imagens

Cor e brilho variam entre monitores, então, para qualquer coisa em que isso importe, certifique-se de que os anotadores estejam usando telas razoavelmente calibradas. Coloque imagens de exemplo nas suas diretrizes em vez de descrever categorias com palavras; uma imagem resolve mais discussões do que um parágrafo. Anote o que fazer com as imagens ambíguas, porque haverá imagens ambíguas. E, de vez em quando, peça à equipe que rotule o mesmo lote e compare, para que o desvio seja detectado cedo.

Para detalhes de implementação, consulte a documentação de anotação de imagens.

Próximos passos


Veja a documentação completa de anotação de imagens em Anotação de Imagens.