Install on Raspberry Pi - Roboflow Inference (original) (raw)

Inference works on Raspberry Pi 4 Model B and Raspberry Pi 5 so long as you are usingthe 64-bit version of the operating system (if your SD Card is big enough, we recommend the 64-bit "Raspberry Pi OS with desktop and recommended software" version).

Once you've installed the 64-bit OS,install Docker then use the Inference CLI to automatically select, configure, and start the correct Inference Docker container:

pip install inference-cli inference server start

Hardware Acceleration

Inference does not yet support any hardware acceleration on the Raspberry Pi. Expect about 1fps on Pi 4 and 4fps on Pi 5 for a "Roboflow 3.0 Fast" object detection model (equivalent to a "nano" sized YOLO model).

Larger models like Segment Anything and VLMs like Florence 2 will struggle to run with high performance on the Pi's compute. If you need more power for higher framerates or bigger models consider an NVIDIA Jetson.

Manually Starting the Container

If you want more control of the container settings you can also start it manually.

sudo docker run -d \ --name inference-server \ --read-only \ -p 9001:9001 \ --volume ~/.inference/cache:/tmp:rw \ --security-opt="no-new-privileges" \ --cap-drop="ALL" \ --cap-add="NET_BIND_SERVICE" \ roboflow/roboflow-inference-server-cpu:latest

Docker Compose

If you are using Docker Compose for your application, the equivalent yaml is:

`version: "3.9"

services: inference-server: container_name: inference-server image: roboflow/roboflow-inference-server-cpu:latest

read_only: true
ports:
    - "9001:9001"

volumes:
    - "${HOME}/.inference/cache:/tmp:rw"

security_opt:
    - no-new-privileges
cap_drop:
    - ALL
cap_add:
    - NET_BIND_SERVICE

`

Using Your New Server

Once you have a server running, you can access it via its API or usingthe Python SDK. You can also use it to build Workflows using the Roboflow Platform UI.

Python SDKNode.jsHTTP / cURL

Install the SDK

pip install inference-sdk

Run a workflow

This code runs an example model comparison Workflowon an Inference Server running on your local machine:

`from inference_sdk import InferenceHTTPClient

client = InferenceHTTPClient( api_url="http://localhost:9001", # use local inference server # api_key="" # optional to access your private data and models )

result = client.run_workflow( workspace_name="roboflow-docs", workflow_id="model-comparison", images={ "image": "https://media.roboflow.com/workflows/examples/bleachers.jpg" }, parameters={ "model1": "yolov8n-640", "model2": "yolov11n-640" } )

print(result) `

From a JavaScript app, hit your new server with an HTTP request.

`const response = await fetch('http://localhost:9001/infer/workflows/roboflow-docs/model-comparison', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ // api_key: "" // optional to access your private data and models inputs: { "image": { "type": "url", "value": "https://media.roboflow.com/workflows/examples/bleachers.jpg" }, "model1": "yolov8n-640", "model2": "yolov11n-640" } }) });

const result = await response.json(); console.log(result); `

Warning

Be careful not to expose your API Key to external users (in other words: don't use this snippet in a public-facing front-end app).

Using the server's API you can access it from any other client application. From the command line using cURL:

curl -X POST "http://localhost:9001/infer/workflows/roboflow-docs/model-comparison" \ -H "Content-Type: application/json" \ -d '{ "api_key": "<YOUR API KEY -- REMOVE THIS LINE IF NOT FILLING>", "inputs": { "image": { "type": "url", "value": "https://media.roboflow.com/workflows/examples/bleachers.jpg" }, "model1": "yolov8n-640", "model2": "yolov11n-640" } }'

Tip

ChatGPT is really good at converting snippets like this into other languages. If you need help, try pasting it in and asking it to translate it to your language of choice.