You connected the camera, opened the vendor's hardware detection application, and it listed the camera with every supported format. Then you opened your acquisition tool and the device list was empty. The camera is almost never at fault: the vendor utility enumerates through the vendor SDK, while your tool enumerates only the adapters installed into it — a DirectShow list, a GenTL producer, a frame grabber SDK. This guide works the fault in probability order: see what each side actually enumerates, clear the holders and stale state, load the matching transport layer, and when no adapter will ever list the camera, bridge the SDK through its documented interfaces. Ten minutes of ordered checks beats an afternoon of cable swapping.
Two enumeration layers, one camera
Every path into a camera enumerates its own device list. The hardware detection application that ships with the camera enumerates through the vendor SDK — that is the one list guaranteed to show it. The OS device list proves only that a driver bound: on Windows, an entry under Imaging Devices; on Linux, a line in lsusb. Your acquisition tool reads neither of those. It reads the adapters registered inside it, and a camera that lives on a vendor transport is simply not on those lists yet.
That is why the symptom splits so cleanly. If the vendor tool streams, sensor, power and cable are proven good, and the empty list in your tool is a routing fact, not a hardware fault. The same layered gap explains vision software that cannot find your camera and why one viewer works while another fails on the same PC.
Which list does your tool actually read?
| Where you look | What enumerates the camera | What an empty result means |
|---|---|---|
| Vendor detection utility or SDK viewer | The vendor driver stack | Your baseline — if it lists the camera, hardware is good |
| OS device list (Imaging Devices, lsusb) | The bound OS driver | Presence only; it says nothing about capture support |
| winvideo adapter | DirectShow capture filters | The camera exposes no DirectShow filter; most industrial cameras expose none |
| OS media or webcam interface | Media-framework capture sources | The camera may appear, then fail at "Error initializing media source" because the vendor driver owns it |
| GenTL client | A GenTL producer for GigE Vision or USB3 Vision | Producer not loaded, wrong path, or discovery blocked |
| Frame grabber SDK tool | The grabber's own enumeration | The camera behind the grabber needs that grabber's support in your tool |
In a MATLAB-type tool the queries are explicit: imaqhwinfo with no arguments returns the adapters installed, and imaqhwinfo('winvideo') returns what that one adapter enumerates. If the adapter list is shorter than you expected, the camera was never going to appear in it, whatever the OS says.
The diagnosis, in probability order
- Stream in the vendor's own viewer. A live preview with the formats listed proves camera, cable and power. Everything after this step is software.
- Query the tool, not the OS. An empty result from the tool's own enumeration, while the vendor viewer streams, is the adapter gap. Stop debugging hardware.
- Confirm the OS layer once. An Imaging Devices entry or an lsusb line next to an empty tool list is the classic signature of this fault — the same split as a USB camera visible in lsusb but not the vision SDK. Embedded boards fail the same way: a camera module a board-level probe cannot detect is a stack problem, not a dead sensor.
- Close every holder, then reset once. Machine-vision drivers grant exclusive control, and the vendor viewer from step 1 is the first suspect. Close it, close OEM demos, close browsers. Then reset the tool's acquisition layer — imaqreset in a MATLAB-type tool — and re-query. If only repeated resets make the camera appear, something is leaving handles behind: close applications in reverse start order and reboot once. The holder pattern is covered in GigE camera open fails in a second tool.
- GigE: check the transport layer, not ping. GenICam discovery rides subnet broadcast, so a camera that pings can still be invisible when the transport layer is not loaded or the subnets differ. See ping works, zero cameras and why ping is not enough for discovery. The host firewall must pass the discovery traffic or the list stays empty — GigE Vision firewall troubleshooting.
- USB3 Vision and GenTL: point the tool at the producer. The tool enumerates through a GenTL producer; a missing producer, a wrong path or a version mismatch all present as zero devices. Start with GenTL transport layer startup and GenTL producer version compatibility.
- Match bitness. A 64-bit tool cannot load a 32-bit SDK DLL or adapter, and the adapter fails quietly, so the list comes back short. The same mismatch breaks wrappers in other languages — fixing SDK bitness in a Python wrapper shows the pattern.
- Swap the cable once. A marginal USB3 lead renegotiates to a slower link, which shows up as slow streaming rather than an empty list, so it is the last check, not the first. Keep spare machine-vision cables on the bench for exactly this test.
Worked example: 12 MP frames at intervals through a USB3 bridge
The camera for the arithmetic is the LS-CMR-0166, a 12 MP USB3 area scan camera with 4000 × 3000 resolution at 30 fps.
- Sensor format
- 1/1.7"
- Interface
- USB3
- Resolution
- 12 MP
- Shutter
- Rolling
The task is one saved frame every 2 s at a microscope station — an illustrative interval, since the interval, not the camera, sets the load. The link is USB 3.0 at 5 Gbit/s. Assume 3 GB/s of host copy bandwidth for one memcpy thread.
Work through it:
- Frame size: 4000 × 3000 pixels × 1 byte per pixel = 12,000,000 bytes, about 12 MB for a mono 8-bit frame.
- Full-rate streaming: 12 MB × 30 fps = 360 MB/s. USB 3.0 carries 5 Gbit/s = 625 MB/s raw; 8b/10b encoding keeps 80 % of that, 500 MB/s, and protocol overhead leaves roughly 350-450 MB/s usable. 360 MB/s fits, with little headroom and only on an otherwise idle link.
- Interval capture: 12 MB ÷ 2 s = 6 MB/s. Any bridge, any link.
- Host copy: 12 MB ÷ 3 GB/s = 4 ms per frame. The frame period at 30 fps is 33 ms, so the copy is about 12 % of the period.
The decision: below roughly 10 ms of copy per frame — 4 ms here — the copy is not worth optimizing; the display path is the slow step. Let the SDK draw into a native window through its own display function, add overlays there, and copy frames into arrays only when you process them. At one frame every 2 s, the bridge choice is purely a maintenance question, never a bandwidth one. When you do need every frame at full rate, 360 MB/s on one USB3 link leaves no room for a second camera on the same controller. When frames outgrow a single camera link, the frame grabber becomes both the bandwidth path and the enumeration layer:
- Interface
- XoFLink
- Ports
- 4 ports
- Interface
- 10GigE
- Ports
- 2 ports
Bridging the vendor SDK when no adapter will ever list the camera
If the tool has no GenTL support and the camera exposes no DirectShow filter, no setting will make it appear in the device list. Bridge instead. Three routes, ranked by maintenance cost:
- The .NET assembly. The SDK ships as a managed assembly; load it through the tool's .NET interface and the full feature set — parameters, capture, display — stays callable. Handle pointer-returning calls through the assembly's own types rather than raw pointers. A version bump re-links without re-declaring anything.
- A MEX wrapper. Compile a C or C++ MEX-file against the SDK and return each frame as a native array. Tightest per-frame timing, at the cost of a compiler toolchain and a declaration for every function you call.
- A C wrapper with loadlibrary. Declare the prototypes, load the SDK DLL, call init, open, capture. Right for three or four calls; painful beyond that, because every buffer return becomes manual pointer marshaling.
The decision: take the .NET assembly if the vendor ships one; take the MEX route when you cannot use .NET or need deterministic per-frame timing; take loadlibrary only for a handful of calls. The pattern is identical in every host language — calling a camera SDK DLL from LabVIEW and driving camera registers from your own control code walk it end to end.
When it is not the adapter
- Enumerated, then no image. The backend, not the list. A viewer missing its decode plugins shows a connected camera with no video — GStreamer missing plugins.
- Visible in one tool, invisible in another on the same PC. Adapter support differs per tool, not per camera — camera acquisition backend compatibility.
- Appears, disappears, reappears. An exclusive holder or a crashed session leaving handles behind; run the reset routine in step 4.
- Listed but every open fails. Exclusive control again, or the bitness mismatch from step 7.
Order the fault this way: missing from the list is the adapter, present but silent is the backend, intermittent is a holder. More systems integration troubleshooting follows that same split.
Choosing hardware that enumerates everywhere
Prevention costs less than bridging. A camera that speaks GigE Vision or USB3 Vision lists in any tool that loads a GenTL producer — one code path, two cable types — and what GigE Vision guarantees for tool compatibility is worth reading before the next purchase. Start from the area scan cameras finder or the camera finder and filter on the interface your tool actually enumerates.
The LS-CMR-0053 is a 12 MP GigE area scan camera that streams at 9 fps.
- Sensor format
- 1/1.7"
- Lens mount
- C-mount
- Interface
- GigE
- Resolution
- 12 MP
Twelve megabytes a frame at mono 8 bit puts 108 MB/s on the wire at that rate, inside what a gigabit link carries with jumbo frames — a streaming rate, not a burst. On the host side, a dedicated PoE card settles the power and driver questions in one part:
| Specification | MV-GE2002P | MV-GE1104 | LS-FGB-0004 |
|---|---|---|---|
| Interconnect | PCI-E gen2 × 4 | PCI-E gen2 ×4 | – |
| Delivery bandwidth | 860 MB/s (max. transmission bandwidth); 800 MB/s (sustained transmission bandwidth) | 860 MB/s (peak bandwidth), 800 MB/s (sustained bandwidth) | – |
| Standard | IEEE 802.3 | GigE Vision | – |
| Interface | 2 × RJ45 | 4 × RJ45 | – |
| Camera type supported | GigE industrial camera | GigE industrial camera | – |
| Camera quantity supported | 2 at most | 4 at most | – |
| Camera connection speed | 10/100/1000 Mbps | 1 Gbps | – |
| Stream | 2 | 4 | – |
| Power consumption | 7.5 W (excl. PoE) | 10 W | – |
| Dimension | 181 mm × 126.3 mm × 21.6 mm | 181 mm × 126.3 mm × 21.6 mm | – |
| Temperature | Working temperature: 0 °C to 60 °C (32 °F to 140 °F); Storage temperature: –20 °C to 70 °C (–4 °F to 158 °F) | Working temperature: 0 °C to 60 °C (32 °F to 140 °F); Storage temperature: –20 °C to 70 °C (–4 °F to 158 °F) | – |
| Humidity | 10% RH to 95% RH (no condensation) | 10% RH to 95% RH (no condensation) | – |
| Price | $249.00 | $699.00 | $359.00 |
Values as printed in each product's data sheet; open a part for its drawing and full specifications.
Browse frame grabbers when the camera links through a card, and let the system configurator chain camera, cable and host so the enumeration path matches the tool from day one.
Checklist before you escalate
- Vendor viewer streams the camera: hardware proven, nothing gets returned yet.
- Tool adapter list queried by name: you know exactly which adapters the tool has.
- Every holder closed, acquisition layer reset once, query repeated.
- GenTL producer path set and its version matched to the tool.
- Bitness of tool, SDK and runtime identical.
- Subnet and firewall cleared on GigE; producer loaded on USB3 Vision.
- Cable swapped once, same result.
- Decision recorded: GenTL enumeration, SDK bridge, or camera swap.
If the list is still empty after those eight checks, the shortest path out is a standards camera plus a GenTL-capable tool. Run the camera finder for the interface your tool supports, or send the setup to us and we will size the swap with you.
Questions
Why does the hardware detection application see the camera but imaqtool lists nothing?
The detection application ships with the camera and enumerates through the vendor SDK, so it sees its own cameras no matter what else is installed. imaqtool lists devices only through the adapters registered with it, and winvideo — its DirectShow adapter — shows only devices that expose a DirectShow capture filter. An industrial camera on a vendor transport usually exposes none, so the list stays empty while the camera itself works. That empty list is a routing fact, not a fault report.
Can I use the webcam interface instead of the acquisition tool?
Occasionally, and it is the wrong crutch. The webcam interface enumerates the OS media framework, so the camera can appear in webcamlist yet fail when the media source starts — the transcript in this fault class ends with "Error initializing media source" — because the vendor driver, not the media framework, owns the device. If the vendor ships no media-framework source, it will never work. Use it for a quick preview; bridge the SDK for interval capture.
Why does resetting the acquisition adapter make the camera appear sometimes?
A reset drops enumeration state and handles left behind by an earlier session: a viewer that crashed, a tool still holding the device, or a driver that never released exclusive access. If one imaqreset works only occasionally, something upstream is leaving state behind. Close every application that touched the camera in the reverse order you started them, reboot once, and the first query should list the camera every time.
Which bridge into a vendor SDK is easiest to maintain?
The .NET assembly, when the vendor ships one: every SDK feature stays callable and a version bump re-links without touching your declarations. A MEX wrapper gives the tightest per-frame timing, but every function you call must be declared and recompiled. loadlibrary wrappers are fine for three or four calls and painful beyond that, because each buffer return becomes manual pointer marshaling. Count the functions you need before choosing a route.
Do GigE Vision and USB3 Vision cameras avoid this problem?
In a tool that loads a GenTL producer, yes: the camera lists without any vendor-specific code, and one code path covers both standards. In a DirectShow-only tool, no — the adapter gap is identical. On GigE add two checks the USB case does not have: discovery rides subnet broadcast, so camera and NIC must share a subnet, and the host firewall must let the discovery traffic through.



