【HIKROBOT】海康机器人:工业相机SDK二次开发

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

引言

海康机器人官网链接:https://www.hikrobotics.com/cn
根据购买设备的型号下载用户说明书

笔者实验室购买了两款,一款GigE网口接口的,一款USB接口

GigE网口接口
【HIKROBOT】海康机器人:工业相机SDK二次开发
USB接口:MV-CA050-20UC
【HIKROBOT】海康机器人:工业相机SDK二次开发
【HIKROBOT】海康机器人:工业相机SDK二次开发

1 软件安装步骤

1.1 SDK安装

服务支持”>“下载中心”>“机器视觉”中下载MVS客户端安装包及SDK开发包。

1.1.1 Ubuntu18.04系统安装

【HIKROBOT】海康机器人:工业相机SDK二次开发
下载安装压缩包,并解压
【HIKROBOT】海康机器人:工业相机SDK二次开发
查看README如下:

安装包对应的操作系统
 arm架构64位系统:
    MVS-2.1.2_aarch64_20221024.deb
    MVS-2.1.2_aarch64_20221024.tar.gz
arm架构32位系统:
    MVS-2.1.2_armhf_20221024.deb
    MVS-2.1.2_armhf_20221024.tar.gz
    MVS-2.1.2_arm-none_20221024.tar.gz
x86架构64位系统:
    MVS-2.1.2_i386_20221024.deb
    MVS-2.1.2_i386_20221024.tar.gz
x86架构32位系统:
    MVS-2.1.2_x86_64_20221024.deb
    MVS-2.1.2_x86_64_20221024.tar.gz

说明:

树莓派选armhf架构,jetson选aarch64,pc机选x86_64,i386是32位pc。

armhf和aarch64区别就是armhf是armv7架构,如树莓派。aarch64是armv8架构,如jetson nano。

arm-none只有Samples,没有编译好的bin,也没有dpkg包,海康也没有提供源码,所以用不上。

1. 根据系统名称选择相对应的安装包:在终端中输入“uname -a”命令,根据输出的信息选择安装包,例如:输出的信息包含aarch64就选择aarch64的安装包;
2. .deb安装包通过dpkg命令安装,主要应用于ubuntu等系统;
3. .tar.gz安装包是一个压缩包,通tar命令解压后,再执行setup.sh脚本进行安装。

【HIKROBOT】海康机器人:工业相机SDK二次开发
实际安装:

方法1:

根据自己的系统选择解压相应的压缩包,打开INSTALL查看安装步骤

To install the MVS Camera Software  Suite in /opt/MVS   # 软件安装目录
follow these steps:

  1. Gaining root privileges and input password:
       sudo su or su root  # 进入root权限进行安装

  2. Change to the directory which contains this INSTALL file, e.g.: 
       cd ~/MVS-1.0.0_x86_64  # 进入文件夹

  3. Running the configuration scripts source
  	 ./setup.sh  # 执行安装

方法2:

或者使用deb的方式安装,方便卸载。tar和deb安装都可以

sudo dpkg -i MVS-2.1.2_x86_64_20221208.deb
# 删除用以下命令
sudo dpkg -r mvs

如下图所示:
【HIKROBOT】海康机器人:工业相机SDK二次开发
编译demo1

source ~/.bashrc
cd /opt/MVS/Samples/64/GrabImage
make
./GrabImage

【HIKROBOT】海康机器人:工业相机SDK二次开发

编译demo2

source ~/.bashrc
cd /opt/MVS/Samples/64/ImageProcess
make
./ImageProcess

【HIKROBOT】海康机器人:工业相机SDK二次开发
【HIKROBOT】海康机器人:工业相机SDK二次开发
打开当前目录的image.bmp照片,说明sdk的开发环境测试成功。

开启网络巨帧

# 查看网卡名
ifconfig

【HIKROBOT】海康机器人:工业相机SDK二次开发

# 开启网络巨帧
sudo ifconfig enp0s31f6 mtu 9000
# 再次使用ifconfig查看,mtu等于9000,即设置成功
ifconfig
# 永久设置网卡开启巨帧
sudo vim /etc/network/interfaces
# 将sudo ifconfig enp0s31f6 mtu 9000写入文件

【HIKROBOT】海康机器人:工业相机SDK二次开发
【HIKROBOT】海康机器人:工业相机SDK二次开发

1.1.2 Windows 11 系统安装

