Basler工业相机python开发(Pypylon)

这篇具有很好参考价值的文章主要介绍了Basler工业相机python开发(Pypylon)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

做项目过程中需要对Basler相机进行二次开发,所以写一些记录给大家参考。
附上一些在其他地方看到的参考资料:

  1. Basler 工业相机与Python开发链接: link
  2. Basler 工业相机 Python开发采集数据、保存照片: link
  3. pypylon模块调用basler相机采集数据: link

一、相机类 InstantCamera

1. class InstantCamera (InstantCamera Params_Params)
# 提供方便的访问相机设备。

• 为访问相机功能建立一个单一的访问点。这个类可以在没有任何参数的情况下使用。相机使用相机设备的默认配置,可被覆盖。
• 处理Pylon设备的生存期,可被覆盖。
• 自动处理打开和关闭一个Pylon设备。
• 处理块数据解析,自动返回抓取结果中的块数据。
• 自动处理事件抓取,为事件回调提供了一个方便的接口,可被覆盖。
• 处理物理相机设备移除。
• 处理缓冲区的创建、重用和销毁。
• 抓取可以在调用者的上下文中完成,也可以使用额外的抓取循环线程。
• Instant Camera类可以通过派生或注册事件处理程序对象进行扩展。
其中主要的函数:

def Attach(self,*args)->"void":
# 将Pylon设备连接到InstantCamera

参数:
• pDevice-要连接的Pylon设备。
• cleanupProcedure-如果cleanupProcedure等于Cleanup_Delete,则在销毁Instant Camera对象时销毁Pylon设备。
• 如果当前连接了一个Pylon设备,则根据先前设置的清理过程值,将其销毁(DestroyDevice())或移除(DetachDevice())。
• 如果pDevice参数为NULL,则不再执行任何操作。OnAttach配置事件被触发。
• 附加新的Pylon设备。如果传递的Pylon设备是打开的,则相机事件的回调将在相机节点映射上注册。(这可能会失败)
如果传递的Pylon设备是打开的,则注册一个设备移除回调(这可能会失败)。访问修饰符(参见IPylonDevice:: open())将被取代为相机参数。
• OnAttached配置事件被触发。来自事件调用的可能的c++异常被捕获并忽略。通知所有事件处理程序。

Post:
• 如果传递给Pylon设备的指针为NULL,则Instant Camera对象处于“无设备连接”状态。
• 如果指针不是NULL,则连接传递的Pylon设备。
• 如果设置的清除过程等于Cleanup_Delete,则在销毁Instant Camera对象或附加新设备时销毁Pylon设备。
• 如果传递的Pylon设备是打开的,并且回调注册失败,则Instant Camera对象处于“未连接设备”状态。
• 设置了“由用户打开”标志,以防止在附加的Pylon设备已经打开时,在stopgrab()上关闭Pylon设备。
• 如果传递的Pylon设备打开,则可能引发异常。如果传递的Pylon设备关闭或为NULL,则不抛出C+异常。
• 该方法使用GetLock()提供的Lock进行同步。

def IsPylonDeviceAttached(self)->"bool":
# 返回Instant Camera对象的Pylon设备连接状态
def RegisterImageEventHandler(self,pImageEventHandler:"ImageEventHandler",mode: "Pylon::ERegistrationMode",cleanupProcedure:"Pylon::ECleanup")->"void":
# 将图像事件处理程序添加到已注册图像事件处理程序对象的列表。

• 如果mode = RegistrationMode_ReplaceAll,则已注册的图像事件处理程序列表将被清除.
•如果指针 pImageEventHandler 不是NULL,它将被追加到图像事件处理程序列表中.

参数:
• pImageEventHandler 图像事件的接收者。
• mode 指示如何注册新的imageEventHandler。
• cleanupProcedure 如果=Cleanup_Delete,则在不再需要时删除传递的事件处理程序。
• imageEventHandler在图像相关事件时被注册和调用。
• 不抛出c++异常,除非内存分配失败。此方法使用内部图像事件处理程序注册表进行同步锁。

def StartGrabbing(self,*args)->"void":
# 开始抓取最大数量的图像

• 扩展起始抓取(EStrategy, EGrabLoop)的一些图像来抓取。如果已达到传递的图像计数,则自动调用stopgrabs。
• 根据抓取策略对图像进行计数。跳过的图像不会被考虑在内。
• 当抓取的图像少于MaxNumBuffer参数的值时,分配的缓冲区数量减少到maxImages,并且抓取策略为GrabStrategy_OneByOne。

