yolov5/utils/flask_rest_api
Paula Derrenger e9ab205ef6
Ultralytics Refactor https://ultralytics.com/actions (#13553)
* Refactor code for speed and clarity

* Auto-format by https://ultralytics.com/actions

* Update README.md

Signed-off-by: Glenn Jocher <glenn.jocher@ultralytics.com>

---------

Signed-off-by: Glenn Jocher <glenn.jocher@ultralytics.com>
Co-authored-by: Glenn Jocher <glenn.jocher@ultralytics.com>
Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
2025-03-28 03:35:11 +01:00
..

Ultralytics logo

Flask REST API for YOLOv5

Representational State Transfer (REST) Application Programming Interfaces (APIs) are a standard way to expose Machine Learning (ML) models for consumption by other services or applications. This directory provides an example REST API built with Flask to serve the Ultralytics YOLOv5s model loaded directly from PyTorch Hub. This allows you to easily integrate YOLOv5 object detection capabilities into your web applications or microservices.

💻 Requirements

The primary requirement is the Flask web framework. Install it using pip:

pip install Flask

You will also need torch and yolov5 which are implicitly handled when loading the model from PyTorch Hub in the script. Ensure you have a working Python environment.

▶️ Run the API

Once Flask is installed, you can start the API server:

python restapi.py --port 5000

The server will start listening on the specified port (default is 5000). You can then send inference requests to the API endpoint using tools like curl or any HTTP client.

To test the API with an image file (e.g., zidane.jpg from the yolov5/data/images directory):

curl -X POST -F image=@../data/images/zidane.jpg 'http://localhost:5000/v1/object-detection/yolov5s'

The API processes the image using the YOLOv5s model and returns the detection results in JSON format. Each object in the JSON array represents a detected object with its class ID, confidence score, bounding box coordinates (normalized), and class name.

[
  {
    "class": 0,
    "confidence": 0.8900438547,
    "height": 0.9318675399,
    "name": "person",
    "width": 0.3264600933,
    "xcenter": 0.7438579798,
    "ycenter": 0.5207948685
  },
  {
    "class": 0,
    "confidence": 0.8440024257,
    "height": 0.7155083418,
    "name": "person",
    "width": 0.6546785235,
    "xcenter": 0.427829951,
    "ycenter": 0.6334488392
  },
  {
    "class": 27,
    "confidence": 0.3771208823,
    "height": 0.3902671337,
    "name": "tie",
    "width": 0.0696444362,
    "xcenter": 0.3675483763,
    "ycenter": 0.7991207838
  },
  {
    "class": 27,
    "confidence": 0.3527112305,
    "height": 0.1540903747,
    "name": "tie",
    "width": 0.0336618312,
    "xcenter": 0.7814827561,
    "ycenter": 0.5065554976
  }
]

An example Python script, example_request.py, demonstrates how to perform inference using the popular requests library. This script provides a simple way to interact with the running API programmatically.

🤝 Contribute

Contributions to enhance this Flask API example are welcome! Whether it's adding support for different YOLO models, improving error handling, or adding new features, feel free to fork the repository, make your changes, and submit a pull request. Check out the main Ultralytics YOLOv5 repository for more details on contributing.