System designExplainer

Run vision Python onboard the camera or on the host

Python runs onboard only where a processor accepts deployed code: the bandwidth and latency math that picks a camera module, smart camera or controller.

LumaSpec Vision10 min read Share on LinkedIn

On this page 10 sections
  1. 01The decision in one line
  2. 02What each hardware class can run
    1. Sensor-only board cameras and ribbon modules
    2. Smart cameras and vision sensors
    3. Vision controllers
  3. 03The bandwidth math that forces the choice
  4. 04Latency: the second forcing function
  5. 05How to tell which class you are holding
  6. 06The decision for each case
  7. 07When the usual answer is wrong
  8. 08Before you order
  9. 09Where to go next
  10. 10Questions

Where does the vision code actually run? On a camera with no user-programmable processor, your Python runs on the host, and every pixel has to cross the cable to get there. That one fact sets the camera choice, the cable, the host sizing and, for robot guidance, the latency budget. This guide sorts the hardware into three classes — sensor-only camera modules, smart cameras and vision controllers. It gives the bandwidth arithmetic that decides between them, and ends with the decision for each common set-up.

The decision in one line

Run your Python onboard only when the device carries a processor that accepts deployed code: a smart camera or a vision controller. A sensor-only camera module — a board camera, or a camera connected by flat-flex ribbon — has no user CPU at all. Its 'Python' is a host-side script that pulls raw frames over USB3 or GigE and processes them on your PC.

One case needs naming. Modules built around an embedded vision SoC do run work onboard: a host-side Python API builds a pipeline graph of image stages and neural models, and the SoC executes that graph frame after frame. Your script still lives on the host, though — the module runs the graph, not an interpreter. You cannot open a shell on it.

So the rule: go onboard when the raw stream exceeds the link, or when the inspection must run standalone. Go host when you want the full library ecosystem and fast iteration on one machine that also holds your data.

What each hardware class can run

Sensor-only board cameras and ribbon modules

A board-level camera is a sensor, its timing logic and a connector, nothing more. The MV-CB016-10GM-M-W is a 1.6 MP mono GigE board camera with an M12 mount and a global shutter: it streams raw frames to any host with a network port and does no processing of its own. The MV-CB060-10UM-B ships as a 6 MP USB3 bare board with no lens mount, made to be built into your own optics.

Board-level camerasHikrobot MV-CB016-10GM-M-W 1.6 MP GigE board-level camera, IMX296, Mono, M12 lens mount, WTB GigE portMV-CB016-10GM-M-W
Sensor format
1/2.9"
Lens mount
M12
Interface
GigE
Resolution
Up to 3 MP
$559.00View partBuild a system with it

Flat-flex modules split the same way. A pure sensor board crosses every pixel over the ribbon to the host processor. An SoC module runs its vendor-defined pipeline onboard and ships processed outputs across the ribbon instead — still no Python on the module. In both cases your code runs on the host; the difference is how many pixels the cable carries. The ribbon itself reaches only centimeters, so the host sits beside the sensor.

Smart cameras and vision sensors

A smart camera carries the processor, the development stack and usually the lens and light in one housing: the inspection runs on the device and only results cross the network. The shop's smart-camera category says it directly — inspection on the device, no PC. You build or configure the program in a host tool, deploy it once, and the camera runs unattended. Matching the SDK to the camera's firmware before you deploy is its own step, covered in Deploy custom code to a smart camera: match SDK and firmware versions.

Two examples from the ends of the range. The LS-SMC-0063 is a 1.6 MP smart camera rated 60 fps with a fitted 16 mm lens and integrated white light — the fixed-lens, run-it-out-of-the-box kind. The MV-SC5060XM-08M-WBN is a 6 MP mono smart camera of the SC5000X series with an M12 mount and a GigE interface — the programmable kind that takes deployed inspection code, including custom detection models: see Running custom object detection models on embedded smart cameras. For how SoC camera boards and smart cameras trade off on detection work, see Edge object detection: SoC camera boards vs smart cameras.

Smart cameras & vision sensorsHikrobot MV-SC5060XM-08M-WBN SC5000X series Smart Camera, 6 MP, Mono, 8 mm focal length, M12-mountMV-SC5060XM-08M-WBN
Interface
GigE
Resolution
6-10 MP
Sensor format
1/2.4"
Shutter
Rolling
$1,629.00View part

Vision controllers

A vision controller is a fanless industrial computer built around cameras: several dedicated LAN ports, PoE options and built-in light-controller channels. Your Python runs there with a full operating system — OpenCV, deep-learning runtimes, anything you install — and the cameras hang off its ports. The MV-VC5525-256G70-NN pairs a 12th-generation Intel Core i5 with 32 GB of memory, PoE camera ports and 8 built-in light channels. Sizing the CPU side of such a loop is its own exercise in Object detection on an industrial controller: sizing a CPU vision loop.

