Hoje lançamos o [Virtual Try-On Safety Classifier](https://huggingface.co/Genlook/tryon-safety-classifier) no Hugging Face sob a licença Apache-2.0. Ele analisa as fotos de um produto e responde a uma única pergunta: se um cliente provar essa peça, o que a foto gerada vai mostrar? 

Nós o desenvolvemos para filtrar produtos antes que cheguem a um modelo de [provador virtual](/glossary/virtual-try-on). Qualquer serviço de provador que aceite imagens variadas de produtos enfrenta o mesmo problema, por isso estamos publicando o modelo, a política de classificação e os testes de avaliação.

![Oito fotos de produtos do catálogo de demonstração da Genlook com o resultado do classificador: um top esportivo, bermuda de surf e jaqueta cropped estão ok; três roupas de banho são reveladoras; uma coleira para cachorro está ok e classificada como pet; uma peruca está ok e classificada como não é roupa.](/blog-images/tryon-safety-classifier-examples.webp)

## Por que os detectores NSFW não funcionam para provadores virtuais

Um provador virtual pega a foto de uma pessoa e a foto de um produto, e devolve a imagem dessa pessoa vestindo a peça. O risco está no resultado final, mas a única coisa que você pode verificar antes da geração é o produto em si.

Detectores NSFW genéricos julgam apenas os pixels da imagem que recebem. E essa é a abordagem errada para uma foto de produto:

- **Uma foto flat lay (produto estendido) de lingerie não contém nudez.** Mas o resultado do provador virtual mostra a pessoa de lingerie.
- **Adesivos para mamilos em um fundo branco são apenas alguns centímetros de tecido.** O resultado do provador virtual é um topless.
- **Uma máscara de fetiche em um manequim não é explícita.** Mas continua sendo um produto de conotação sexual.
- **Uma modelo fotografada nua usando apenas um colar é uma imagem explícita.** Mas o colar é um produto normal.

Quando testamos três modelos abertos populares de classificação NSFW (NudeNet, nsfw-vit e Falconsai) em um lote inicial de 141 produtos já categorizados, eles concordaram com nossos rótulos em apenas 48% a 62% dos casos. O ShieldGemma 2 do Google, configurado com políticas personalizadas para essa questão exata, chegou a 71,6%. Os modelos funcionam como deveriam. Eles só respondem a uma pergunta diferente.

## O que o classificador prevê

Todo produto recebe uma classificação de nível, ordenada por gravidade:

| Nível | O que o resultado do provador virtual mostra | Exemplos |
|---|---|---|
| `ok` | A pessoa vestida normalmente | Roupas do dia a dia, moda fitness, roupas de mergulho, cosplays comportados, acessórios |
| `revealing` | Cobertura típica de moda praia | Biquínis, maiôs, cuecas, cintas modeladoras, micro shorts, roupas de festival |
| `lingerie` | Calcinhas e sutiãs, sem exposição íntima | Sutiãs, calcinhas, conjuntos de lingerie, bodys, ligas, corsets usados como lingerie |
| `adult` | Áreas íntimas expostas ou produto de cunho sexual | Micro biquínis, adesivos de mamilo, peças transparentes, sutiãs meia-taça (abertos), roupas BDSM e de fetiche, fantasias sexuais |

Três classificações extras acompanham o nível principal:

- **subject**: `human_clothing`, `pet` ou `not_clothing`. Um peitoral de cachorro e um acessório de bondage podem parecer iguais em uma foto de produto (packshot). Perucas, cosméticos e artigos de casa são marcados como não sendo roupas.
- **swimwear**: `regular`, `near_micro` ou `micro`. Regular e near micro caem em `revealing`; micro é `adult`. A palavra "micro biquíni" no título do produto não define nada; as fotos sim.
- **ravewear**: true ou false, para looks de festival. Isso não muda o nível, mas moda de festivais é onde o modelo tem menos certeza, então é uma informação útil de se ter.

Os níveis descrevem a imagem final, e não o produto ou a loja em si. A regra de bloqueio ideal depende do seu público: uma marca de moda íntima vai liberar `lingerie`, enquanto um marketplace infantil pode bloquear `revealing`. O modelo também retorna um sinalizador de bloqueio (`blocked`), acionado quando a probabilidade de `adult` for igual ou superior a 0,3. Isso ajuda a barrar mais produtos adultos em troca de um pequeno aumento de falsos positivos.

## Os casos difíceis

A maioria dos produtos é fácil de classificar. A política existe justamente para aqueles que não são, e cada regra nasceu de um produto real que exigiu uma decisão:

| Produto | Nível | O motivo |
|---|---|---|
| Top esportivo vendido como roupa de academia | ok | Usado como blusa em público |
| Mesmo corte vendido como bralette de lingerie | lingerie | Roupa íntima feminina |
| Sutiã de renda com mamilos claramente visíveis nas fotos | adult | Transparência revelando mamilos |
| Cuecas boxer masculinas | revealing | Nível de exposição igual à moda praia |
| Roupa de mergulho, camisa com proteção solar, burkini | ok | Cobertura total |
| Calça de couro, vestido com aspecto de látex | ok | Peças de moda |
| Macacão de couro ou látex vendido como fetiche | adult | Traje de fetiche |
| Arnês de couro no peito usado sobre uma camisa | ok | Acessório por cima da roupa |
| Arnês de tiras diretamente sobre a pele nua | adult | Artigo de fetiche |
| Máscara de animal para o Halloween | ok | Fantasia |
| Máscara de pup play | adult | Máscara de fetiche |
| Body chain (corrente corporal) usado sobre um vestido | ok | Joia por cima da roupa |
| Body chain sobre o tronco nu | adult | Usado sem nada por baixo |
| Cosplay com cobertura equivalente a roupas normais | ok | Fantasia |
| Roupa de anime estilo lingerie | adult | Cosplay sexualizado |

A política completa, com as regras para cada nível e tag, está publicada no arquivo [LABELLING_POLICY.md](https://huggingface.co/Genlook/tryon-safety-classifier/blob/main/LABELLING_POLICY.md) junto com os pesos do modelo.

Os exemplos no topo deste post mostram o modelo final rodando em nosso próprio catálogo de demonstração. O maiô de manga longa é um caso interessante: tem mangas compridas e zíper frontal, mas a parte de baixo tem corte cavado. O provador virtual exibe o nível de exposição de moda praia, então o modelo classifica como `revealing`. Já o top esportivo frente única, logo ao lado no catálogo, crava `ok` com precisão de 0,97.

## Como desenvolvemos o modelo

**Dados.** Cerca de 2.600 produtos (aproximadamente 5.000 fotos) de catálogos de lojas virtuais, escolhidos para abranger os casos mais difíceis: lingeries, micro biquínis, fetiche, roupas de festival, cosplay e moda pet, além de uma grande fatia de moda casual do dia a dia para que o modelo não bloqueie em excesso. Usamos apenas fotos dos produtos, nunca imagens de clientes. Qualquer produto que pudesse mostrar um menor de idade em contexto revelador ou sexual foi sumariamente removido do conjunto de dados.

**Rótulos.** A IA Claude classificou cada produto depois de analisar todas as fotos e ler o título e a descrição, seguindo estritamente a política estabelecida. Um revisor humano verificou exemplos de calibração para todos os níveis e ajustou os casos limítrofes, e essas decisões voltaram para atualizar as regras da política. Essa política passou por diversas versões; a categoria `lingerie`, por exemplo, foi separada de `adult` assim que ficou claro que a maior parte da moda íntima não é explícita.

**Modelo.** A base é o modelo SigLIP 2 (so400m, patch 16, 384 px) do Google, também sob licença Apache-2.0. Disponibilizamos duas variantes:

| Variante | Tamanho | O que é |
|---|---|---|
| finetuned (padrão) | aprox. 0,9 GB | Os últimos 6 blocos do transformer e o pooling head treinados de ponta a ponta, com quatro camadas lineares (linear heads) |
| frozen | aprox. 120 KB sobre o SigLIP 2 | A torre de visão original, com camadas logísticas em cima das médias e máximos dos embeddings da foto |

A pontuação de um produto leva em conta todas as suas fotos juntas, pois o que uma foto esconde, muitas vezes a outra mostra (uma vista traseira, um detalhe no tecido).

Chegamos a testar um LLM de ponta orientado pela mesma política. A precisão chegou perto, mas cada chamada levava cerca de 1,6 segundo e ainda exigia uma rota de fuga (fallback) para lidar com timeouts. Já um classificador de visão computacional processa cada foto em dezenas de milissegundos usando uma GPU, entrega a mesma resposta todas as vezes e pode ser treinado novamente sempre que a política mudar.

## A eficiência do modelo

Usamos validação cruzada k-fold (5 grupos) em 2.596 produtos: cada item recebe uma nota de um modelo que nunca o viu durante a fase de treinamento.

| | finetuned | frozen |
|---|---|---|
| Precisão, 4 níveis | 94,6% | 94,2% |
| Produtos adultos não identificados, flag `blocked` | 34 de 534 | 39 de 534 |
| Falsos positivos (adulto), flag `blocked` | 52 | 55 |
| Recall em lingerie | 90% | 89% |
| Precisão no assunto (subject) | 99,2% | |
| Precisão da tag swimwear | 90,0% | |

Por grupo de produto (finetuned, nível principal):

| Grupo | Produtos | Precisão |
|---|---|---|
| Catálogos de moda casual (dia a dia) | 1.032 | 97,5% |
| Cordas e bondage | 75 | 100% |
| Marcas de moda praia | 230 | 95,2% |
| Marcas de lingerie | 120 | 94,2% |
| Anime e cosplay | 63 | 93,7% |
| Catálogos de fetiche, lingerie e pet | 631 | 92,6% |
| Moda praia exótica e micro | 330 | 91,8% |
| Moda para festivais e raves | 115 | 85,2% |

Autênticos micro biquínis: detectamos 91 de 95 peças.

Esse conjunto de testes é intencionalmente difícil. Nos catálogos de moda para o dia a dia, o tipo que a grande maioria das lojas vende, a precisão bate os 97,5%.

## Limitações

- **Lingeries transparentes são a linha mais tênue.** O que separa `lingerie` de `adult` é a visibilidade clara de mamilos ou genitais, e existem produtos extremamente parecidos dos dois lados da fronteira. Grande parte dos erros residuais está aqui.
- **Moda para festivais é o ponto mais fraco.** Meias arrastão, tecidos telados (mesh) e pedrarias induzem o modelo a classificar o item como `adult`.
- **Baseado na fotografia do e-commerce ocidental.** Pode haver uma precisão menor em estilos fotográficos muito diferentes.
- **A ferramenta classifica produtos, não pessoas.** Não use a ferramenta para identificar pessoas ou embasar decisões sobre elas.

## Como utilizar

```python
# pip install torch open_clip_torch safetensors huggingface_hub pillow
from huggingface_hub import hf_hub_download
import importlib.util

spec = importlib.util.spec_from_file_location(
    "tryon_safety",
    hf_hub_download("Genlook/tryon-safety-classifier", "tryon_safety.py"),
)
tryon_safety = importlib.util.module_from_spec(spec)
spec.loader.exec_module(tryon_safety)

clf = tryon_safety.TryOnSafetyClassifier.from_pretrained(
    "Genlook/tryon-safety-classifier", revision="v1.0"
)
pred = clf.predict(["front.jpg", "back.jpg"])  # todas as fotos de um produto
print(pred.level, pred.blocked, pred.subject, pred.swimwear, pred.ravewear)
```

Trave a versão usando `revision="v1.0"` para que uma eventual atualização não altere seus resultados sem o seu consentimento. A inferência exige apenas `open_clip` e `torch`, e os pesos estão no formato safetensors.

Falsos positivos, falsos negativos e ideias para a próxima versão são sempre bem-vindos na aba Discussions do [repositório do modelo](https://huggingface.co/Genlook/tryon-safety-classifier).

## O que isso significa para a Genlook

A [API de Try-On da Genlook](https://platform.genlook.app) já verifica cada produto antes de gerar o provador virtual: produtos adultos e de fetiche são barrados automaticamente, enquanto roupas de banho, íntimas e lingeries exigem uma conta paga para serem processadas. Uma tentativa recusada retorna um erro `CONTENT_POLICY_VIOLATION` e o crédito da requisição é devolvido ([referência de erros](/docs/tryon-api/errors)). Foi exatamente para fazer essa filtragem que desenvolvemos este classificador.

Para os desenvolvedores, isso significa que a segurança é nativa da API e não mais um problema para se resolver por fora. Um único endpoint resolve qualquer tipo de produto, custando US$ 0,02 por provador virtual num plano fixo e caindo para US$ 0,015 dependendo do volume (ou US$ 0,04 via faturamento avulso). E as novas contas ainda começam com créditos gratuitos.

## Resumo

- **O lançamento:** um classificador licenciado sob Apache-2.0 baseado no SigLIP 2, que prevê o resultado que o provador virtual terá a partir das fotos do próprio produto.
- **Por que existe:** detectores NSFW analisam apenas os pixels da foto de um produto. Essa é a abordagem errada para provadores virtuais. Três desses modelos alcançaram apenas 48% a 62% de precisão nos nossos rótulos de teste.
- **Saídas (Outputs):** quatro níveis principais (ok, revealing, lingerie e adult), além de tags de assunto (subject), moda praia (swimwear) e moda festival (ravewear).
- **Precisão:** 94,6% considerando os quatro níveis em uma base de dados intencionalmente difícil, 97,5% na moda do dia a dia e 100% em artigos de cordas e bondage.
- **Aberto:** os pesos, o código de inferência e a política de classificação são públicos. A base de dados do treinamento, não.

---

_[Baixe o modelo no Hugging Face](https://huggingface.co/Genlook/tryon-safety-classifier), [gere sua chave de API em platform.genlook.app](https://platform.genlook.app) ou [adicione o provador virtual na sua loja](/get-started)._

<Faq>
  <FaqItem
    question="O que é o Classificador de Segurança para Provador Virtual?"
    answer="É um classificador de imagens open source lançado pela Genlook sob a licença Apache-2.0. Ele analisa as fotos de um produto e prevê qual será o resultado do provador virtual dessa peça: ok, revelador, lingerie ou adulto. Ele também marca a categoria (roupas humanas, pet ou o que não é roupa), a cobertura de trajes de banho e moda de festivais."
  />
  <FaqItem
    question="Por que não usar um detector NSFW para o provador virtual?"
    answer="Detectores NSFW julgam os pixels da imagem fornecida. No caso do provador virtual, a foto do produto não reflete a entrega final: uma foto flat lay de lingerie não tem nudez, mas o provador mostrará o cliente de lingerie. Nos nossos testes internos, três classificadores NSFW abertos acertaram em apenas 48% a 62% dos casos."
  />
  <FaqItem
    question="Qual é o nível de precisão?"
    answer="A precisão bate 94,6% considerando os quatro níveis, baseada em uma validação cruzada k-fold em 2.596 produtos complexos, subindo para 97,5% no caso de catálogos de moda casual. Ao aplicar a flag de bloqueio, o modelo falhou em reter apenas 34 de 534 produtos adultos."
  />
  <FaqItem
    question="Posso usar o modelo comercialmente?"
    answer="Sim. O modelo opera sob a licença Apache-2.0, assim como sua base SigLIP 2. Os dados usados no treinamento, no entanto, não foram divulgados."
  />
  <FaqItem
    question="A API de provador virtual da Genlook possui verificações de segurança próprias?"
    answer="Sim. Todos os produtos passam por uma checagem antes que o resultado do provador seja liberado. Produtos adultos ou de fetiche são negados, enquanto itens de moda praia e lingerie exigem uma conta paga. Os créditos são reembolsados em caso de recusa. Lojistas do segmento adulto podem solicitar acesso através de support@genlook.app."
  />
</Faq>