【HIKROBOT】海康机器人:工业相机SDK二次开发
解压并运行.exe文件进行安装,安装后打开软件,如图所示:
【HIKROBOT】海康机器人:工业相机SDK二次开发
Windows下设置静态ip和打开网络巨帧设置
参考链接🔗关于海康工业相机连接电脑时出现链接速度低于1Ggps解决办法
【HIKROBOT】海康机器人:工业相机SDK二次开发

1.2 打开软件

Ubuntu 系统

sudo su # 须进入root权限才能打开软件

  # Execute /opt/MVS/bin/MVSPlayer to test your cameras.
  cd /opt/MVS/bin  # 进入软件安装目录
  ./MVS  # 执行软件

【HIKROBOT】海康机器人:工业相机SDK二次开发
GigE相机
【HIKROBOT】海康机器人:工业相机SDK二次开发
USB相机
【HIKROBOT】海康机器人:工业相机SDK二次开发

1.3 软件功能说明

【HIKROBOT】海康机器人:工业相机SDK二次开发
【HIKROBOT】海康机器人:工业相机SDK二次开发
【HIKROBOT】海康机器人:工业相机SDK二次开发

2 python+opencv:二次开发SDK

项目目录结构
【HIKROBOT】海康机器人:工业相机SDK二次开发
其中MVImport从安装目录中拷贝,如下图所示,GrabImage_opencv.py:自定义代码(基于python+OpenCV实现取流,显示、保存视频等),util用于放入自定义的其他功能性脚本
【HIKROBOT】海康机器人:工业相机SDK二次开发

2.1 相机控制步骤

相机控制分成枚举、打开、参数设置、关闭,销毁句柄五个步骤
【HIKROBOT】海康机器人:工业相机SDK二次开发
参考链接:https://blog.csdn.net/qq_23107577/article/details/113984935文章来源地址https://www.toymoban.com/news/detail-446773.html

2.1 主代码GrabImage_opencv.py

# -- coding: utf-8 --
"""
2023.03.14
author:alian
function  海康威视摄像头取流
总结海康相机的取流步骤如下:
1 枚举
2 打开
3 参数设置
4 取流
5 关闭
6 销毁句柄
"""
import sys
import threading
import os
import termios
import time
import cv2
import numpy as np
from ctypes import *

sys.path.append("/opt/MVS/Samples/64/Python/MvImport")  # 导入相应SDK的库,实际安装位置绝对路径
from MvImport.MvCameraControl_class import *


def creat_video():  # 创建视频
    time_stamp = time.time()
    video_name = time.strftime("%Y%m%d%H%M%S", time.localtime(time_stamp))
    writer = cv2.VideoWriter("%s.mp4" % video_name, cv2.VideoWriter_fourcc(*"mp4v"), 30, (img_w, img_h))
    return writer,time_stamp


# opencv转换显示
def work_thread_opencv(cam=0, pData=0, nDataSize=0,video_length=None):
    img_w = 1920
    img_h = 1080
    stFrameInfo = MV_FRAME_OUT_INFO_EX()
    memset(byref(stFrameInfo), 0, sizeof(stFrameInfo))
    # 定义视频对象输出,自定义一段时间后新建视频文件,时间间隔设置为video_length
    writer, time_stamp = creat_video()
    while True:
        ret = cam.MV_CC_GetOneFrameTimeout(pData, nDataSize, stFrameInfo, 1000)
        if ret == 0:
            print("get one frame: Width[%d], Height[%d], PixelType[0x%x], nFrameNum[%d]" % (
            stFrameInfo.nWidth, stFrameInfo.nHeight, stFrameInfo.enPixelType, stFrameInfo.nFrameNum))
            print(time.time()-time_stamp)
            # 设置视频采集时长不大于video_length(以小时为单位)
            if video_length!=None and time.time()-time_stamp > video_length*3600:
                writer.release()
                writer, time_stamp = creat_video()
            # 设置相机输出像素格式,用OpenCV显示和保存视频数据
            img = np.asarray(pData)  # 读取帧
            img = img.reshape(stFrameInfo.nHeight, stFrameInfo.nWidth, -1)
            img = cv2.resize(img,(img_w,img_h))
            img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
            import tkinter as tk  # 获取屏幕尺寸,用于随屏幕分辨率自适应显示
            root = tk.Tk()
            width = root.winfo_screenwidth()
            height = root.winfo_screenheight()
            root.destroy()
            cv2.imshow('View', cv2.resize(img, (width, height)))
            writer.write(img)  # 写入视频数据
            # 按Q退出
            if cv2.waitKey(24) & 0xFF == ord('q'):
                break
        else:
            print("no data[0x%x]" % ret)
    cv2.destroyAllWindows()  # 释放所有显示图像窗口
    sys.exit()