Vision controllersHikrobot MV-VC5525-256G70-NN VC5000 Vision Controller, 12th-I5, 32GB+256G SSD, Supported PCIEMV-VC5525-256G70-NN
LAN ports
5+ LAN ports
USB 3 ports
3-4 USB 3 ports
PoE
PoE camera ports
Light outputs
8 built-in channels
$4,479.00 · quotedView and quoteBuild a system with it

The bandwidth math that forces the choice

When the host does the processing, the link carries every pixel, and the link is a hard ceiling:

stream (MB/s) = width_px × height_px × bytes_per_pixel × fps ÷ 1,000,000 transfer (ms) = 1,000 × frame_MB ÷ link_throughput_MBps

Two ceilings matter. A USB 3.0 port signals at 5 Gbit/s, which is 500 MB/s after 8b/10b encoding; host controllers and protocol overhead bring the sustained bulk rate to roughly 350-400 MB/s. A GigE port signals at 1 Gbit/s — 125 MB/s at line rate — and typical GigE Vision stacks sustain about 110-115 MB/s.

Worked example: a 4K module streaming into a host over USB3.

  • 4K at 30 fps, 8-bit color: 3840 × 2160 × 3 B = 24,883,200 B ≈ 24.9 MB per frame, and 24.9 MB × 30 = 746 MB/s.
  • Against USB3's best practical 400 MB/s: 746 ÷ 400 ≈ 1.9× over. The link cannot carry this stream uncompressed at any host speed.
  • Same sensor, 8-bit mono: 3840 × 2160 × 1 B ≈ 8.3 MB per frame, 249 MB/s at 30 fps — fits USB3, still 249 ÷ 115 ≈ 2.2× over GigE.
  • Down to 1080p mono: 1920 × 1080 × 1 B ≈ 2.1 MB per frame, 62 MB/s at 30 fps — 54% of a GigE link.
Stream (8-bit, 30 fps) MB per frame MB/s USB3 (350-400 MB/s) GigE (~115 MB/s)
4K color, ×3 B/px 24.9 746 1.9× over 6.5× over
4K mono 8.3 249 fits 2.2× over
1080p color 6.2 187 fits 1.6× over
1080p mono 2.1 62 fits fits (54%)

The escape ladder, cheapest first: mono instead of color (÷3), fewer frames per second, a smaller ROI or binning, hardware compression — MJPEG or H.264 typically buys 10-20× at some quality cost — and finally processing onboard, so only results cross the wire. The per-camera arithmetic behind the middle steps is in Reduce USB3 camera bandwidth: the per-camera budget math and USB3 bandwidth for a multi-stream pipeline: size each stream.

Latency: the second forcing function

Bandwidth kills streams; latency kills control loops. The transfer formula above sets the floor for host-side processing: a 24.9 MB 4K color frame moved at 350 MB/s takes 24.9 ÷ 350 ≈ 71 ms on the wire, and a 2.1 MB 1080p mono frame at 115 MB/s takes ≈ 18 ms. That is before exposure, host processing and the robot's own motion are added.

Onboard processing deletes that transfer: a smart camera or SoC module sends a few bytes of coordinates, which cross a 115 MB/s link in well under a millisecond. For guidance loops the commit is simple — keep raw frames at or below 1080p mono on GigE, or process onboard. The full exposure-to-motion budget is laid out in Image based control latency: budget the full feedback loop.

How to tell which class you are holding

Classify the device from its data sheet before writing any code:

  1. It names a processor, an operating system or an SDK that deploys programs — smart camera; the inspection runs onboard.
  2. It lists only sensor, shutter, interface and lens mount — sensor-only; Python on the host, and budget the link.
  3. It connects by flat-flex ribbon — look for a vendor pipeline API. With one, the SoC runs the graph onboard while your Python stays host-side; without one, the ribbon brings you nothing but pixels.
  4. It is a box with several camera LAN ports and light-control channels — vision controller; run full Python there and hang the cameras off it.

Sensor-to-host compatibility is its own pre-purchase check — Board level camera sensor compatibility: match the host before you buy — and Board camera evaluation checklist for inspection systems turns the rest into a list you can score.

The decision for each case

Case Hardware Where the Python runs The link carries
One repeatable inspection: presence, gauging, code reading Smart camera Onboard, deployed once Results only
Custom model you retrain often, full libraries Board camera + host Host Raw frames, sized by the table above
4K30 color, raw Smart camera or SoC module Onboard Results, or a compressed stream
Robot guidance with a tight loop Smart camera, or 1080p mono GigE Onboard, or host on a short frame Bytes, or 2.1 MB per frame
Several cameras, one brain Vision controller Host, on the controller Raw frames on its camera ports
SLAM or VIO on a ribbon module SoC module + host Pipeline onboard, orchestration host-side Processed outputs

For the single-inspection case, the practical choice is between two smart-camera formats: a fixed-lens device with the light built in, or a programmable camera with an interchangeable lens. The LS-SMC-0063 is the first — 1.6 MP at 60 fps with a fitted 16 mm lens and integrated white light. The MV-SC5060XM-08M-WBN is the second — 6 MP mono over GigE with an M12 mount:

Specification LS-SMC-0063 MV-SC5060XM-08M-WBN
Data interface GigE Gigabit Ethernet (1000 Mbit/s)
Resolution 1440x1080 3200 × 1920
Max. frame rate 60 fps 15 fps
Digital I/O RS232, 2 Opto-isolated inputs, 3 Opto-isolated outputs 12-pin M12 connector provides power and I/O, including opto-isolated input × 3 (Line 0/1/2), opto-isolated output × 3 (Line 3/4/5), RS-232 × 1
Power supply 9-26 V DC 2 A 24 VDC
Power consumption <18 W Avg. 12.3 W @ 24 VDC (with included light source on); Max. 48 W @ 24 VDC (with included light source on)
Weight <350 g Approx. 370 g (0.8 lb.)
Ingress protection IP65 IP67 (under proper installation of waterproof lens cap)
Humidity 20%-95%, no condensation 20% RH to 95% RH (no condensation)
Price $1,110.00 $1,629.00

Values as printed in each product's data sheet; open a part for its drawing and full specifications.

When the usual answer is wrong

Host-side processing is the default, and three cases break it. First, a single-camera station that must run with no PC on the line: a smart camera with the inspection deployed is less hardware, not more. Second, a stream that looks impossible — 4K color — often fits once mono, a reduced ROI or the camera's hardware encoder are applied; recompute before adding a computer. Third, a ribbon SoC module tempts you to 'put Python on the camera': the onboard part is the pipeline graph. Keep the orchestration small on the host and budget its CPU for what the nodes do not cover.

Before you order

  • Sum the streams: per-camera MB/s from the formula, added up, against the controller's port count and switch capacity; a multi-camera rig on one processor is worked through in Design a multi-camera board-level rig on one processor.
  • Confirm the deployment path: the SDK you build with must match the firmware on the camera, and the algorithm you need must exist in the camera's library if you will not write your own.
  • Plan the optics for bare boards: M12 or CS mount, back-focus distance, and strain relief on the connector.
  • Count the light channels if you strobe: a controller integrates them — 8 on the MV-VC5525-256G70-NN — and a smart camera with a built-in light covers the single-camera case.

Where to go next

Size the stream with the formula, pick the class, then pick the part. Browse smart cameras and board-level cameras in the camera finder, or start a controller build from vision controllers with the system configurator. More set-up-level reading sits on the machine vision systems topic page. If you want a second opinion on where the code should run, send us the layout through the contact page.

Questions

Can I install Python on a camera module itself?

No. A sensor-only module has no user-accessible processor or storage, so there is nothing to install Python on. Modules built around an embedded vision SoC run a vendor-defined pipeline — image stages and neural models — onboard, but the Python that builds and controls that pipeline executes on the host. The practical workflow: write the graph in the vendor's host-side API, deploy it to the module once, and keep orchestration, logging and the user interface in your host script.

How much bandwidth does an uncompressed 4K camera stream need?

At 30 fps in 8-bit color, 746 MB/s: 3840 × 2160 pixels × 3 bytes = 24.9 MB per frame, and 24.9 MB × 30 fps = 746 MB/s. USB3's practical ceiling of 350-400 MB/s leaves that stream about 1.9× over. The same frames in 8-bit mono need 249 MB/s, which fits USB3 but stays 2.2× over GigE's roughly 110-115 MB/s.

How many frames per second can a GigE camera deliver at full HD?

In 8-bit mono, a 1920 × 1080 frame is 2.1 MB, so 30 fps costs 62 MB/s — about 54% of GigE's practical 110-115 MB/s. The link itself tops out near 55 fps at that format (115 ÷ 2.1). In color the frames triple to 6.2 MB and GigE tops out near 18 fps, so full-HD color belongs on USB3 or behind compression.

When should I pick a smart camera over a vision controller?

Pick a smart camera when one device can hold the whole inspection: it runs the algorithm onboard, needs no PC on the line, and returns only results over the network. Pick a vision controller when you run several cameras, need a full Python environment with the libraries your team already uses, or must drive lights and discrete I/O from the same machine — controllers provide multiple camera LAN ports and built-in light channels.

Does onboard processing cut latency for robot guidance?

Yes, by the whole raw-frame transfer. A 24.9 MB 4K color frame over USB3 at 350 MB/s costs about 71 ms on the wire, and a 2.1 MB 1080p mono frame over GigE costs about 18 ms. A device that processes onboard sends a few bytes of coordinates instead, crossing the link in well under a millisecond — which is why tight guidance loops favor onboard processing or short-frame formats.