参数:
• maxImages要抓取的图像的计数。该值必须大于零。
• strategy抓取策略。更多信息请参见Pylon::InstantCamera::EStrategy。
• grabLoopType如果grabLoopType等于GrabLoop_ProvidedByInstantCamera,则使用一个额外的抓取循环线程来运行抓取循环。该方法使用GetLock()提供的锁进行同步。

def RetrieveResult(self,*args)->"bool":
# 根据策略检索抓取结果,如果还不可用则等待

• 释放通过抓取结果的内容。
• 如果没有附加Pylon设备或抓取未启动,该方法立即返回“false”。
• 如果还没有,请等待抓取结果。在等待过程中,摄像头的访问不被锁定。相机事件被处理。
• 仅当使用相机事件时:传入的相机事件被处理。
• 根据所应用的策略,每次呼叫检索一个抓取结果。
• 仅当使用chunk模式时:进行chunk数据解析。抓取结果数据使用块数据更新。
• 图像事件OnImagesSkipped被触发,如果抓取结果已经根据策略跳过。当事件调用触发异常时,事件处理程序的通知将停止。
• 如果抓取结果可用,则触发图像事件onimagegrabs。
当事件调用触发异常时,事件处理程序的通知将停止。
• 如果已抓取图像的最大数量,则调用stopgrabs()停止抓取。
需要检查抓取结果所代表的抓取是否成功,参见CGrabResultData::GrabSucceeded()。

参数:
• timeoutMs: 等待抓取结果的超时值(以毫秒为单位)或INFINITE值。
• grabResult: 接收抓取结果。
• timeoutHandling: 如果timeoutHandling = TimeoutHandling_ThrowException,则在超时时抛出超时异常。

返回:
• 如果调用成功检索抓取结果为True,否则为false。
• 没有其他线程在等待结果。这将是使用即时相机抓取循环线程的情况。

Post:
• 如果抓取结果已被检索,则从输出队列中删除一张图像,并在grabResult参数中返回。
• 如果没有抓取结果,在grabResult参数中返回一个空的抓取结果。
• 如果已抓取图像的最大数量,则抓取停止。
• 如果启用了相机事件处理,并且收到了相机事件,则至少一个或多个相机事件消息已被处理。
• 即时相机对象在错误后仍然有效。如果抛出一个异常则抓取结束。
• 该方法在不等待时使用GetLock()提供的锁进行同步。

def GetTLNodeMap(self)->"GENAPI_NAMESPACE::INodeMap&":
# 提供对所附Pylon设备的传输层节点映射的访问

返回:
• 对连接的Pylon设备的传输层节点映射的引用,或者如果不支持传输层节点映射,则对空节点映射的引用。
• GENAPI_NAMESPACE::INodeMap::GetNumNodes()方法可以用来检查节点映射是否为空。
• 前提:已连接相机设备。
• 即时相机对象在错误后仍然有效。该方法使用GetLock()提供的锁进行同步。

2. class DeviceInfo(CInfoBase):
# 保存关于枚举设备的信息

设备枚举过程创建一个CDeviceInfo对象列表(Pylon::DeviceInfoList_t)。每个CDeviceInfo对象存储设备的信息。
在设备枚举过程中检索信息(ITransportLayer::EnumerateDevices resp. CTlFactory:: EnumerateDevices)

def GetUserDefinedName(self)->"Pylon::String_t":
# 检索用户定义的名称(如果存在),此属性由Key::UserDefinedNameKey标识
def GetDeviceFactory(self)->"Pylon::String_t":
# 检索能够创建此设备的传输层的标识符。此属性由Key::DeviceFactoryKey标识
3. class TlFactory(object):
# 传输层工厂,创建、销毁和枚举传输层及其设备
def GetInstance()->"Pylon::CTlFactory&":
# 检索传输层工厂单例
def CreateFirstDevice(self,*args)->"Pylon::IPylonDevice*":
# 从设备信息对象中创建第一个找到的设备,注入额外的GenICam XML定义字符串
def CreateDevice(self,*args)->"Pylon::IPylonDevice*":

二、图像事件处理类 ImageEventHandler

