科学相机
Andor、Basler、Hamamatsu、FLIR 等 15 品牌科学相机与图像采集驱动。
概述
Quatm 为全球 15 个主流科学相机品牌提供统一的 ICamera 接口封装,覆盖 EMCCD、sCMOS、高速 CMOS 和工业相机。
Andor 系列:iXon EMCCD / Zyla sCMOS / Shamrock 光谱仪
概述
Quatm 提供两套 Andor 相机驱动,通过原生 SDK 实现高性能成像控制:
| 驱动类 | SDK | 适用型号 | 接口 |
|---|
AndorSDK2Camera | atmcd32d.dll (SDK2) | iXon EMCCD, Luca, Clara | PCIe / USB |
AndorSDK3Camera | atcore.dll (SDK3) | Zyla, Neo, Marana (sCMOS) | USB3 / CameraLink |
ShamrockSpectrograph | ShamrockCIF.dll | SR-303i, SR-500i 等光谱仪 | USB |
所有类继承自 io.camera 接口,支持 ROI、binning、曝光控制和帧缓冲管理。
Andor SDK2 (EMCCD) AndorSDK2Camera
⚙️
iXon EMCCD
Andor SDK2 系列
| 通信 | DLL (atm32cd32) |
| 读出模式 | EM/传统 |
| ADC 频率 | 1/5/10 MHz |
| 像素深度 | 16-bit |
| 制冷 | TEC(≤ -100°C) |
适用于极低光信号场景(单原子/离子荧光),通过电子倍增(EM Gain)实现单光子级灵敏度。
驱动模块:AndorSDK2Camera
初始化
from quatm.drivers.andor.AndorSDK2 import AndorSDK2Camera
# 连接第一台相机
cam = AndorSDK2Camera(cam_id=0)
# 配置采集参数
cam.setup_acquisition(
exposure=0.1, # 曝光时间 (s)
em_gain=200, # EM 增益 (0-1000)
readout_rate="5MHz",# 读出速率
pre_amp_gain=2, # 前置放大增益
hsspeed=0, # 水平转移速率
temperature=-70, # 目标温度 (°C)
)
# 采集单帧
cam.start_acquisition(nframes=1)
image = cam.read_multiple_images(nframes=1)
关键参数
| 参数 | 说明 | 典型范围 |
|---|
exposure | 单帧曝光时长 | 0.001 – 3600 s |
em_gain | 电子倍增增益 | 0 – 1000(线性或真实增益模式) |
readout_rate | ADC 读出频率 | 1MHz / 5MHz / 10MHz |
temperature | 传感器目标温度 | -60 至 -100°C(取决于冷却器) |
pre_amp_gain | 前置放大器增益 | 1× – 4× |
Andor SDK3 (sCMOS) AndorSDK3Camera
⚙️
Zyla / Neo sCMOS
Andor SDK3 系列
| 通信 | DLL (atcore) |
| 传感器 | sCMOS |
| 接口 | USB3 / CameraLink |
| 像素深度 | 12/16-bit |
| 帧率 | 最高 100 fps(全分辨率) |
适用于快速序列成像和需要大视场的场景。基于 GenAPI 属性模型配置曝光、ROI 和触发。
驱动模块:AndorSDK3Camera
初始化
from quatm.drivers.andor.AndorSDK3 import AndorSDK3Camera
cam = AndorSDK3Camera(cam_id=0)
cam.setup_acquisition(
exposure=0.05,
pixel_format="Mono16",
trigger_mode="Internal",
)
Andor Shamrock 光谱仪 ShamrockSpectrograph
控制光栅选择、中心波长和狭缝宽度:
from quatm.drivers.andor.Shamrock import ShamrockSpectrograph
spec = ShamrockSpectrograph(idx=0)
spec.set_wavelength(780.24) # 中心波长 (nm)
spec.set_grating(2) # 选择光栅
spec.set_slit_width(50, port=1) # 入口狭缝 (µm)
设备配置
"emccd": {
"type": "local",
"module": "drivers.andor.AndorSDK2",
"class": "AndorSDK2Camera",
"arguments": {"cam_id": 0},
}
校准提示
EMCCD 增益需针对定量荧光测量进行校准。过高增益会引入时钟感应电荷(CIC)噪声和非线性。建议使用荧光珠或标准光源建立增益-信号关系曲线。
FLIR / Teledyne / Blackfly S / Grasshopper3
概述
Quatm 通过 TeledyneSpinnakerCamera 类封装 Spinnaker SDK,支持所有兼容 GenICam/GenAPI 的 FLIR/Teledyne USB3/GigE 相机。
⚙️
Blackfly S / Grasshopper3
FLIR Spinnaker 系列
| 通信 | Spinnaker SDK |
| 接口 | USB3 / GigE |
| 像素格式 | Mono8/16, Bayer |
| 触发 | 硬件/软件 |
| 帧率 | 取决于型号 |
用于实验室通用成像:MOT 监测、对准光束成像、设备状态监控。
驱动模块:TeledyneSpinnakerCamera
初始化
from quatm.drivers.teledyne.spinnaker import TeledyneSpinnakerCamera
# 列出所有可用相机
cam_list = TeledyneSpinnakerCamera.list_cameras()
# 连接指定相机(序列号或索引)
cam = TeledyneSpinnakerCamera(cam_id="serial_xxx")
# 或使用索引
cam = TeledyneSpinnakerCamera(cam_id=0)
# 配置并开始采集
cam.setup_acquisition(
exposure=0.02, # 20 ms 曝光
pixel_format="Mono8",
width=1920, height=1200,
offset_x=0, offset_y=0,
)
关键方法
| 方法 | 说明 |
|---|
list_cameras() | 枚举系统中所有 Spinnaker 相机 |
setup_acquisition(**kwargs) | 配置 ROI、曝光、像素格式等 |
start_acquisition(nframes) | 开始采集指定帧数 |
read_multiple_images(nframes) | 读取已采集图像 |
get_device_info() | 获取相机序列号、型号、固件版本 |
常用属性操作
通过 GenAPI 节点名称直接读写相机参数:
# 设置增益
cam.set_attribute("Gain", 10.0)
# 启用自动曝光
cam.set_attribute("ExposureAuto", "Continuous")
# 获取传感器温度
temp = cam.get_attribute("DeviceTemperature")
设备配置
"monitor_cam": {
"type": "local",
"module": "drivers.teledyne.spinnaker",
"class": "TeledyneSpinnakerCamera",
"arguments": {"cam_id": 0},
}
多相机同步
Spinnaker SDK 支持多相机硬件触发同步。设置 TriggerMode = On 和 TriggerSource = Line0 即可通过外部 TTL 信号实现纳秒级同步曝光。stop(): Stop capturing images.
quatm.drivers.blackfly.bfly.Camserver(name, serial)
class quatm.drivers.blackfly.bfly.Camserver(object):
def __init__(self, name, serial):
pass
def generateImageIndex(self):
pass
def run(self):
pass
def sendimage(self, im):
pass
def updateBusInfo(self):
pass
generateImageIndex(): In the current measurement, count the images. If the next run has started (either task, repetition or run changes), reset the counter (imgindex).
run(): Run loop running forever. Sends images from the camera to the imagestream and initiates reconfiguration of the camera in case properties have changed.
sendimage(im): Send Blackfly camera image via the imagestream. The image is converted to numpy array, additional information like binning, timestamp, etc., is added to a dictionary and both are sent to the imagestream.
- Args:
im - Blackfly image object. - Returns:
None
updateBusInfo(): Detect cameras on the bus and update info in properties if new camera has been found.
quatm.drivers.blackfly.bfly.pc2
class quatm.drivers.blackfly.bfly.pc2(object):
pass
- Dummy class in case driver is not installed.
Function:
Thorlabs TSI / uc480 科学相机
TLCamera ThorlabsTLCamera
⚙️
TSI 系列
Thorlabs 科学相机
| 通信 | TLCamera SDK |
| 接口 | USB3 |
| 传感器 | sCMOS / CCD |
| 支持 | ROI, binning |
适用于 SDK 级控制的高帧率科学成像。
驱动模块:ThorlabsTLCamera
from quatm.drivers.thorlabs.TLCamera import ThorlabsTLCamera
cam = ThorlabsTLCamera(serial="12345678")
cam.setup_acquisition(exposure=0.01, width=1024, height=768)
概述
Quatm 为全球 15 个主流科学相机品牌提供统一的 io.camera 接口封装,覆盖 EMCCD、sCMOS、高速 CMOS 和工业相机。所有驱动通过原生 SDK 实现高性能采集。
Andor 系列:EMCCD / sCMOS / 光谱仪
概述
Quatm 提供两套 Andor 相机驱动,通过原生 SDK 实现高性能成像控制:
| 驱动类 | SDK | 适用型号 | 接口 |
|---|
AndorSDK2Camera | atmcd32d.dll (SDK2) | iXon EMCCD, Luca, Clara | PCIe / USB |
AndorSDK3Camera | atcore.dll (SDK3) | Zyla, Neo, Marana (sCMOS) | USB3 / CameraLink |
ShamrockSpectrograph | ShamrockCIF.dll | SR-303i, SR-500i 等光谱仪 | USB |
所有类继承自 io.camera 接口,支持 ROI、binning、曝光控制和帧缓冲管理。
Andor SDK2 (EMCCD) AndorSDK2Camera
⚙️
iXon EMCCD
Andor SDK2 系列
| 通信 | DLL (atm32cd32) |
| 读出模式 | EM/传统 |
| ADC 频率 | 1/5/10 MHz |
| 像素深度 | 16-bit |
| 制冷 | TEC(≤ -100°C) |
适用于极低光信号场景(单原子/离子荧光),通过电子倍增(EM Gain)实现单光子级灵敏度。
驱动模块:AndorSDK2Camera
初始化
from quatm.drivers.andor.AndorSDK2 import AndorSDK2Camera
# 连接第一台相机
cam = AndorSDK2Camera(cam_id=0)
# 配置采集参数
cam.setup_acquisition(
exposure=0.1, # 曝光时间 (s)
em_gain=200, # EM 增益 (0-1000)
readout_rate="5MHz",# 读出速率
pre_amp_gain=2, # 前置放大增益
hsspeed=0, # 水平转移速率
temperature=-70, # 目标温度 (°C)
)
# 采集单帧
cam.start_acquisition(nframes=1)
image = cam.read_multiple_images(nframes=1)
关键参数
| 参数 | 说明 | 典型范围 |
|---|
exposure | 单帧曝光时长 | 0.001 – 3600 s |
em_gain | 电子倍增增益 | 0 – 1000(线性或真实增益模式) |
readout_rate | ADC 读出频率 | 1MHz / 5MHz / 10MHz |
temperature | 传感器目标温度 | -60 至 -100°C(取决于冷却器) |
pre_amp_gain | 前置放大器增益 | 1× – 4× |
Andor SDK3 (sCMOS) AndorSDK3Camera
⚙️
Zyla / Neo sCMOS
Andor SDK3 系列
| 通信 | DLL (atcore) |
| 传感器 | sCMOS |
| 接口 | USB3 / CameraLink |
| 像素深度 | 12/16-bit |
| 帧率 | 最高 100 fps(全分辨率) |
适用于快速序列成像和需要大视场的场景。基于 GenAPI 属性模型配置曝光、ROI 和触发。
驱动模块:AndorSDK3Camera
初始化
from quatm.drivers.andor.AndorSDK3 import AndorSDK3Camera
cam = AndorSDK3Camera(cam_id=0)
cam.setup_acquisition(
exposure=0.05,
pixel_format="Mono16",
trigger_mode="Internal",
)
Andor Shamrock 光谱仪 ShamrockSpectrograph
控制光栅选择、中心波长和狭缝宽度:
from quatm.drivers.andor.Shamrock import ShamrockSpectrograph
spec = ShamrockSpectrograph(idx=0)
spec.set_wavelength(780.24) # 中心波长 (nm)
spec.set_grating(2) # 选择光栅
spec.set_slit_width(50, port=1) # 入口狭缝 (µm)
设备配置
"emccd": {
"type": "local",
"module": "drivers.andor.AndorSDK2",
"class": "AndorSDK2Camera",
"arguments": {"cam_id": 0},
}
校准提示
EMCCD 增益需针对定量荧光测量进行校准。过高增益会引入时钟感应电荷(CIC)噪声和非线性。建议使用荧光珠或标准光源建立增益-信号关系曲线。
FLIR / Teledyne Spinnaker 系列
概述
Quatm 通过 TeledyneSpinnakerCamera 类封装 Spinnaker SDK,支持所有兼容 GenICam/GenAPI 的 FLIR/Teledyne USB3/GigE 相机。
⚙️
Blackfly S / Grasshopper3
FLIR Spinnaker 系列
| 通信 | Spinnaker SDK |
| 接口 | USB3 / GigE |
| 像素格式 | Mono8/16, Bayer |
| 触发 | 硬件/软件 |
| 帧率 | 取决于型号 |
用于实验室通用成像:MOT 监测、对准光束成像、设备状态监控。
驱动模块:TeledyneSpinnakerCamera
初始化
from quatm.drivers.teledyne.spinnaker import TeledyneSpinnakerCamera
# 列出所有可用相机
cam_list = TeledyneSpinnakerCamera.list_cameras()
# 连接指定相机(序列号或索引)
cam = TeledyneSpinnakerCamera(cam_id="serial_xxx")
# 或使用索引
cam = TeledyneSpinnakerCamera(cam_id=0)
# 配置并开始采集
cam.setup_acquisition(
exposure=0.02, # 20 ms 曝光
pixel_format="Mono8",
width=1920, height=1200,
offset_x=0, offset_y=0,
)
关键方法
| 方法 | 说明 |
|---|
list_cameras() | 枚举系统中所有 Spinnaker 相机 |
setup_acquisition(**kwargs) | 配置 ROI、曝光、像素格式等 |
start_acquisition(nframes) | 开始采集指定帧数 |
read_multiple_images(nframes) | 读取已采集图像 |
get_device_info() | 获取相机序列号、型号、固件版本 |
常用属性操作
通过 GenAPI 节点名称直接读写相机参数:
# 设置增益
cam.set_attribute("Gain", 10.0)
# 启用自动曝光
cam.set_attribute("ExposureAuto", "Continuous")
# 获取传感器温度
temp = cam.get_attribute("DeviceTemperature")
设备配置
"monitor_cam": {
"type": "local",
"module": "drivers.teledyne.spinnaker",
"class": "TeledyneSpinnakerCamera",
"arguments": {"cam_id": 0},
}
多相机同步
Spinnaker SDK 支持多相机硬件触发同步。设置 TriggerMode = On 和 TriggerSource = Line0 即可通过外部 TTL 信号实现纳秒级同步曝光。stop(): Stop capturing images.
quatm.drivers.blackfly.bfly.Camserver(name, serial)
class quatm.drivers.blackfly.bfly.Camserver(object):
def __init__(self, name, serial):
pass
def generateImageIndex(self):
pass
def run(self):
pass
def sendimage(self, im):
pass
def updateBusInfo(self):
pass
generateImageIndex(): In the current measurement, count the images. If the next run has started (either task, repetition or run changes), reset the counter (imgindex).
run(): Run loop running forever. Sends images from the camera to the imagestream and initiates reconfiguration of the camera in case properties have changed.
sendimage(im): Send Blackfly camera image via the imagestream. The image is converted to numpy array, additional information like binning, timestamp, etc., is added to a dictionary and both are sent to the imagestream.
- Args:
im - Blackfly image object. - Returns:
None
updateBusInfo(): Detect cameras on the bus and update info in properties if new camera has been found.
quatm.drivers.blackfly.bfly.pc2
class quatm.drivers.blackfly.bfly.pc2(object):
pass
- Dummy class in case driver is not installed.
Function:
Thorlabs TSI / uc480
Thorlabs 科学相机
Quatm 支持多类 Thorlabs 设备,包含位移台、光学测量仪器与相机。
TLCamera 科学相机 ThorlabsTLCamera
⚙️
TSI 系列
Thorlabs 科学相机
| 通信 | TLCamera SDK |
| 接口 | USB3 |
| 传感器 | sCMOS / CCD |
| 支持 | ROI, binning |
适用于需要 SDK 级别控制的高帧率科学成像。
驱动模块:ThorlabsTLCamera
from quatm.drivers.thorlabs.TLCamera import ThorlabsTLCamera
cam = ThorlabsTLCamera(serial="12345678")
---
## Basler — Pylon SDK 系列
⚙️
Basler ace / dart
Pylon SDK 系列
| 通信 |
Pylon SDK (GenICam) |
| 接口 |
USB3 / GigE |
| 传感器 |
CMOS |
| 像素格式 |
Mono8/16, Bayer |
| 功能 |
ROI, Binning, 硬件触发 |
工业级 CMOS 相机,适合 MOT 荧光监测、对准光束成像等常规实验室成像任务。
驱动模块:BaslerPylonCamera
```python
from quatm.drivers.Basler.pylon import BaslerPylonCamera
# 枚举全部相机
cams = BaslerPylonCamera.list_cameras()
cam = BaslerPylonCamera(cam_id=cams[0])
cam.setup_acquisition(exposure=0.02)
cam.start_acquisition(nframes=1)
Hamamatsu ORCA 系列 sCMOS
⚙️
ORCA-Fusion / ORCA-Flash4.0
Hamamatsu DCAM
| 通信 | DCAM SDK (DLL) |
| 传感器 | sCMOS |
| 像素 | 2048×2048 (Fusion) |
| 帧率 | 最高 100 fps |
| 读出噪声 | < 1.6 e⁻ |
超低噪声 sCMOS,适用于单原子/单离子荧光定量成像。
驱动模块:DCAMCamera
from quatm.drivers.DCAM.DCAM import DCAMCamera
cam = DCAMCamera(idx=0)
cam.setup_acquisition(exposure=0.1, pixel_format="Mono16")
Photometrics Prime / Evolve 系列
⚙️
Prime BSI / Evolve EMCCD
Photometrics PVCAM
| 通信 | PVCAM SDK (DLL) |
| 传感器 | 背照式 sCMOS / EMCCD |
| 接口 | PCIe / USB3 |
| 像素深度 | 16-bit |
背照式 sCMOS 提供高量子效率;EMCCD 型号支持单光子灵敏度。
驱动模块:PVCAMCamera
from quatm.drivers.Photometrics.pvcam import PVCAMCamera
cam = PVCAMCamera(cam_name="Prime_BSI_95B")
cam.setup_acquisition(exposure=0.05)
Princeton Instruments PIXIS / ProEM
⚙️
PIXIS / ProEM / IsoPlane
Princeton PICam
| 通信 | PICam SDK (DLL) |
| 传感器 | CCD / EMCCD |
| 制冷 | 液氮 / TEC |
| 接口 | PCIe / USB |
光谱学级 CCD/EMCCD,常与 Acton/IsoPlane 光谱仪配合使用。
驱动模块:PicamCamera
from quatm.drivers.PrincetonInstruments.picam import PicamCamera
cam = PicamCamera(cam_id=0)
cam.setup_acquisition(exposure=1.0) # 长曝光光谱采集
PCO edge / dimax 高速相机
⚙️
edge / dimax / pco.panda
PCO SC2
| 通信 | SC2 SDK (DLL) |
| 接口 | CameraLink HS / USB3 / GigE |
| 帧率 | 最高数千 fps |
| 传感器 | sCMOS / 高速 CMOS |
适合快速动力学过程:MOT 装载动态、离子晶体重排实时观测。
驱动模块:PCOSC2Camera
from quatm.drivers.PCO.SC2 import PCOSC2Camera
cam = PCOSC2Camera(interface="USB 3.0")
cam.setup_acquisition(exposure=0.001) # 1 ms 高速采集
Allied Vision Alvium / Mako
⚙️
Alvium / Mako / Bonito
Allied Vision Vimba X
| 通信 | VimbaX SDK (GenICam) |
| 接口 | USB3 / GigE / CameraLink |
| 传感器 | CMOS |
紧凑型工业相机,适合空间受限的光路集成。
驱动模块:AlliedVisionVimbaXCamera
from quatm.drivers.AlliedVision.VimbaX import AlliedVisionVimbaXCamera
cam = AlliedVisionVimbaXCamera(cam_id=0)
IDS uEye+ / Ensenso
⚙️
uEye+ / Ensenso 3D
IDS peak
| 通信 | IDS peak SDK |
| 接口 | USB3 / GigE |
| 传感器 | CMOS |
通用 USB/GigE 相机,包括 Ensenso 3D 立体相机。
驱动模块:GenericIDSPeakCamera
from quatm.drivers.IDS.peak import GenericIDSPeakCamera
cam = GenericIDSPeakCamera(cam_id=0)
通用配置范式
所有相机通过 device_db.py 以 type: "local" 注册:
"imaging_cam": {
"type": "local",
"module": "drivers.Basler.pylon",
"class": "BaslerPylonCamera",
"arguments": {"cam_id": 0},
}
帧采集卡
对于 Camera Link 接口的相机,Quatm 还内置 NI IMAQ、BitFlow 和 Silicon Software 帧采集卡驱动,用法与相机驱动一致——所有采集卡同样继承 io.camera 接口。