# FiftyOne

FiftyOne é um toolkit de código aberto para curadoria, visualização e gerenciamento de dados visuais não estruturados. A biblioteca simplifica fluxos de trabalho centrados em dados, desde a identificação de previsões de baixa confiança até a detecção de amostras de baixa qualidade e a descoberta de padrões ocultos nos seus dados. A biblioteca suporta todos os tipos de dados visuais, de imagens e vídeos a PDFs, nuvens de pontos e malhas.

O FiftyOne suporta detecção de objetos, pontos-chave, polilinhas e esquemas personalizados.

O FiftyOne é integrado ao Hugging Face Hub para que você possa carregar e compartilhar conjuntos de dados do FiftyOne diretamente do Hub.

🚀 Experimente a integração FiftyOne 🤝 Hugging Face no [Colab](https://colab.research.google.com/drive/1l0kzfbJ2wtUw1EGS1tq1PJYoWenMlihp?usp=sharing)!

## Pré-requisitos

Primeiro [faça login com sua conta do Hugging Face](/docs/huggingface_hub/quick-start#login):

```bash
hf auth login
```

Certifique-se de que você tenha `fiftyone>=0.24.0` instalado:

```bash
pip install -U fiftyone
```

## Carregando Conjuntos de Dados Visuais do Hub

Com `load_from_hub()` das utilidades do Hugging Face do FiftyOne, você pode carregar:

- Qualquer dataset do FiftyOne enviado ao hub
- A maioria dos conjuntos de dados baseados em imagens armazenados em arquivos Parquet (que é o padrão para conjuntos de dados enviados ao hub por meio da biblioteca `datasets`)

### Carregando conjuntos de dados do FiftyOne do Hub

Qualquer conjunto de dados enviado ao hub em um dos [formatos comuns suportados](https://docs.voxel51.com/user_guide/dataset_creation/datasets.html#supported-import-formats) da FiftyOne deve ter todas as informações de configuração necessárias em seu repositório de conjunto de dados no hub, para que você possa carregar o conjunto de dados especificando seu `repo_id`. Como exemplo, para carregar o [conjunto de dados de detecção VisDrone](https://huggingface.co/datasets/Voxel51/VisDrone2019-DET):

```python
import fiftyone as fo
from fiftyone.utils import load_from_hub

## load from the hub
dataset = load_from_hub("Voxel51/VisDrone2019-DET")

## visualize in app
session = fo.launch_app(dataset)
```

![FiftyOne VisDrone dataset](/static-proxy?url=https%3A%2F%2Fcdn-uploads.huggingface.co%2Fproduction%2Fuploads%2F63127e2495407887cb79c5ea%2F0eKxe_GSsBjt8wMjT9qaI.jpeg)

Você pode [personalizar o processo de download](https://docs.voxel51.com/integrations/huggingface.html#configuring-the-download-process), incluindo o número de amostras a serem baixadas, o nome do objeto de dataset criado ou se ele será persistido em disco.

Você pode listar todos os conjuntos de dados do FiftyOne disponíveis no Hub usando:

```python
from huggingface_hub import HfApi
api = HfApi()
api.list_datasets(tags="fiftyone")
```

### Carregando Conjuntos de Dados Parquet do Hub com FiftyOne

Você também pode usar a função `load_from_hub()` para carregar conjuntos de dados de arquivos Parquet. As conversões de tipo são tratadas para você, e as imagens são baixadas de URLs, se necessário.

Com esse recurso, [você pode carregar](https://docs.voxel51.com/integrations/huggingface.html#basic-examples) qualquer um dos seguintes:

- [Conjuntos de dados de classificação de imagens compatíveis com FiftyOne](https://huggingface.co/collections/Voxel51/fiftyone-compatible-image-classification-datasets-665dfd51020d8b66a56c9b6f), como [Food101](https://huggingface.co/datasets/ethz/food101) e [ImageNet-Sketch](https://huggingface.co/datasets/songweig/imagenet_sketch)
- Conjuntos de dados de detecção de objetos compatíveis com [FiftyOne](https://huggingface.co/collections/Voxel51/fiftyone-compatible-object-detection-datasets-665e0279c94ae552c7159a2b), como [CPPE-5](https://huggingface.co/datasets/rishitdagli/cppe-5) e [WIDER FACE](https://huggingface.co/datasets/CUHK-CSE/wider_face)
- [Conjuntos de dados de segmentação compatíveis com FiftyOne](https://huggingface.co/collections/Voxel51/fiftyone-compatible-image-segmentation-datasets-665e15b6ddb96a4d7226a380) como [SceneParse150](https://huggingface.co/datasets/zhoubolei/scene_parse_150) e [Sidewalk Semantic](https://huggingface.co/datasets/segments/sidewalk-semantic)
- Conjuntos de dados de legendas de imagens compatíveis com [FiftyOne](https://huggingface.co/collections/Voxel51/fiftyone-compatible-image-captioning-datasets-665e16e29350244c06084505), como [COYO-700M](https://huggingface.co/datasets/kakaobrain/coyo-700m) e [New Yorker Caption Contest](https://huggingface.co/datasets/jmhessel/newyorker_caption_contest)
- Conjuntos de dados de resposta a perguntas visuais compatíveis com [FiftyOne](https://huggingface.co/collections/Voxel51/fiftyone-compatible-vqa-datasets-665e16424ecc8a718156248a), como [TextVQA](https://huggingface.co/datasets/facebook/textvqa) e [ScienceQA](https://huggingface.co/datasets/derek-thomas/ScienceQA)

Como exemplo, podemos carregar os primeiros 1.000 amostras do [conjunto de dados WikiArt](https://huggingface.co/datasets/huggan/wikiart) no FiftyOne com:

```python
import fiftyone as fo
from fiftyone.utils.huggingface import load_from_hub

dataset = load_from_hub(
    "huggan/wikiart",  ## repo_id
    format="parquet",  ## for Parquet format
    classification_fields=["artist", "style", "genre"], ## columns to treat as classification labels
    max_samples=1000,  # number of samples to load
    name="wikiart",  # name of the dataset in FiftyOne
)
```

![WikiArt Dataset](/static-proxy?url=https%3A%2F%2Fcdn-uploads.huggingface.co%2Fproduction%2Fuploads%2F63127e2495407887cb79c5ea%2FPCqCvTlNTG5SLtcK5fwuQ.jpeg)

## Enviando conjuntos de dados do FiftyOne para o Hub

Você pode enviar um conjunto de dados para o hub com:

```python
import fiftyone as fo
import fiftyone.zoo as foz
from fiftyone.utils.huggingface import push_to_hub

## load example dataset
dataset = foz.load_zoo_dataset("quickstart")

## push to hub
push_to_hub(dataset, "my-hf-dataset")
```

Quando você chama `push_to_hub()`, o dataset será enviado para o repositório com o nome de repositório especificado sob seu nome de usuário, e o repositório será criado, se necessário. Um [Dataset Card](./datasets-cards) será gerado automaticamente e preenchido com instruções para carregar o dataset a partir do hub. Você pode enviar uma imagem/gif de miniatura para aparecer no Dataset Card com o argumento `preview_path`.

Aqui está um exemplo usando muitos desses argumentos, que enviaria os três primeiros amostras do conjunto de dados [Quickstart Video](https://docs.voxel51.com/user_guide/dataset_zoo/datasets.html#quickstart-video) da FiftyOne para o repositório privado `username/my-quickstart-video-dataset` com tags, uma licença MIT, uma descrição e uma imagem de pré-visualização:

```python
dataset = foz.load_from_zoo("quickstart-video", max_samples=3)

push_to_hub(
    dataset,
    "my-quickstart-video-dataset",
    tags=["video", "tracking"],
    license="mit",
    description="A dataset of video samples for tracking tasks",
    private=True,
    preview_path="<path/to/preview.png>"
)
```

## 📚 Recursos

- [🚀 Notebook Colab para acompanhar o código](https://colab.research.google.com/drive/1l0kzfbJ2wtUw1EGS1tq1PJYoWenMlihp?usp=sharing)
- [🗺️ Guia do usuário para conjuntos de dados do FiftyOne](https://docs.voxel51.com/user_guide/using_datasets.html#)
- [🤗 Documentação da Integração FiftyOne 🤝 Hub](https://docs.voxel51.com/integrations/huggingface.html#huggingface-hub)
- [🤗 Documentação da Integração FiftyOne 🤝 Transformers](https://docs.voxel51.com/integrations/huggingface.html#transformers-library)
- [🧩 Plugin do FiftyOne para o Hugging Face Hub](https://github.com/voxel51/fiftyone-huggingface-plugins)

