海康威视接口调用报错处理

1.批量添加人员

处理方法:

注:身份证有些服务器配置的时候可能会必填,且不能重复

 2.人脸添加接口问题

图片压缩为base64后需要在10KB-200KB之间,上传的base64需要丢掉头,从/9开始,不然不显示

1)原因1:base64头不要放在base64编码中使用,即:

2)原因2:base64编码是非常长的,复制的时候,没有复制全;

3)原因3:图片太大了,要保持图片在10K-200K ;

注意压缩为base64时,压缩格式为:jpeg格式,不然不是从/9开始,图片上传上去会失真

3.平台上传图片不显示

安装一下证书,不然上传的正常图片都会显示不正常

 4.批量开卡服务器返回错误

【错误码】0x04a12601

【错误码释义】系统内部错误;
【错误建议】1.检查tomcat服务是否正运行2.请登录到运管中心查看人员发卡服务是否正常运行3.请将日志导出后发给研发人员分析处理,日志位置:hikvisionwebcomponents omcat85win64.2logscis。

 处理方法:

这个问题有点坑,我的问题仅仅就只是因为人员Id不存在导致的

5.权限接口配置问题

一、json解析错误

处理方法:

最新版本的接口版本里面的head是为null的,往head塞一个tagId就能够解析成功 

 

二、tagId报错

处理方法:

A解决. 跟批量添加人员一样处理

B解决.JSON解析失败添加了请求头,并添加了tagId,tagid用成frs 固定

6.平台缺少对应组件

当请求接口返回如下报错:
{
"code": "0x0240103a",
"msg": "No available service.The component maybe not installed.",
"data": {
"componentId": " nms ",
"serviceId": "nmsweb"
}
}
这种报错是由于平台缺少对应组件,需要进运管中心进行安装;
* 如何确定缺少哪个组件? 需要关注报错信息中 componentId 后跟的组件标识,这个就是平
台缺少的对应组件;例如上述示例中"componentId": " nms ",就表示平台缺少 nms 这个组件
* 如何安装对应组件? 进入运管中心-系统维护-安装部署-软件包管理页面,在搜索框内填入
对应的组件标识,然后选择对应的组件点击安装即可(如果无法登录运管中心或者安装过程
出现问题可以联系负责项目的海康技术协助)
* 安装后必须要的操作? 安装后需要重启 artemis,否则接口调用仍会报错;进入运管中心-
状态监控-搜索 artemis 找到 api 网关-重启 artemis

7.门禁人员权限配置问题

1. 接口添加的权限配置在平台上看不到,在平台上添加的权限接口里查不到
这个是因为接口中调用的是 acps 组件,平台上用的是 acs 组件,截止 1.3.0 版本, acps
acs 还没有做通,所以,两者之间相互查不到对应的权限配置及下载记录等。
2. 通过接口下发人脸,返回下载数量为 0
常见原因包括以下几种:
a) 对应的人员没有下发卡权限,目前设备上还是以卡为中心的默认,下发人脸需要先下发
卡权限 (taskType=1) ,通常 taskType 5 就是卡权限和人脸一起下发;
b) 接口在往非人脸设备上下发,人脸只支持下发到人脸设备,经常会有第三方不对设备类
型进行区分,把人脸往门禁控制器上下发。
3. 人脸下发失败
常见原因包括以下几种: a) 平台上录入的人脸照片质量不符合要求,这种情况接口中返回人脸下发失败的原因;
b) Ehome 协议接入的门禁人脸设备,下发人脸的时候, dac 是把人脸照片的图片 url 下发
给设备,由设备主动从 asw 下载图片,如果门禁设备在外网, asw 的多线路没有配置,
或者端口没有映射,会导致门禁设备下载人脸失败;
c) Ehome 协议接入的门禁人脸设备,下发人脸还需要在 pstor 中配置 kms 资源池和 pss
源池。
4. 添加权限配置接口返回的 taskId 查询进度无数据返回
添加权限配置接口是异步接口,也就是调用接口后,接口直接返回一个 taskId ,平台内
部在异步增加权限配置,接口返回的 taskId 是用来查询权限配置进度,查询权限配置进度的
接口基线还没有对外开放,需要安装资源包。

遇到问题可以直接官网询问官方技术人员,他们给的答案更全面一些,错误码直接复制到窗口,智能机器人会告诉您关于此个错误码的原因,记得登录注册哟

客服中心:海康开放平台

