当前位置: 首页 > wzjs >正文

网站改版业务北京电商网站开发公司

网站改版业务,北京电商网站开发公司,深圳品牌整合营销,做网站要不要钱下载安装MVS 首先在海康机器人官网 海康机器人-机器视觉-下载中心 下载安装MVS,不同的版本,调用会有区别,本文基于这个版本: 默认路径安装完成后,在路径C:\Program Files (x86)\MVS\Development\Samples\Python\Bas…
  • 下载安装MVS

        首先在海康机器人官网  海康机器人-机器视觉-下载中心  下载安装MVS,不同的版本,调用会有区别,本文基于这个版本:

         默认路径安装完成后,在路径C:\Program Files (x86)\MVS\Development\Samples\Python\BasicDemo下的BasicDemo.py中,海康威视官方提供了基本的调用方法,本文也是基于这个修改的。

        BasicDemo.py提供了通过枚举选择相机的方法,在官方的另一个DEMO:ConnectSpecCamera.py中提供了另一种不通过枚举,直接访问特定IP相机的方法,也可以参考。

  • 创建环境和项目

        创建conda环境以及在pycharm中创建环境和安装必要的支持包,这些属于基操了,不赘述。

        将MVS所在路径下的\Development\Samples\Python\BasicDemo的CamOperation_class.py文件拷贝到创建好的空项目的文件夹中;

        将MVS所在路径下的\Development\Samples\Python\MvImport下的几个文件拷贝到创建好的空项目的文件夹中;(也可以通过在代码中添加路径的方法实现这一步)

 拷贝好文件之后的项目文件目录:

  • 初始化和创建相机的实例

官方的demo中,将相机初始化和创建为实例,这是一个标准套路。

    # 初始化SDKMvCamera.MV_CC_Initialize()# 创建相机实例cam = MvCamera()

并通过下面的代码获取所有相机的设备信息列表:

deviceList = MV_CC_DEVICE_INFO_LIST()   # 所有相机信息的列表

        然后可以通过mvcc_dev_info对列表中的相机进行设备序号、产品型号、用户定义名、IP地址等信息的查询。

deviceList.nDeviceNum  # 相机列表中的数量
user_defined_name = decoding_char(mvcc_dev_info.SpecialInfo.stGigEInfo.chUserDefinedName) # 用户自定义的相机名称
decoding_char(mvcc_dev_info.SpecialInfo.stGigEInfo.chModelName)  # 相机型号
# 相机的IP:
nip1 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0xff000000) >> 24)
nip2 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x00ff0000) >> 16)
nip3 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x0000ff00) >> 8)
nip4 = (mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x000000ff)

然后选择一个列表中的相机,定义操作实例:

obj_cam_operation = CameraOperation(cam, deviceList, nSelCamIndex)  # 操作的实例

接下来就可以使用定义好的操作实例进行常用操作:

obj_cam_operation.Open_device()  # 打开设备
obj_cam_operation.Close_device()  # 关闭设备
obj_cam_operation.Trigger_once()  # 软触发一次
obj_cam_operation.Start_grabbing()  # 开始取流
obj_cam_operation.Stop_grabbing()   # 停止取流
obj_cam_operation.Set_trigger_mode()  # 设置触发模式
obj_cam_operation.Get_parameter()   # 获取参数
obj_cam_operation.Set_parameter()  # 设置参数
obj_cam_operation.Save_jpg()   # 保存jpg文件
obj_cam_operation.Save_bmp()   # 保存bmp文件
  • 选择相机的方法

可以通过上面提供的设备序号方法选择特定的相机。

