6.0 KiB
Frigate on Raspberry Pi 5 with a USB Google Coral
A ready-to-use Frigate NVR deployment for a Raspberry Pi 5 using a USB Google Coral EdgeTPU for hardware-accelerated object detection.
Based on the official Frigate documentation: https://docs.frigate.video/
What's in this folder
frigate/
├── docker-compose.yml # Container definition (USB Coral passthrough, ports, volumes)
├── config/
│ └── config.yml # Frigate configuration (detector, cameras, recording)
├── storage/ # Recordings, snapshots, and exports live here
└── README.md # This file
Before you start — hardware notes
- Power the Pi properly. Use the official 27W USB-C supply for the Pi 5.
- The USB Coral is power-hungry. If you also attach a USB SSD or other USB devices, the Pi may not supply enough power and you'll get instability. Use a powered external USB hub in that case.
- Plug the Coral into a USB 3.0 (blue) port, ideally through the powered hub.
- No hardware video decode on the Pi 5. Unlike the Pi 4, the Pi 5 does not
expose a
/dev/video11decoder for Frigate, so camera decoding runs on the CPU. Keep camera count and detect resolution modest, and use camera substreams for the detect role (the included config already does this).
Step 1 — Prepare the OS
Use a 64-bit Debian-based OS (Raspberry Pi OS 64-bit, Bookworm or Trixie). Flash it, boot, then update:
sudo apt update && sudo apt full-upgrade -y
sudo reboot
Step 2 — Install Docker and Docker Compose
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Add your user to the docker group so you don't need sudo each time:
sudo usermod -aG docker $USER
Log out and back in (or reboot) for the group change to apply, then verify:
docker --version
docker compose version
Step 3 — Connect and verify the USB Coral
Plug the Coral in (USB 3.0 port, powered hub if you have other USB devices).
The Frigate container ships with the EdgeTPU libraries built in, so you do not
need to install any Coral runtime on the host — passing /dev/bus/usb into the
container (already configured in docker-compose.yml) is enough.
Confirm the host sees it:
lsusb
A freshly plugged Coral appears as Global Unichip Corp.; after it runs
inference once it re-enumerates as Google Inc.. Either is fine.
Step 4 — Put these files on the Pi
Copy this entire frigate/ folder to the Pi (e.g. to your home directory so it
lives at ~/frigate). You can use scp, a USB stick, or git.
cd ~/frigate
Step 5 — Set your shm-size (shared memory)
Frigate stores decoded frames in shared memory. Calculate the minimum per camera using your detect resolution (this example is 720p, including logs):
python3 -c 'print("{:.2f}MB".format((1280 * 720 * 1.5 * 20 + 270480) / 1048576 + 40))'
# ~66.63MB for one 720p camera
Multiply the per-camera portion by your number of cameras and add ~40MB for
logs. The provided docker-compose.yml uses 512mb, which comfortably covers
several cameras. Adjust the shm_size value if needed.
Step 6 — Edit the config for your cameras
Open config/config.yml and update:
- Camera RTSP URLs — replace
user,password, IP, and stream paths with your camera's real values. The RTSP path format varies by manufacturer. detectwidth/height — must match the resolution of the stream assigned thedetectrole.- MQTT — set
enabled: trueand fill in the host if you use Home Assistant.
Also change FRIGATE_RTSP_PASSWORD in docker-compose.yml from password to
something of your own.
Step 7 — Start Frigate
cd ~/frigate
docker compose up -d
Follow the logs to confirm a clean startup and that the Coral was found:
docker logs -f frigate
Look for the EdgeTPU being detected and an inference speed (typically ~8–15ms on
a USB Coral). Press Ctrl+C to stop following the logs.
Step 8 — Open the web UI
https://<your-pi-ip>:8971
On first launch Frigate creates an admin account. Check the container logs for the initial password, log in, and change it.
Verifying the Coral is actually being used
In the web UI, open the System / Metrics page. Your coral detector should
be listed with an inference speed and a detection FPS. If the inference speed is
very high (hundreds of ms), detection is running on CPU and the Coral is not
being used properly — see troubleshooting below.
Troubleshooting: Coral not detected
Try these in order:
- Restart the container:
docker compose restart - Unplug/replug the Coral, then restart.
- Use a powered USB hub if other USB devices are attached — power starvation is the most common cause of instability on the Pi.
- Try a different USB port; prefer USB 3.0 (blue).
- Confirm
lsusbshows the Global Unichip or Google device.
Official EdgeTPU troubleshooting: https://docs.frigate.video/troubleshooting/edgetpu
Updating Frigate later
cd ~/frigate
docker compose pull
docker compose up -d
Useful commands
docker compose up -d # start (detached)
docker compose down # stop and remove the container
docker compose restart # restart
docker logs -f frigate # follow logs
Ports reference
| Port | Purpose |
|---|---|
| 8971 | Authenticated web UI + API (use this) |
| 5000 | Internal unauthenticated UI/API (expose carefully) |
| 8554 | RTSP restreaming |
| 8555 | WebRTC (two-way talk), TCP + UDP |
Documentation
- Installation: https://docs.frigate.video/frigate/installation
- Object detectors (Coral): https://docs.frigate.video/configuration/object_detectors
- Full config reference: https://docs.frigate.video/configuration/reference
- Camera setup: https://docs.frigate.video/frigate/camera_setup