# Usando OpenCLIP no Hugging Face

[OpenCLIP](https://github.com/mlfoundations/open_clip) é uma implementação de código aberto do CLIP da OpenAI.

## Explorando o OpenCLIP no Hub

Você pode encontrar modelos OpenCLIP filtrando à esquerda na [página de modelos](https://huggingface.co/models?library=open_clip&sort=trending).

Os modelos OpenCLIP hospedados no Hub possuem um model card com informações úteis sobre os modelos. Graças à integração do OpenCLIP com o Hugging Face Hub, você pode carregar modelos OpenCLIP com poucas linhas de código. Você também pode implantar esses modelos usando [Inference Endpoints](https://huggingface.co/inference-endpoints).

## Instalação

Para começar, você pode seguir o [guia de instalação do OpenCLIP](https://github.com/mlfoundations/open_clip#usage). Você também pode usar a seguinte instalação em uma linha através do pip:

```
$ pip install open_clip_torch
```

## Usando modelos existentes

Todos os modelos OpenCLIP podem ser carregados facilmente do Hub:

```py
import open_clip

model, preprocess = open_clip.create_model_from_pretrained('hf-hub:laion/CLIP-ViT-g-14-laion2B-s12B-b42K')
tokenizer = open_clip.get_tokenizer('hf-hub:laion/CLIP-ViT-g-14-laion2B-s12B-b42K')
```

Uma vez carregado, você pode codificar a imagem e o texto para realizar [classificação de imagem zero-shot](https://huggingface.co/tasks/zero-shot-image-classification):

```py
import torch
from PIL import Image
import requests

url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
image = preprocess(image).unsqueeze(0)
text = tokenizer(["a diagram", "a dog", "a cat"])

with torch.no_grad(), torch.cuda.amp.autocast():
    image_features = model.encode_image(image)
    text_features = model.encode_text(text)
    image_features /= image_features.norm(dim=-1, keepdim=True)
    text_features /= text_features.norm(dim=-1, keepdim=True)

    text_probs = (100.0 * image_features @ text_features.T).softmax(dim=-1)

print("Label probs:", text_probs) 
```

Ele exibe a probabilidade de cada classe possível:

```text
Label probs: tensor([[0.0020, 0.0034, 0.9946]])
```

Se você deseja carregar um modelo específico do OpenCLIP, pode clicar em `Use in OpenCLIP` no cartão do modelo e receber um trecho de código funcional!

## Recursos adicionais

* Repositório [repository](https://github.com/mlfoundations/open_clip) do OpenCLIP
* OpenCLIP [docs](https://github.com/mlfoundations/open_clip/tree/main/docs)
* OpenCLIP [modelos no Hub](https://huggingface.co/models?library=open_clip&sort=trending)