obj_cam_operation = CameraOperation(cam, deviceList, nSelCamIndex)

        在工程应用中,由于相机的在线数量可能是不确定的,那么通过设备序号的方法有可能会有不确定性。而IP地址具有唯一性和不可变性(需要在MVS软件中将相机的IP设为固定模式),用IP地址来对相机进行定义和操作比较具有实用性。

        for i in range(0, deviceList.nDeviceNum):mvcc_dev_info = cast(deviceList.pDeviceInfo[i], POINTER(MV_CC_DEVICE_INFO)).contents  # 设备信息# 相机的IP地址nip1 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0xff000000) >> 24)nip2 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x00ff0000) >> 16)nip3 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x0000ff00) >> 8)nip4 = (mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x000000ff)# 如果相机在线,则获取相机在设备列表中的序号,并定义它的操作类if nip1 == self.nip1 and nip2 == self.nip2 and nip3 == self.nip3 and nip4 == self.nip4:self.obj_cam_operation = CameraOperation(cam, deviceList, i)self.n_gide_device = i  # GidE设备序号self.user_defined_name = self.decoding_char(mvcc_dev_info.SpecialInfo.stGigEInfo.chUserDefinedName)  # 设备的用户定义名称(支持中文名称)self.model_name = self.decoding_char(mvcc_dev_info.SpecialInfo.stGigEInfo.chModelName)  # 相机的型号breakif i == deviceList.nDeviceNum - 1:print("未发现指定的相机!")

        另外,如果每台相机都定义了唯一的用户定义名,也可以通过用户定义名来区分相机。

for i in range(0, deviceList.nDeviceNum):mvcc_dev_info = cast(deviceList.pDeviceInfo[i], POINTER(MV_CC_DEVICE_INFO)).contents  # 设备信息# 相机的用户自定义名称user_defined_name = self.decoding_char(mvcc_dev_info.SpecialInfo.stGigEInfo.chUserDefinedName)  # 设备的用户定义名称(支持中文名称)# 如果相机在线,则获取相机在设备列表中的序号,并定义它的操作类if user_defined_name == self.user_defined_name:self.obj_cam_operation = CameraOperation(cam, deviceList, i)self.n_gide_device = i  # GidE设备序号nip1 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0xff000000) >> 24)  # IP1nip2 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x00ff0000) >> 16)  # IP2nip3 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x0000ff00) >> 8)  # IP3nip4 = (mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x000000ff)  # IP4self.model_name = self.decoding_char(mvcc_dev_info.SpecialInfo.stGigEInfo.chModelName)  # 相机的型号breakif i == deviceList.nDeviceNum - 1:print("未发现指定的相机!")
  •  完整代码 

        下面一段代码,演示了如何通过IP地址定义一台相机,并将其设置为软触发后获取3帧图像,然后将获取到的图像保存。   