def press_any_key_exit():  # 任意按键退出程序
    fd = sys.stdin.fileno()
    old_ttyinfo = termios.tcgetattr(fd)
    new_ttyinfo = old_ttyinfo[:]
    new_ttyinfo[3] &= ~termios.ICANON
    new_ttyinfo[3] &= ~termios.ECHO
    termios.tcsetattr(fd, termios.TCSANOW, new_ttyinfo)
    try:
        os.read(fd, 7)
    except:
        pass
    finally:
        termios.tcsetattr(fd, termios.TCSANOW, old_ttyinfo)

if __name__ == "__main__":
    deviceList = MV_CC_DEVICE_INFO_LIST()
    tlayerType = MV_GIGE_DEVICE | MV_USB_DEVICE
    # 1 枚举设备 | en:Enum device
    ret = MvCamera.MV_CC_EnumDevices(tlayerType, deviceList)
    if ret != 0:
        print("enum devices fail! ret[0x%x]" % ret)
        sys.exit()
    if deviceList.nDeviceNum == 0:
        print("find no device!")
        sys.exit()
    print("Find %d devices!" % deviceList.nDeviceNum)

    nConnectionNum = 0
    # 2 打开
    # 2.1 创建相机实例 | en:Creat Camera Object
    cam = MvCamera()
    # ch:选择设备并创建句柄| en:Select device and create handle
    stDeviceList = cast(deviceList.pDeviceInfo[int(nConnectionNum)], POINTER(MV_CC_DEVICE_INFO)).contents
    ret = cam.MV_CC_CreateHandle(stDeviceList)
    if ret != 0:
        print("create handle fail! ret[0x%x]" % ret)
        sys.exit()
    # 2.2 打开设备 | en:Open device
    ret = cam.MV_CC_OpenDevice(MV_ACCESS_Exclusive, 0)
    if ret != 0:
        print("open device fail! ret[0x%x]" % ret)
        sys.exit()
    # 3 参数设置
    # 3.1 设置触发模式为off | en:Set trigger mode as off
    ret = cam.MV_CC_SetEnumValue("TriggerMode", MV_TRIGGER_MODE_OFF)
    if ret != 0:
        print("set trigger mode fail! ret[0x%x]" % ret)
        sys.exit()
    
    # 3.2 获取数据包大小 | en:Get payload size
    stParam = MVCC_INTVALUE()
    memset(byref(stParam), 0, sizeof(MVCC_INTVALUE))
    ret = cam.MV_CC_GetIntValue("PayloadSize", stParam)
    if ret != 0:
        print("get payload size fail! ret[0x%x]" % ret)
        sys.exit()
    nPayloadSize = stParam.nCurValue
    # 4 开始取流 | en:Start grab image
    ret = cam.MV_CC_StartGrabbing()
    if ret != 0:
        print("start grabbing fail! ret[0x%x]" % ret)
        sys.exit()
    # 将PayloadSize的uint数据转为可供numpy处理的数据,后面就可以用numpy将其转化为numpy数组格式。
    data_buf = (c_ubyte * nPayloadSize)()

    try:
        hThreadHandle = threading.Thread(target=work_thread_opencv, args=(cam, data_buf, nPayloadSize))
        hThreadHandle.start()
        hThreadHandle.join()
    except:
        print("error: unable to start thread")
    # 5 关闭
    # 5.1 停止取流 | en:Stop grab image
    ret = cam.MV_CC_StopGrabbing()
    if ret != 0:
        print("stop grabbing fail! ret[0x%x]" % ret)
        del data_buf
        sys.exit()

    # 5.2 关闭设备 | Close device
    ret = cam.MV_CC_CloseDevice()
    if ret != 0:
        print("close deivce fail! ret[0x%x]" % ret)
        del data_buf
        sys.exit()

    # 6 销毁句柄 | Destroy handle
    ret = cam.MV_CC_DestroyHandle()
    if ret != 0:
        print("destroy handle fail! ret[0x%x]" % ret)
        del data_buf
        sys.exit()
    del data_buf

