使用 Python SDK 调试大恒相机记录

2023-12-29 17:10

本文主要是介绍使用 Python SDK 调试大恒相机记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大恒相机使用Python SDK调试记录


文章目录

  • 大恒相机使用Python SDK调试记录
  • 前言
  • 一、驱动下载及文档使用
  • 二、相机调试
    • 1.GalaxyView软件调试
    • 2.Python开发
  • 三、报错记录
  • 四、编写相机上位机界面实现多线程采集图片


前言

使用长广溪机器人作画需要用到摄像头拍摄人像照片,经过推荐,使用大恒相机,型号为MER-503-36U3C,该相机为USB彩色相机。


更新了
大恒相机多线程采集图像


一、驱动下载及文档使用

在官网下载驱动软件Galaxy_Windows_CN_32bits-64bits_1.23.2305.9161.zip并安装。
安装路径
安装完成后,在安装路径下可以看到如图所示两个文件夹 DocSamples ,Doc 文件夹内为大恒相机软件开发说明书,有 C++软件开发说明书.pdfC软件开发说明书.pdfDirectShow用户使用说明书.pdfDotNET软件开发说明书.pdfLabVIEW接口开发说明书.pdfpython接口开发说明书.pdf示例程序说明书.pdf,Samples 文件夹下为各语言开发包及示例代码。Python 开发需要将 gxipy 文件夹放到项目文件夹中,并且需要额外安装 PIL 包以处理图像格式。

二、相机调试

1.GalaxyView软件调试

打开 GalaxyView 软件,连接设备,打开相机,调试好的画面如图所示
相机画面
未调试相机参数时屏幕可能出现偏绿色,画面卡顿,频闪,颜色错乱现象,参考网上资料及售后支持,我主要调节了以下几个参数,
在属性一栏设置设备带宽限制模式为 off,
设备带宽限制模式
可以看到设备带宽限制模式对于的 API 为 DeviceLinkThroughputLimitMode,在 Python SDK 中有同名的API可以调用设置,采集控制下设置自动曝光模式为 Continuous,将自动曝光最大值(AutoExposureTimeMax)限制为 10000.0,对应的 ExposureMode 也可以在Python 中调用设置,在模拟控制下设置自动增益(GainAuto)及自动白平衡(BalanceWhiteAuto)为 Continous,查看 python 接口开发说明书可以看到,Continuous 对应值为1。GxAutoEntry
这里需要用到查找表生成工具插件,调节 Gamma亮度对比度,选择合适的值并保存,这里的属性依旧有对应的 Python API可以调用在程序中设置,
在这里插入图片描述
查找表生成工具插件
在这里插入图片描述
售后支持提到用户参数组设置,需要保存用户参数组,在Python SDK中也有对应API。

2.Python开发

相机的工作流程如图所示,
相机工作流程
Python 开发即按照该流程进行,

2.1 引入库

import gxipy as gx
device_manager = gx.DeviceManager()

2.2 枚举设备

device_manager = gx.DeviceManager()
dev_num, dev_info_list = device_manager.update_device_list()
if dev_num == 0:
sys.exit(1)

2.3 打开设备

# 方法一
# 获取设备基本信息列表
str_sn = dev_info_list[0].get("sn")
# 通过序列号打开设备
cam = device_manager.open_device_by_sn(str_sn)
# 方法二
# 通过用户 ID 打开设备
str_user_id = dev_info_list[0].get("user_id")
cam = device_manager.open_device_by_user_id(str_user_id)
# 方法三
# 通过索引打开设备
str_index = dev_info_list[0].get("index")
cam = device_manager.open_device_by_index(str_index)
# 下面为只针对千兆网相机使用的打开方式
# 方法四
# 通过 ip 地址打开设备
str_ip= dev_info_list[0].get("ip")
cam = device_manager.open_device_by_ip(str_ip)
# 方法五
# 通过 mac 地址打开设备
str_mac = dev_info_list[0].get("mac")
cam = device_manager.open_device_by_mac(str_mac)
# 关闭设备
cam.close_device()