# -*- coding: utf-8 -*-
import time
from CamOperation_class import CameraOperation
from MvCameraControl_class import *
from MvErrorDefine_const import *
from CameraParams_header import *
import ctypes# 示例代码(基于MVS SDK)# 将海康的GidE相机定义为类
class HiKGidECamera(MvCamera):def __init__(self, nip1, nip2, nip3, nip4):super().__init__()self.n_gide_device = -1   # GidE设备序号self.user_defined_name = ""  # 用户自定义名称self.model_name = ""   # 相机型号self.nip1 = nip1  # IP地址1self.nip2 = nip2  # IP地址2self.nip3 = nip3  # IP地址3self.nip4 = nip4  # IP地址4self.obj_cam_operation = None   # 相机操作类self.isOpen = False  # 相机是否打开self.isGrabbing = False  # 相机是否正在采集图像self.is_trigger_mode = False  # 是否触发模式# 注册相机def log_on(self):"""注册相机,如果相机在线,则获取相机在设备列表中的序号:return: 0表示成功,其他表示失败"""deviceList = MV_CC_DEVICE_INFO_LIST()  # 所有相机的设备信息列表# ######如果需要枚举GigE设备、USB设备、Gentl设备、CXP设备、XOF设备############### n_layer_type = (MV_GIGE_DEVICE | MV_USB_DEVICE | MV_GENTL_CAMERALINK_DEVICE#                         | MV_GENTL_CXP_DEVICE | MV_GENTL_XOF_DEVICE)################################################################### 本例只使用GigE相机n_layer_type = MV_GIGE_DEVICE  # 只使用GigE相机ret = MvCamera.MV_CC_EnumDevices(n_layer_type, deviceList)  # 返回值为0表示成功if ret != 0:print("查找设备失败。 错误码[0x%x]" % ret)return -1if deviceList.nDeviceNum == 0:  # 在线设备数量print("未发现设备!")return -1for i in range(0, deviceList.nDeviceNum):mvcc_dev_info = cast(deviceList.pDeviceInfo[i], POINTER(MV_CC_DEVICE_INFO)).contents  # 设备信息# 相机的IP地址nip1 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0xff000000) >> 24)nip2 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x00ff0000) >> 16)nip3 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x0000ff00) >> 8)nip4 = (mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x000000ff)# 如果相机在线,则获取相机在设备列表中的序号,并定义它的操作类if nip1 == self.nip1 and nip2 == self.nip2 and nip3 == self.nip3 and nip4 == self.nip4:self.obj_cam_operation = CameraOperation(cam, deviceList, i)  # 定义相机操作的实体类self.n_gide_device = i  # GidE设备序号self.user_defined_name = self.decoding_char(mvcc_dev_info.SpecialInfo.stGigEInfo.chUserDefinedName)  # 设备的用户定义名称(支持中文名称)self.model_name = self.decoding_char(mvcc_dev_info.SpecialInfo.stGigEInfo.chModelName)  # 相机的型号return 0if i == deviceList.nDeviceNum - 1:print("未发现指定的相机!")return -1# 打开相机def open_device(self):if self.isOpen == True:print("相机已打开!")return MV_E_CALLORDER   # 返回错误信息ret = self.obj_cam_operation.Open_device()if ret != 0:print("打开设备失败,错误码:", ret)self.isOpen = Falseelse:self.isOpen = True# 关闭相机def close_device(self):if self.isOpen == False:print("相机已关闭!")return MV_E_CALLORDER   # 返回错误信息ret = self.obj_cam_operation.Close_device()if ret != 0:print("关闭设备失败,错误码:", ret)self.isOpen = Trueelse:self.isOpen = False# 设置连续取流模式def set_continue_mode(self):ret = self.obj_cam_operation.Set_trigger_mode(False)if ret != 0:print("设置连续模式失败:" , self.ToHexStr(ret))# ch:设置软触发模式 | en:set software trigger mode# 设置软触发模式def set_software_trigger_mode(self):ret = self.obj_cam_operation.Set_trigger_mode(True)if ret != 0:print("设置软触发模式失败::", self.ToHexStr(ret))# 软触发一次def trigger_once(self):ret = self.obj_cam_operation.Trigger_once()if ret != 0:print("单次软触发失败:",self.ToHexStr(ret))# 开始取流def start_grabbing(self):# ret = cam.MV_CC_StartGrabbing()ret = self.obj_cam_operation.Start_grabbing(0)if ret != 0:print("开始取流失败:" + self.ToHexStr(ret))else:self.isGrabbing = True# time.sleep(5)# 停止取流def stop_grabbing(self):ret = self.obj_cam_operation.Stop_grabbing()if ret != 0:print("停止取流失败:", self.ToHexStr(ret))else:self.isGrabbing = False# 解码操作def decoding_char(self, c_ubyte_value):c_char_p_value = ctypes.cast(c_ubyte_value, ctypes.c_char_p)try:decode_str = c_char_p_value.value.decode('gbk')  # Chinese charactersexcept UnicodeDecodeError:decode_str = str(c_char_p_value.value)return decode_str# 将返回的错误码转换为十六进制显示def ToHexStr(self, num):chaDic = {10: 'a', 11: 'b', 12: 'c', 13: 'd', 14: 'e', 15: 'f'}hexStr = ""if num < 0:num = num + 2 ** 32while num >= 16:digit = num % 16hexStr = chaDic.get(digit, str(digit)) + hexStrnum //= 16hexStr = chaDic.get(num, str(num)) + hexStrreturn hexStrif __name__ == "__main__":# 初始化SDKMvCamera.MV_CC_Initialize()# 创建相机实例cam = HiKGidECamera(192,168,100,100)  # 创建基于IP地址的相机实例ret = cam.log_on()   # 注册相机if ret == 0:cam.open_device()  # 打开相机ret = cam.obj_cam_operation.Set_trigger_mode(True)  # 设置软触发模式cam.start_grabbing()   # 开始取流i = 0while cam.isGrabbing:cam.trigger_once()   # 软触发一次cam.obj_cam_operation.b_save_bmp = True  # 将保存图像标志置位print("保存成功", ret)time.sleep(1)i += 1if i == 3:cam.stop_grabbing()   # 停止取流cam.close_device()    # 关闭相机else:print("相机注册失败或不在线")# 反初始化SDKMvCamera.MV_CC_Finalize()

        需要注意的是,厂家提供的SDK中,CamOperation_class.py的这两行代码有点小bug,修改一下才能正常保存。

修改后的代码: 

# 释放缓存
# self.obj_cam.MV_CC_FreeImageBuffer(stOutFrame)
# 在释放缓存之前先保存
if self.b_save_bmp:   # 如果有保存需求self.Save_Bmp()   # 执行保存self.b_save_bmp = False   # 复位保存标志
if self.b_save_jpg:self.Save_jpg()self.b_save_jpg = False# 释放缓存
self.obj_cam.MV_CC_FreeImageBuffer(stOutFrame)

原代码的问题在于:获取到帧以后立即就将缓存释放了,所以无法进行保存操作。


文章转载自:

http://szL9yS8v.Lzjxn.cn
http://LiHWipYw.Lzjxn.cn
http://YZG3ICQU.Lzjxn.cn
http://LesgZYFD.Lzjxn.cn
http://AjHy07zI.Lzjxn.cn
http://AAMS0wEA.Lzjxn.cn
http://qihtk69N.Lzjxn.cn
http://4VDaXp7N.Lzjxn.cn
http://37NuSu2D.Lzjxn.cn
http://T1z2JcBA.Lzjxn.cn
http://pJsE89RJ.Lzjxn.cn
http://HXdoPC6b.Lzjxn.cn
http://QDkYt5IT.Lzjxn.cn
http://nKWDtDVn.Lzjxn.cn
http://WkJ8GRTM.Lzjxn.cn
http://NRVWDjFM.Lzjxn.cn
http://EWxccBwW.Lzjxn.cn
http://3yji7PAw.Lzjxn.cn
http://pzeQ950L.Lzjxn.cn
http://7vi7w6Sy.Lzjxn.cn
http://u64JRua7.Lzjxn.cn
http://sTLUScFs.Lzjxn.cn
http://shJymFoN.Lzjxn.cn
http://78ybc5pS.Lzjxn.cn
http://6OQK7NWm.Lzjxn.cn
http://jpB9f8Xw.Lzjxn.cn
http://mVcnD5Su.Lzjxn.cn
http://VaCKZAH8.Lzjxn.cn
http://kHFGNMIo.Lzjxn.cn
http://BvFCANcm.Lzjxn.cn
http://www.dtcms.com/wzjs/690454.html

相关文章:

  • 企业网站用免费程序长安公司网站制作
  • 沈阳网站排名seo亚洲最新永久在线观看
  • 教育网站赏析旅游网站毕业设计和论文
  • 哪里有免费的网站推广软件啊想代理个网站建设平台
  • 江西萍乡做网站公司临沂网络建设
  • 一般网站建设步骤做农药的网站
  • 网站怎么做cp备案号宿迁百度seo
  • 女性门户网站模板百度一键安装
  • 长春建设厅网站做微信问卷调查的网站
  • 如何将网站添加到域名发帖平台
  • wordpress 高仿 主题下载谷歌优化招聘
  • 用流媒体做的电台网站游戏ui设计是做什么的
  • 专业网站开发软件中国企业500强完整榜单
  • 网站建设规划书有哪些内容保定网站制作
  • 国际阿里网站首页建设在盐城做网站的网络公司电话
  • 网站seo规划中山网站建设是什么
  • 电子商务网站建设课程设计总结做网站环境配置遇到的问题
  • 网站建设与管期末试题网站友链交换平台
  • 东莞企业网站建立报价男人快乐的浏览器
  • 网站作品怎么做链接品牌网站设计标准
  • 智能网站建设软件广东网站开发公司
  • 18岁以上站长统计常州百度推广优化
  • 网站建设哪公司好免费网站建设一级
  • 哪种语言的网站 做seo更好网站开发网站模板设计
  • 杭州网站模板建站嘉兴企业做网站
  • 网站发布与推广深圳有名设计公司有哪些
  • 网站建设朋友圈怎么写许昌网站建设公司排行榜
  • 手机微信网站怎么做网站精简布局
  • 做视频网站什么平台好营销活动怎么做吸引人
  • 网站开发的标准流程wordpress制作页面