<think>好的,我现在需要解决用户在使用海康威视SDK时遇到的`AttributeError: 'NoneType' object has no attribute 'NET_DVR_SetSDKInitCfg'`错误。首先,我需要回忆一下这类错误的常见原因以及针对海康威视SDK的具体解决方法。 用户提到在调用`NET_DVR_SetSDKInitCfg`时出现错误,提示NoneType没有这个属性。通常,`NoneType`属性错误意味着某个对象没有被正确初始化,变成了`None`,而用户试图访问这个`None`对象的方法或属性。在这里,可能的场景是SDK的某个模块没有正确加载,或者函数调用前缺少必要的初始化步骤。 首先,我应该检查SDK的初始化流程。海康威视的SDK通常需要先调用`NET_DVR_Init`来进行初始化,之后才能使用其他函数。如果用户没有正确执行初始化步骤,可能会导致后续函数无法找到正确的引用,从而引发属性错误。例如,在调用`NET_DVR_SetSDKInitCfg`之前是否遗漏了`NET_DVR_Init`? 另外,SDK的DLL或so文件是否正确加载也是一个关键点。Python中使用ctypes库加载动态链接库时,如果路径错误或者文件缺失,会导致加载失败,返回None。这时,任何尝试调用该库中的函数都会触发`AttributeError`,因为对象是None。用户需要确认库文件的路径是否正确,文件名是否拼写正确,以及是否拥有访问权限。 接下来,函数的参数和调用方式是否正确?`NET_DVR_SetSDKInitCfg`可能需要特定的参数类型,比如结构体指针或者特定的整数值。如果参数传递错误,比如没有使用正确的ctypes类型(如c_void_p或POINTER结构),可能会导致函数调用失败,进而引发错误。用户需要检查参数是否符合SDK文档的要求,确保数据类型和指针的正确使用。 还有可能的问题包括SDK版本不兼容。海康威视的SDK可能有多个版本,不同版本的函数名称或参数可能有所变化。如果用户使用的SDK版本与代码不兼容,或者没有正确更新SDK文件,也可能导致找不到函数的情况。建议用户核对SDK文档,确认所使用的函数在当前版本中是否存在,或者是否有替代函数。 此外,Python环境的问题也不容忽视。例如,32位和64位的Python解释器与对应的SDK库是否匹配?如果用户使用的是64位Python,但SDK的DLL是32位的,或者反之,就会导致加载失败。需要确认两者的架构一致。 还有可能是在调用函数之前,某些必要的配置没有完成。例如,海康威视的SDK可能需要设置日志路径、网络参数等,这些配置如果缺失,可能导致初始化失败。用户应该参考官方文档,确保所有必要的配置步骤都已正确执行。 另外,用户提到的引用中的其他AttributeError问题,比如Pydantic相关的错误,虽然不完全相关,但也提示了可能的环境或依赖问题。需要检查是否有其他库冲突或环境配置错误,影响了SDK的正常加载。 最后,如果以上步骤都检查无误,问题仍然存在,可能需要查看更详细的错误日志,或者联系海康威视的技术支持,获取更专业的帮助。同时,提供一段示例代码,帮助用户对比自己的代码,找出可能的差异点。 现在,我需要将这些思考整理成一个结构化的回答,逐步引导用户排查问题,同时确保引用相关的资料,比如用户提供的三个引用链接,虽然它们不完全相关,但可以部分支持初始化或环境配置的问题。</think>### 解决海康威视SDK的`NoneType AttributeError`问题 在使用海康威视SDK(如`hikvision`)时,调用`NET_DVR_SetSDKInitCfg`等接口出现`AttributeError: 'NoneType' object has no attribute`错误,通常与**SDK未正确初始化**或**库加载失败**有关。以下是逐步排查和解决方案: --- #### 1. 确认SDK初始化顺序 海康威视SDK要求严格按顺序执行初始化: 1. **先调用`NET_DVR_Init()`**:初始化SDK全局配置。 2. **再调用`NET_DVR_SetSDKInitCfg()`**:设置初始化参数(如日志路径)。 3. 最后调用其他设备连接/控制接口。 ```python from ctypes import * # 加载SDK库(路径需根据实际情况修改) hikvision = cdll.LoadLibrary("./libhcnetsdk.so") # Linux示例 # hikvision = WinDLL("HCNetSDK.dll") # Windows示例 # 步骤1:必须优先初始化 hikvision.NET_DVR_Init() # 步骤2:再设置参数(示例为设置日志路径) hikvision.NET_DVR_SetSDKInitCfg(2, create_string_buffer(b"/tmp/sdk_logs")) ``` 若未执行`NET_DVR_Init`直接调用其他函数,会因SDK未加载而触发`NoneType`错误[^1][^2]。 --- #### 2. 检查SDK库加载状态 当`cdll.LoadLibrary`或`WinDLL`加载失败时,返回`None`对象,导致后续调用报错。 **解决方法:** - **确认库文件路径正确**:检查文件名拼写、路径权限。 - **验证架构匹配**:32位Python需加载32位SDK库,64位同理。 - **依赖项完整**:某些SDK依赖其他动态库(如`libssl.so`),需确保系统已安装。 ```python try: hikvision = cdll.LoadLibrary("HCNetSDK.dll") except Exception as e: print(f"加载失败: {e}") # 根据错误提示排查 ``` --- #### 3. 检查函数参数类型 使用`ctypes`传递参数时,需严格匹配C语言数据类型。例如: - **字符串参数**需转为`c_char_p`或`create_string_buffer`。 - **结构体参数**需用`POINTER()`定义指针。 **错误示例**(直接传递Python字符串): ```python # 错误:未将字符串转为C格式 hikvision.NET_DVR_SetSDKInitCfg(2, "/tmp/logs") ``` **正确示例**: ```python from ctypes import create_string_buffer log_path = create_string_buffer(b"/tmp/sdk_logs") hikvision.NET_DVR_SetSDKInitCfg(2, log_path) ``` --- #### 4. 更新SDK版本并验证兼容性 部分旧版SDK接口可能已弃用。从海康威视官网下载**最新SDK**,并检查: - 函数名称是否变更(如新增版本后缀)。 - 参数类型是否调整(如新增枚举值)。 --- #### 5. 检查Python对象生命周期 若SDK对象被提前释放(如被垃圾回收),可能导致后续调用时对象为`None`。可通过**显式保留引用**避免: ```python class HikSDK: def __init__(self): self._dll = cdll.LoadLibrary("HCNetSDK.dll") self._dll.NET_DVR_Init() def set_config(self, log_path): buf = create_string_buffer(log_path.encode()) self._dll.NET_DVR_SetSDKInitCfg(2, buf) # 使用类实例保持SDK对象引用 sdk = HikSDK() sdk.set_config("/tmp/logs") ``` --- #### 6. 联系技术支持 若上述步骤无效,建议: - 提供完整的错误堆栈和代码片段。 - 联系海康威视技术支持,确认SDK版本与环境的兼容性。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Da白兔萘糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值