2.4 采集控制

# 开始采集
cam.stream_on()
# 获取流通道个数
# 如果 int_channel_num == 1,设备只有一个流通道,列表 data_stream 元素个数为 1
# 如果 int_channel_num > 1,设备有多个流通道,列表 data_stream 元素个数大于 1
# 目前千兆网相机、USB3.0、USB2.0 相机均不支持多流通道
# int_channel_num = cam.get_stream_channel_num()
# 获取数据
# num 为采集图片次数
num = 1
for i in range(num):
# 打开第 0 通道数据流
raw_image = cam.data_stream[0].get_image()
if raw_image.get_status() == gx.GxFrameStatusList.INCOMPLETE:print("incomplete frame")
# 停止采集
cam.stream_off()

回调方式

# 定义采集回调函数
def capture_callback(raw_image):
if raw_image.get_status() == gx.GxFrameStatusList.INCOMPLETE:print("incomplete frame")
# 注册回调
cam.data_stream[0].register_capture_callback(capture_callback)
# 开始采集
cam.stream_on()
# 等待一段时间,这段时间会自动调用采集回调函数
time.sleep(1)
# 停止采集
cam.stream_off()
# 注销回调
cam.data_stream[0].unregister_capture_callback()

2.5 图像处理
图像处理主要分为图像格式转换,图像质量提升,图像显示和保存。
2.5.1图像格式转换
主要将 Bayer 格式图像转换成 RGB 格式图像。
1)对于彩色相机

raw_image = cam.data_stream[0].get_image()
# 保存 raw 图
raw_image.save_raw("raw_image.raw")
# 从彩色原始图像获取 RGB 图像
rgb_image = raw_image.convert("RGB")
if rgb_image is None:continue
# 从 RGB 图像数据创建 numpy 数组
numpy_image = rgb_image.get_numpy_array()
if numpy_image is None:continue
# 之后,用户可根据获取的 numpy_array 显示、保存图像

2)对于黑白相机

raw_image = cam.data_stream[0].get_image()
# 从黑白原始图像获取 numpy 数组
numpy_image = raw_image.get_numpy()
if numpy_image is None:continue
# 之后,用户可根据获取的 numpy_array 显示、保存图像

2.5.2图像质量提升

# 设置图像质量提升的参数
if cam.GammaParam.is_readable():gamma_value = cam.GammaParam.get()gamma_lut = gx.Utility.get_gamma_lut(gamma_value)
else:gamma_lut = None
if cam.ContrastParam.is_readable():contrast_value = cam.ContrastParam.get()contrast_lut = gx.Utility.get_contrast_lut(contrast_value)
else:contrast_lut = None
color_correction_param = cam.ColorCorrectionParam.get()
# 采集获取图像、格式转换
# .......
# 实现图像质量提升
rgb_image.image_improvement(color_correction_param, contrast_lut, 
gamma_lut)

2.5.3图像显示与保存
调用 PIL(Python Imaging Library)的接口 Image.fromarray(),将 numpy 数组转换成 Image 图像,显示
并保存。代码如下:
1)对于黑白相机

# 显示并保存获得的黑白图片
image = Image.fromarray(numpy_image, 'L')
image.show()
image.save("acquisition_mono_image.jpg")

2)对于彩色相机

# 显示并保存获得的彩色图片
image = Image.fromarray(numpy_image, 'RGB')
image.show()
image.save("acquisition_RGB_image.jpg")

三、报错记录

几个月之后再运行程序报错,内容为:

gxipy.gxiapi.InvalidAccess: DeviceManager.open_device_by_index:{-1004}{{-1004}

提示相机已经打开,原因可能为之前的程序运行之后没有正常关闭相机,解决办法为断电重启相机,或者重新安装相机驱动。


四、编写相机上位机界面实现多线程采集图片

大恒相机多线程采集图像


这篇关于使用 Python SDK 调试大恒相机记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/550115

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected