目录
一.HIK的SDK安装
在海康手册中
进行下载
在cmd中输入uname -a 查看系统型号 根据对应的linux系统 下载sdk
我直接进行dpkg安装 sudo dpkg -i MVS-3.0.1_aarch64_20240422.deb
安装完毕后进入 cd /opt/MVS/bin
输入 ./MVS 启动程序 实现摄像头的启动
二.接下来的任务是将设备接入python调用。
# -- coding: utf-8 --
import sys
import copy
import ctypes
import os
from ctypes import *
from CameraParams_const import *
from CameraParams_header import *
from MvCameraControl_header import *
from MvErrorDefine_const import *
from PixelType_const import *
from PixelType_header import *
MvCamCtrldll = ctypes.cdll.LoadLibrary(os.getenv('MVCAM_COMMON_RUNENV') + "/aarch64/libMvCameraControl.so")
# 用于回调函数传入相机实例
class _MV_PY_OBJECT_(Structure):
pass
_MV_PY_OBJECT_._fields_ = [
('PyObject', py_object),
]
MV_PY_OBJECT = _MV_PY_OBJECT_
class MvCamera():
def __init__(self):
self._handle = c_void_p() # 记录当前连接设备的句柄
self.handle = pointer(self._handle) # 创建句柄指针
@staticmethod
def MV_CC_GetSDKVersion():
MvCamCtrldll.MV_CC_GetSDKVersion.restype = c_uint
# C原型:unsigned int MV_CC_GetSDKVersion()
return MvCamCtrldll.MV_CC_GetSDKVersion()
# 枚举设备
@staticmethod
def MV_CC_EnumDevices(nTLayerType, stDevList):
MvCamCtrldll.MV_CC_EnumDevices.argtype = (c_uint, c_void_p)
MvCamCtrldll.MV_CC_EnumDevices.restype = c_uint
# C原型:int MV_CC_EnumDevices(unsigned int nTLayerType, MV_CC_DEVICE_INFO_LIST* pstDevList)
return MvCamCtrldll.MV_CC_EnumDevices(c_uint(nTLayerType), byref(stDevList))
# 创建句柄
def MV_CC_CreateHandle(self, stDevInfo):
MvCamCtrldll.MV_CC_DestroyHandle.argtype = c_void_p
MvCamCtrldll.MV_CC_DestroyHandle.restype = c_uint
MvCamCtrldll.MV_CC_DestroyHandle(self.handle)
MvCamCtrldll.MV_CC_CreateHandle.argtype = (c_void_p, c_void_p)
MvCamCtrldll.MV_CC_CreateHandle.restype = c_uint
# C原型:int MV_CC_CreateHandle(void ** handle, MV_CC_DEVICE_INFO* pstDevInfo)
return MvCamCtrldll.MV_CC_CreateHandle(byref(self.handle), byref(stDevInfo))
# 创建句柄(不生成日志)
def MV_CC_CreateHandleWithoutLog(self, stDevInfo):
MvCamCtrldll.MV_CC_DestroyHandle.argtype = c_void_p
MvCamCtrldll.MV_CC_DestroyHandle.restype = c_uint
MvCamCtrldll.MV_CC_DestroyHandle(self.handle)
MvCamCtrldll.MV_CC_CreateHandleWithoutLog.argtype = (c_void_p, c_void_p)
MvCamCtrldll.MV_CC_CreateHandleWithoutLog.restype = c_uint
# C原型:int MV_CC_CreateHandleWithoutLog(void ** handle, MV_CC_DEVICE_INFO* pstDevInfo)
return MvCamCtrldll.MV_CC_CreateHandleWithoutLog(byref(self.handle), byref(stDevInfo))
# 销毁句柄
def MV_CC_DestroyHandle(self):
MvCamCtrldll.MV_CC_DestroyHandle.argtype = c_void_p
MvCamCtrldll.MV_CC_DestroyHandle.restype = c_uint
return MvCamCtrldll.MV_CC_DestroyHandle(self.handle)
# 打开设备
def MV_CC_OpenDevice(self, nAccessMode=MV_ACCESS_Exclusive, nSwitchoverKey=0):
MvCamCtrldll.MV_CC_OpenDevice.argtype = (c_void_p, c_uint32, c_uint16)
MvCamCtrldll.MV_CC_OpenDevice.restype = c_uint
# C原型:int MV_CC_OpenDevice(void* handle, unsigned int nAccessMode, unsigned short nSwitchoverKey)
return MvCamCtrldll.MV_CC_OpenDevice(self.handle, nAccessMode, nSwitchoverKey)
# 关闭设备
def MV_CC_CloseDevice(self):
MvCamCtrldll.MV_CC_CloseDevice.argtype = c_void_p
MvCamCtrldll.MV_CC_CloseDevice.restype = c_uint
return MvCamCtrldll.MV_CC_CloseDevice(self.handle)
# 注册取流回调
def MV_CC_RegisterImageCallBackEx(self, CallBackFun, pUser):
MvCamCtrldll.MV_CC_RegisterImageCallBackEx.argtype = (c_void_p, c_void_p, c_void_p)
MvCamCtrldll.MV_CC_RegisterImageCallBackEx.restype = c_uint
# C原型:int MV_CC_RegisterImageCallBackEx(void* handle, void(* cbOutput)(unsigned char * pData, MV_FRAME_OUT_INFO_EX* pFrameInfo, void* pUser),void* pUser);
return MvCamCtrldll.MV_CC_RegisterImageCallBackEx(self.handle, CallBackFun, pUser)
# 开始取流
def MV_CC_StartGrabbing(self):
MvCamCtrldll.MV_CC_StartGrabb