跳转到主要内容

Lima工具箱

项目描述

Lima工具箱

一套命令行工具,希望能简化Lima相机的配置和开发。

Lima toolbox in action

安装

TL;DR

在您喜欢的Python环境中,输入

pip install lima-toolbox[all]


工具箱由核心库和用于各种相机的插件组成。

可以使用以下方式安装核心:

pip安装lima-toolbox

要安装特定相机(的)支持,请使用(例如)

pip install lima-toolbox[basler,eiger]

最后,您可以在提供的相机迷你目录中找到。

欢迎实现新相机(或改进、修复现有相机)的PR。

CLI

最有用的工具可能是CLI。您可以使用它来发现网络上的相机,显示有关特定相机的信息,甚至执行捕获。

lima CLI提供全局命令,如scan,它们不针对特定相机。此外,每个相机都提供其自己的子命令集。可以通过输入lima <camera> <sub-command>(例如:lima eiger --host=bl99eiger info)来访问它们。

输入lima --help将显示帮助。帮助是上下文相关的,因此输入lima basler --help将显示basler子命令集的帮助。

相机发现

提供scan功能的相机工具箱插件允许您通过使用scan命令来发现它们

$ lima scan --table-style=box_rounded

Basler:
╭──────────────┬──────────────────────────────┬───────────────────────┬───────────┬────────────┬───────────┬────────╮
│    Class     │        Friendly name         │       Full name       │   Name    │ Serial Nb. │ User name │ Vendor │
├──────────────┼──────────────────────────────┼───────────────────────┼───────────┼────────────┼───────────┼────────┤
│ BaslerCamEmu │ Basler Emulation (0815-0000) │ Emulation (0815-0000) │ Emulation │ 0815-0000  │           │ Basler │
├──────────────┼──────────────────────────────┼───────────────────────┼───────────┼────────────┼───────────┼────────┤
│ BaslerCamEmu │ Basler Emulation (0815-0001) │ Emulation (0815-0001) │ Emulation │ 0815-0001  │           │ Basler │
├──────────────┼──────────────────────────────┼───────────────────────┼───────────┼────────────┼───────────┼────────┤
│ BaslerCamEmu │ Basler Emulation (0815-0002) │ Emulation (0815-0002) │ Emulation │ 0815-0002  │           │ Basler │
╰──────────────┴──────────────────────────────┴───────────────────────┴───────────┴────────────┴───────────┴────────╯

Eiger:
╭───────────┬───────────┬─────────────┬──────┬───────╮
│   Host    │ Alias(es) │ Address(es) │ Port │  API  │
├───────────┼───────────┼─────────────┼──────┼───────┤
│ bl04eiger │           │ 172.95.4.11 │ 8000 │ 1.6.0 │
╰───────────┴───────────┴─────────────┴──────┴───────╯

MythenSLS:
╭────────────┬─────────────┬──────┬────────┬──────────┬──────────┬───────────┬────────────╮
│    Host    │     IP      │ Port │  Type  │ #Modules │ Settings │ Threshold │ Dyn. Range │
├────────────┼─────────────┼──────┼────────┼──────────┼──────────┼───────────┼────────────┤
│ bl04mythen │ 172.95.4.10 │ 1952 │ MYTHEN │    6     │ STANDARD │   9071    │     32     │
╰────────────┴─────────────┴──────┴────────┴──────────┴──────────┴───────────┴────────────╯

在这里您可以查看3个模拟的Basler相机,一个Eiger相机和一个Mythen SLS相机可供使用。

常见的相机命令

如上所述,每个相机都提供自己的一组特定子命令。子命令infoacquire对所有相机都是通用的(尽管具体的子命令选项可能有所不同)。

用于识别相机的选项集合对每个相机都是特定的。例如,为了识别一个Eiger,您必须提供--url=<hostname>选项。

请注意,没有任何强制要求特定的相机实现任何通用子命令。但如果插件这样做的话,这被认为是一种好的做法(为了保持一致性)。

相机插件可以可选地实现scan命令。它应该提供与全局扫描相同的结果,但结果仅限于相机类型。

相机信息

使用info子命令可以检索相机的基本信息。

示例

$ lima eiger --url=bl04eiger info
    CurrImageType: 10
     DefImageType: 10
DetectorImageSize: <3110x3269>
    DetectorModel: Dectris Eiger 9M
     DetectorType: E-18-0102
   InstrumentName: instrument
     MaxImageSize: <3110x3269>
        PixelSize: (7.5e-05, 7.5e-05)
 UserDetectorName: E-18-0102

