DEV Community

Cover image for HuggingFace Transformer Pipeline - Vision: How to Use, Deploy and Serve
wjiuhe
wjiuhe

Posted on • Edited on

HuggingFace Transformer Pipeline - Vision: How to Use, Deploy and Serve

In this tutorial, we will explore how to use Hugging Face pipeline, and how to deploy it with Pinferencia as REST API.

Never heard of Pinferencia? It's not late. Check it out at GitHub


Download the model and predict
The model will be automatically downloaded.

from transformers import pipeline
vision_classifier = pipeline(task="image-classification")

vision_classifier(
    images="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
)
Enter fullscreen mode Exit fullscreen mode

hfimg

Result:

[{'label': 'lynx, catamount', 'score': 0.4403027892112732},
 {'label': 'cougar, puma, catamount, mountain lion, painter, panther, Felis concolor',
  'score': 0.03433405980467796},
 {'label': 'snow leopard, ounce, Panthera uncia',
  'score': 0.032148055732250214},
 {'label': 'Egyptian cat', 'score': 0.02353910356760025},
 {'label': 'tiger cat', 'score': 0.023034192621707916}]
Enter fullscreen mode Exit fullscreen mode

Let's try another image, and let's try predict two image in one batch:

image = "https://cdn.pixabay.com/photo/2018/08/12/16/59/parrot-3601194_1280.jpg"
vision_classifier(
    images=[image, image]
)
Enter fullscreen mode Exit fullscreen mode

parrot

Result:

[[{'score': 0.9489120244979858, 'label': 'macaw'},
  {'score': 0.014800671488046646, 'label': 'broom'},
  {'score': 0.009150494821369648, 'label': 'swab, swob, mop'},
  {'score': 0.0018255198374390602, 'label': "plunger, plumber's helper"},
  {'score': 0.0017631321679800749,
   'label': 'African grey, African gray, Psittacus erithacus'}],
 [{'score': 0.9489120244979858, 'label': 'macaw'},
  {'score': 0.014800671488046646, 'label': 'broom'},
  {'score': 0.009150494821369648, 'label': 'swab, swob, mop'},
  {'score': 0.0018255198374390602, 'label': "plunger, plumber's helper"},
  {'score': 0.0017631321679800749,
   'label': 'African grey, African gray, Psittacus erithacus'}]]
Enter fullscreen mode Exit fullscreen mode

Amazingly easy! Now let's try:

Deploy the model

Without deployment, how could a machine learning tutorial be complete?

First, let's install Pinferencia.

pip install "pinferencia[uvicorn]"
Enter fullscreen mode Exit fullscreen mode

If you haven't heard of Pinferencia go to its github page or its homepage to check it out, it's an amazing library help you deploy your model with ease.

Now let's create an app.py file with the codes:

from transformers import pipeline
from pinferencia import Server
vision_classifier = pipeline(task="image-classification")

def predict(data):
    return vision_classifier(images=data)

service = Server()
service.register(
    model_name="vision",
    model=predict,
)
Enter fullscreen mode Exit fullscreen mode

Easy, right?

Predict

Curl

curl --location --request POST 'http://127.0.0.1:8000/v1/models/vision/predict' \
--header 'Content-Type: application/json' \
--data-raw '{
    "data": "https://cdn.pixabay.com/photo/2018/08/12/16/59/parrot-3601194_1280.jpg"
}'
Enter fullscreen mode Exit fullscreen mode

or use python requests

import requests

response = requests.post(
    url="http://localhost:8000/v1/models/vision/predict",
    json={
        "data": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"  # noqa
    },
)
print("Prediction:", response.json()["data"])
Enter fullscreen mode Exit fullscreen mode

Result:
python test.py

Prediction: [
    {'score': 0.433499813079834, 'label': 'lynx, catamount'},
    {'score': 0.03479616343975067, 'label': 'cougar, puma, catamount, mountain lion, painter, panther, Felis concolor'},
    {'score': 0.032401904463768005, 'label': 'snow leopard, ounce, Panthera uncia'},
    {'score': 0.023944756016135216, 'label': 'Egyptian cat'},
    {'score': 0.022889181971549988, 'label': 'tiger cat'}
]
Enter fullscreen mode Exit fullscreen mode

Even cooler, go to http://127.0.0.1:8000, and you will have a interactive ui.

You can send predict requests just there!

Go Pinferencia!

Image description

Image description

If you like Pinferencia, don't forget to go to https://github.com/underneathall/pinferencia and give it a star.

Top comments (0)