The backend opens the source with OpenCV, processes at the FPS cap, and serves
an annotated MJPEG. Use a USB index (0, 1) when the
webcam is plugged into the server, or an RTSP / HTTP URL for IP cameras.
USB on the server only works if you mount the device in Docker (see
docker-compose.yml).
When the USB cam is plugged into this machine (not the server), use the browser path: getUserMedia → captures frames → POSTs to /api/recognize. Same backend, no Docker device mounting needed.