$ lima mythensls --url bl04mythen info
      CurrImageType   10
       DefImageType   10
  DetectorImageSize   <7680x1>
      DetectorModel   Mythen-II
       DetectorType   MythenSLS
     InstrumentName   instrument
       MaxImageSize   <7680x1>
          PixelSize   (1.0, 1.0)
   UserDetectorName   MythenSLS

      Detector type   MYTHEN
      Serial number   1719109785
   Software version   1867412
             Status   IDLE
      Dynamic range   32
   Energy threshold   9071
      Exposure time   1.0
   Number of frames   0
   Number of cycles   0
    Number of gates   0
             Master   NO_MASTER
    Synchronization   NONE
             Timing   AUTO_TIMING
 Delay after triger   0.0
            Readout   NORMAL_READOUT
           Settings   STANDARD
   External signals   ['GATE_OUT_ACTIVE_HIGH', 'TRIGGER_IN_RISING_EDGE', 'OFF',
                       'OFF']

相机采集

可以使用acquire子命令进行采集。

常见的选项包括-nb-frames--exposure-time--latency-time。您可以使用lima <camera> acquire --help查看完整的选项列表。

以下是一个在Eiger相机上执行采集的示例

eiger acquisition

如何为您自己的相机编写插件

您有两种选择

1. 向Lima-toolbox添加插件扩展

将相机添加到本仓库的PR中。这始终是可能的,无论您为哪种相机编写插件。

假设您想为模拟器相机创建一个插件。

首先,在src/limatb/camera中创建一个新的文件,命名为simulator.py。Lima工具箱CLI使用click库来帮助创建强大的命令行界面。

要创建一个simulator子命令,您可以使用Lima工具箱的camera装饰器(一个click.group辅助工具)并编写一个应该返回一个Lima.Interface对象的函数

# src/limatb/camera/simulator.py

from limatb.cli import camera
from Lima.Simulator import Camera, Interface


@camera(name='simulator')
def simulator():
    camera = Simulator.Camera()
    interface = Interface(camera)
    return interface

最后一件要做的事情是将新的命令注册到lima toolbox的setup.py中,如下所示

extras_require = {
    "simulator": []  #  add any extra python dependencies if necessary
}

setup(
    ...,
    entry_points={
        "lima.cli.camera": [
            ...
            "Simulator = limatb.camera.simulator:simulator [simulator]"
        ]
    }
)

这就完成了。下次您安装lima-toolbox时,应该会有一个带有默认的infoacquire子命令的simulator相机可用,这些命令是“开箱即用”的。

恭喜!您现在可以准备好向本仓库提交包含您新相机的PR了。

继续阅读以了解如何实现相机选项、关于相机装饰器的详细信息以及如何实现您自己的相机特定子命令。

现有相机的示例可以在src/limatb/camera目录中找到。

自定义选项

如果您需要向命令行添加任何选项以识别或配置您的相机,您可以使用click.option来完成。以下是一个扩展前面的示例

import click

@camera(name='simulator')
@click.option(
   '--fill-type',
   click.Choice(['gauss', 'diffraction'],
   case_sensitive=False),
   default='gauss')
def simulator(fill_type):
    camera = Simulator.Camera()
    interface = Interface(camera)
    fill_type = getattr(Lima.Simulator.FrameBuilder, fill_type.capitalize())
    frame_getter = camera.getFrameGetter()
    frame_getter.setFillType(fill_type)
    return interface

camera装饰器

@camera装饰器辅助工具提供了一个增强的click.group装饰器,默认情况下包含infoacquire子命令,并提供了将返回的接口插入到click上下文对象ctx.obj['interface']中的便利性,您可以访问您决定实现的任何相机子命令。

以下是一个实现特定子命令的示例

@simulator.command("initialize")
def initialize(self):
    # Initialization code here
    ...

扫描命令

Lima工具箱CLI实现了一个全局的scan命令,其目的是发现系统中的所有相机。

要使您系统的特定scan命令对全局扫描命令可见,您需要使用以下签名注册一个扫描函数

[async] def scan(timeout: float = None) -> beautifultable.BeautifulTable

并在setup.py中注册入口点

setup(
    ...,
    entry_points={
        "lima.cli.camera.scan": [
            ...
            "Simulator = limatb.camera.simulator:scan [simulator]"
        ]
    }
)

扫描功能可以取任何你想要的名称。如果你提供一个带有 async 关键字的协程,lima t

现在你可以在命令行输入 lima scan,摄像头

2. 在外部项目中编写 Lima-toolbox 入口点

另一个选项,如果你的相机插件可以通过 setup.py 安装,可以应用上述相同的配方,唯一的区别在于在您的 Python 检测器包中实现代码,并修改您的 setup.py。

遵循这种理念的项目的例子是 SLS Mythen

支持的相机

包含在 Lima-toolbox 中

已知的第三方相机

欢迎你添加自己的相机到这个列表。它们非常受欢迎!

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源分发

lima-toolbox-1.0.0.tar.gz (12.9 kB 查看哈希值)

上传时间

支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误记录StatusPageStatusPage状态页面