File size: 2,451 Bytes
c446951
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
You can run Inference directly on frames using UDP.

This is ideal for real-time use cases where reducing latency is essential (i.e. sports broadcasting).

This feature only works on devices with a CUDA-enabled GPU.

Inference has been used at sports broadcasting events around the world for real-time object detection.

!!! tip "Tip"
    Follow our [Run a Fine-Tuned Model on Images](/docs/quickstart/run_model_on_image) guide to learn how to find a model to run.

## Run a Vision Model on a UDP Stream

To run inference on frames from a UDP stream, you will need to:

1. Set up a listening server to receive predictions from Inference, and;
2. Run Inference, connected directly to your stream.

### Authenticate with Roboflow

To use Inference with a UDP stream, you will need a Roboflow API key. If you don't already have a Roboflow account, sign up for a free Roboflow account. Then, retrieve your API key from the Roboflow dashboard. Run the following command to set your API key in your coding environment:

```
export API_KEY=<your api key>
```

### Configure a Listening Server

You need a server to receive predictions from Inference. This server is where you can write custom logic to process predictions.

Create a new Python file and add the following code:

```python
import socket
import json
import time

    fps_array = []

    # Create a datagram (UDP) socket
    UDPClientSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)

    # Bind to the given IP address and port
    UDPClientSocket.bind((ip, port))

    print(f"UDP server up and listening on http://{ip}:{port}")

    # Listen for incoming datagrams
    while True:
        t0 = time.time()

        bytesAddressPair = UDPClientSocket.recvfrom(1024)
        message = bytesAddressPair[0]
        address = bytesAddressPair[1]

        clientMsg = json.loads(message)
        clientIP = "Client IP Address:{}".format(address)

        print(clientMsg)
        print(clientIP)

        t = time.time() - t0
        fps_array.append(1 / t)
        fps_array[-150:]
        fps_average = sum(fps_array) / len(fps_array)
        print("AVERAGE FPS: " + str(fps_average))

start_udp_server("localhost", arguments.port)
```

Above, replace `PORT` with the port on which you want to run your server.

### Run a Broadcasting Server

- set up socket
- render will broadcast
- https://hub.docker.com/repository/docker/roboflow/roboflow-inference-server-udp-gpu/general