到了这里,关于【HIKROBOT】海康机器人:工业相机SDK二次开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Python 实现海康机器人工业相机 MV-CU060-10GM 的实时显示视频流及拍照功能

    一、背景介绍 1、最近项目中需要给客户对接海康机器人工业相机 MV-CU060-10GM; 2、客户要求通过部署的管理平台,可以在页面上实现如下功能: 1)相机视频流开始预览; 2)相机视频流停止预览; 3)相机拍照功能。 需求背景:客户需要对生产的产品进行定期抽样质检,其中

    2024年02月08日
    浏览(53)
  • 机器视觉海康工业相机SDK参数设置获取

    视觉人机器视觉培训-缺陷检测项目-食品行业草鸡蛋外观检测 相机参数类型可分为六类,除 command 参数外,每一类都有其对应的设置与获取函数接口。 表 1 参数类型及对应函数接口介绍 *详细函数接口可参考 SDK 手册: ​C:Program Files (x86)MVSDevelopmentDocumentations 相机参数类型

    2024年02月07日
    浏览(72)
  • C# 开源SDK 工业相机库 调用海康相机 大恒相机

    c# 相机库,含海康、大恒品牌2D相机的常用功能。 底层采用回调+信号量模式封装 ,最大程度减小线程资源,提高采图效率。 开源地址 :https://gitee.com/laomaogu/mgcamctrl 现只兼容了大恒和海康,都是常用的 其他相机,看我老板啥时候换品牌吧,或者换老板? 当然如果小伙伴感兴

    2024年04月26日
    浏览(26)
  • 海康威视相机SDK二次开发(JAVA语言)

    前言 有个项目需要使用java程序读取海康威视的相机图片。相机通过以太网连接服务器,部署在服务器上的java程序将相机拍摄的画面保存在指定路径下。 海康威视提供了sdk开发包,可以在官网中下载,windows和linux系统都有。但是开发包中给出的示例代码,无法满足实际需要,

    2024年04月29日
    浏览(30)
  • 海康工业相机SDK + OpenCV实例(4):相机参数设置详解

    前文海康工业相机SDK + OpenCV实例(3):相机初始化Bug调试讲述了相机初始化可能遇到的问题。本文讲解海康工业相机设置参数的相关接口,其中,会重点讲解 自动曝光时间调整亮度 , 图像对比度调整 。 海康SDK提供一系列参数设置的接口,本节主要讲解几个万能接口的使用,

    2024年02月11日
    浏览(41)
  • 海康威视监控相机的SDK与opencv调用(非工业相机)

    本篇主要对海康威视的监控相机的SDK回调进行研究,并于opencv结合,保存图像,以供后续其他处理,开发语言为C++ 2.1 海康SDK介绍 海康SDK下载地址 根据自身编译环境,下载对应的SDK,需要注意的是,不要和工业相机SDK相混淆,工业相机好像是MVS是什么玩意儿,现在暂时没研究

    2024年02月04日
    浏览(38)
  • 海康工业相机SDK连接demo,Qt界面显示

    在机器视觉开发过程中,经常使用工业相机采集图像,以下采用海康机器人提供的SDK开发demo,使用语言C++,界面显示使用的Qt。SDK来自MVS 3.1版本中附属的Development文件夹。完整的项目链接地址为: 海康工业相机SDK的Demo源代码C++版本 附录海康工业相机的命名方式: 海康工业相

    2024年02月13日
    浏览(37)
  • 【记录】海康相机(SDK)二次开发时的错误码

    在进行海康sdk二次开发的时候,经常碰到各种错误,遂结合官方文档和广大网友的一些经验,把这些错误码记录一下,方便查找。笔者使用的SDK版本是HCNetSDKV6.1.9.4。 错误类型 错误码 错误信息 NET_DVR_NOERROR 0 没有错误。 NET_DVR_PASSWORD_ERROR 1 用户名密码错误。注册时输入的用户名

    2024年04月08日
    浏览(65)
  • (三)Qt+OpenCV调用海康工业相机SDK抓拍示例

    提示:这里是该系列文章的所有文章的目录 第一章: (一)Qt+OpenCV调用海康工业相机SDK示例开发 第二章: (二)Qt多线程实现海康工业相机图像实时采集 第三章: (三)Qt+OpenCV调用海康工业相机SDK抓拍示例 在这系列文章中,讲述了Qt下结合OpenCV与海康工业相机的使用,对

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

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

    2024年02月03日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包