4. class ImageEventHandler(object):
# 图像事件处理程序基类
def OnImagesSkipped(self, camera:"InstantCamera", countOfSkippedImages:"size_t")->"void":
# 当使用GrabStrategy_LatestImageOnly策略或GrabStrategy_LatestImages策略跳过图像时,将调用此方法

参数:
• camera: 调用的源。
• countOfSkippedImages: 跳过的图像数量。不包括在驱动程序中运行缓冲区时丢失的图像数量。
• 来自此调用的异常将继续传播。事件处理程序的通知在异常触发时停止。
• 此方法在相机对象的锁之外调用,但在图像事件处理程序注册表的锁内部调用。

def OnImageGrabbed(self, camera:"InstantCamera", grabResult:"GrabResult")->"void":
# 在抓取图像时调用此方法

传递的抓取结果智能指针总是引用抓取结果数据对象。在访问抓取结果数据之前,需要检查抓取状态。更多信息请参见CGrabResultData::GrabSucceeded(), CGrabResultData::GetErrorCode()和CGrabResultData::GetErrorDescription()。
参数:
• camera :调用的源。
• grabResult :抓取结果数据。
• 来自此调用的异常将继续传播。事件处理程序的通知在异常触发时停止。
• 此方法在相机对象的锁之外调用,但在图像事件处理程序注册表的锁内部调用。

def OnImageEventHandlerRegistered(self,camera:"InstantCamera")->"void":      
# 当注册了图像事件处理程序时,将调用此方法
def DestroyImageEventHandler(self)->"void":
# 销毁图像事件处理程序。 
5. class GrabResult(object):
# 一个智能指针,它持有一个获取结果数据的引用

该类用于分配摄像机的抓取结果数据。它控制引用缓冲区的重用和生命周期。
当所有引用缓冲区的智能指针超出作用域时,被引用的缓冲区被重用或摧毁。数据和持有的缓冲区在它产生的相机对象被销毁后仍然有效。
注意: 当抓取结果从未被释放时,例如当放入容器时,抓取将在输入队列欠压时停止。
CGrabResultPtr类提供了一个强制转换操作符,允许将抓取结果直接传递给以const Image&作为参数的函数或方法。
例如,图像保存功能或图像格式转换方法。
注意: 返回的IImage引用只有在它来自的CGrabResultPtr对象没有被销毁的情况下才有效。
引用相同抓取结果的CGrabResultPtr实例可以在任何线程上下文中使用。

6. class PylonImage(PylonImageBase):
# 描述图像

• 自动处理图像缓冲区的大小和生命周期。
• 允许接管抓取结果的缓冲区,这是防止其重用,只要需要。
• 允许连接用户缓冲区或第三方软件包提供的缓冲区。
• 提供加载和保存不同文件格式的图像的方法。
• 作为图像格式转换器’ CImageFormatConverter '的主要目标格式。
• 简化平面图像的工作。
• 简化aoi的提取,例如缺陷的缩略图。
• 缓冲区处理:
如果需要,由CPylonImage类自动创建的缓冲区或托管的抓取结果缓冲区将被更大的缓冲区替换。分配的缓冲区的大小永远不会减少。引用的用户缓冲区永远不会被更大的缓冲区自动替换。引用的抓取结果缓冲区永远不会被重用。有关详细信息,请参阅Reset()方法。Release()方法可用于分离用户缓冲区、释放托管的抓取结果缓冲区或释放已分配的缓冲区。

7. class PylonImageBase(IReusableImage):
将图像保存到磁盘。将图像转换为需要保存的格式。

这是一个调用CImagePersistence::Save()的方便方法。如果需要,图像将自动转换为新图像并保存。更多信息参见CImagePersistence:: CanSaveWithoutConversion()。如果图像文件格式支持,位深度大于8位的图像将以16位位深度存储。在这种情况下,像素数据是MSB对齐的。如果需要对转换进行更多的控制,可以使用CImageFormatConverter类在保存输入图像之前对其进行转换。

参数:
imageFileFormat: 保存图像的文件格式
filename: 图像的名称和路径
pOption 额外的选项
pre:
要保存的图像像素类型必须是Pylon::CImageFormatConverter支持的输入格式。如果保存图像失败,则抛出异常。

总结

后续会更新对basler相机控制的具体代码。文章来源地址https://www.toymoban.com/news/detail-557689.html

到了这里,关于Basler工业相机python开发(Pypylon)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 02 | python调用处理工业相机

    设备:海康威视的相机 参考地址: 具体路径是: C:Program Files (x86)MVSDevelopmentSamples 用以方便二次开发中对接口的调用;python语言的接口可以参考C版本; 参考地址: C:Program Files (x86)MVSDevelopmentDocumentations python中支持的接口以及参数可以从相应文件中查取,参考路径:

    2024年02月05日
    浏览(58)
  • 嵌入式安卓开发:使用Camera2获取相机

    从 Android 5.0 开始, Google 引入了一套全新的相机框架 Camera2(android.hardware.camera2) ,并且废弃了旧的相机框架 Camera1(android.hardware.Camera) 。 Camera2相比于Camera的API不仅大幅提高了Android系统拍照的功能,还能支持RAW照片输出,甚至允许程序调整相机的对焦模式、曝光模式、快

    2024年02月09日
    浏览(84)
  • (一)Qt+OpenCV调用海康工业相机SDK示例开发

    提示:这里是该系列文章的所有文章的目录 第一章: (一)Qt+OpenCV调用海康工业相机SDK示例开发 第二章: (二)Qt多线程实现海康工业相机图像实时采集 近期在Qt环境下进行海康工业相机的使用开发,发现海康提供的示例没有Qt的demo,而其中有基于MFC框架的示例,所以在这

    2024年02月03日
    浏览(100)
  • Linux下海康威视工业相机的SDK二次开发

    1.1安装包的下载和解压 去 官网 下载两个软件安装,分别是客户端和开发环境。 (这里我们下载V2.1.1(Linux)和Runtime组件包(Linux)): 工业相机文档/安装包中的不同安装版本安装包里有各个系统及arm开发板使用的安装包,选择相应的安装包进行安装 (这里我们选择最后一

    2024年02月09日
    浏览(41)
  • 【HIKROBOT】海康机器人:工业相机SDK二次开发

    海康机器人官网链接:https://www.hikrobotics.com/cn 根据购买设备的型号下载用户说明书 笔者实验室购买了两款,一款GigE网口接口的,一款USB接口 GigE网口接口 USB接口:MV-CA050-20UC 服务支持”“下载中心”“机器视觉”中下载MVS客户端安装包及SDK开发包。 1.1.1 Ubuntu18.04系统安装 下

    2024年02月05日
    浏览(62)
  • Python 调用海康机器人工业相机

    一、前期准备 1、python环境搭建 2、安装MVS软件 3、网上博客参考 1)RTSP(Runtime Stream Protocol)协议方向 (很遗憾,此路不通!!!) 因为我们用的 海康机器人工业相机 MV-CU060-10GM 这款相机,不支持 RTSP 协议。 如下博客适用于 海康威视摄像头,并不适用于 海康工业相机,如

    2024年02月16日
    浏览(48)
  • 【重明】机器视觉QT/C++实现工业相机二次开发框架

    工业相机二次开发是机器视觉行业必不可少的技能之一。 而如何实现一个框架,能够兼容所有工业相机二次开发,从而支持多种类型的工业相机,就是机器视觉行业的进阶技能了。 重明工业相机二次开发项目就是在实现相机二开框架的基础上,完成了海康工业相机的二次开

    2024年02月02日
    浏览(51)
  • 海康机器人工业相机 Win10+Qt+Cmake 开发环境搭建

    参考这个链接安装好MVS客户端 Qt新建一个c++项目 cmakeList中添加海康机器人的库,如下: main.cpp中添加以下代码 运行程序,出现以下内容则说明安装库成功

    2024年02月11日
    浏览(54)
  • 海康威视工业相机Linux SDK开发指南详细步骤(Ubuntu20.04+单目、双目相机单次、连续拍照)

    由于实验需要使用双目相机同步采集图像,实验室准备的设备是海康威视的工业相机,对其进行二次开发,其中花了大部分时间查找资料,以及代码进行反复调试,最后到达了想要的效果,并写博客记录一下。 首先是资料的查找,我们要注意的是海康威视一共有两个官网,一

    2024年02月16日
    浏览(144)
  • 【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)

      由于学校要求暑期实习,于是找了一位学长开的公司,接了一个项目,是 对海康威视工业相机(MV_CE200_10GM)进行二次开发,读取其图像并做分析处理。 于是花了一点时间查找的相关资料并记录一些 入门要点 。   想先说说一些 “尝试授人与渔” 的话,也是自己的一

    2024年02月04日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包