OpenFlexure显微镜的Python客户端代码
openflexure-microscope-pyclient的Python项目详细描述
OpenFlexure显微镜的Python客户端
OpenFlexure Microscope通常由两个软件控制OpenFlexure Microscope Server,它是用Python编写的,运行在嵌入式的Raspberry Pi上,和{a3}这是一个用电子编写的图形界面,可以在树莓Pi上运行,也可以通过网络连接在另一台计算机上运行。然而,如果你想写你自己的脚本来执行特定的实验或协议,最好不要把它们嵌入eV或者把它们打包成插件。这个库的存在使得从一个简单的Python脚本(既可以在Raspberry Pi上运行,也可以通过网络运行)来轻松地控制显微镜。我特别喜欢用笔记本电脑上的Jupyter笔记本电脑,因为它可以让我边走边绘图和显示图像。在
安装
这是一个单独的文件模块,所以现在您只需复制Python文件。希望我们能在不久的将来把它设置成一个pip安装包。在
使用
连接显微镜
您可以通过指定主机名或IP地址或使用MDN连接到显微镜。如果您的网络相对简单,并且您可以在eV的“附近设备”部分看到您的显微镜,那么mDNS是连接显微镜的零故障方式:
importopenflexure_microscope_clientasofm_clientmicroscope=ofm_client.find_first_microscope()
如果您的网络比较复杂,或者您知道显微镜的地址,则可以使用主机名或IP地址进行连接。默认情况下,您的显微镜将声明自己为microscope.local
,尽管这也依赖于mDNS,因此如果上面的方法不起作用,microscope.local
也可能不起作用。在
检查连接
通常,我会运行一些命令来检查显微镜是否正常工作:
pos=microscope.positionstarting_pos=pos.copy()pos['x']+=100microscope.move(pos)assertmicroscope.position==pospos['x']-=100microscope.move(pos)assertmicroscope.position==starting_pos# Check the microscope will autofocusret=microscope.autofocus()# Acquire an image for sanity-checking tooimage=microscope.grab_image()f,ax=plt.subplots(1,1)ax.imshow(np.array(image))#print(image.metadata)print("Active microscope extensions")forkinmicroscope.extensions.keys():print(k)
运行此块后,您应该会看到当前活动的扩展列表,以及显微镜拍摄的图片。考虑到我们只是自动对焦,这个图像应该是好的和锐利的!在
基本命令
有几个基本命令内置为MicroscopeClient
对象的方法:
position
是一个属性,它返回一个包含'x'
、'y'
和'z'
组件的字典,给出阶段的位置。在get_position_array()
返回具有相同位置的3元素numpy
数组。在move(position)
接受position
返回的3元素数组或字典,并执行绝对移动move_rel(displacement)
执行相对移动(即提供0将不会移动该轴)capture_image()
将从相机获取一个新图像,并将其作为PIL
图像对象返回grab_image()
将返回相机在其MJPEG预览流中发送的下一个图像(即,它比capture_image()
更快但质量更低)grab_image_array()
以numpy
数组的形式返回图像。在autofocus()
运行快速自动对焦例程,就像单击eV中的“自动对焦”按钮一样
扩展
要运行显微镜扩展提供的方法,可以使用extensions
字典来发出get
或{
microscope.extensions["your.extension.name"]["link_name"].get()microscope.extensions["your.extension.name"]["link_name"].post_json({"key":"value"})
- 项目
标签: