跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python 调用海康 SDK 实现工业相机实时预览全流程

本方案基于 Python 调用海康威视 SDK 实现工业相机的连接、登录及实时视频流预览。流程涵盖环境初始化、设备登录、预览参数配置、数据回调注册及资源释放。重点在于正确处理回调函数以避免性能瓶颈,并通过错误码机制确保异常捕获。适用于需要集成视觉采集功能的自动化检测或监控场景。

忘忧发布于 2026/2/21更新于 2026/6/620 浏览

环境准备

在开始之前,需要从海康威视官网下载对应型号的工业相机 SDK 开发包。解压后通常包含动态库(.dll 或.so)和头文件。建议将 SDK 放置在无中文或特殊字符的本地路径下,避免加载时出现异常。

安装 Python 绑定库(以 hikvision 为例):

pip install hikvision

初始化与登录

SDK 使用的第一步是初始化环境并设置日志。这里通过 NET_DVR_Init 启动服务,同时指定日志级别和保存路径,方便后续排查问题。

from hikvision import NetSdk

NetSdk.NET_DVR_Init()
# 日志级别设为 3,保存到当前目录下的 sdk_log 文件夹
NetSdk.NET_DVR_SetLogToFile(3, "./sdk_log/")

接下来配置设备信息并登录。注意 IP、端口及账号密码需与实际设备一致,字符串编码建议使用 UTF-8。

device_info = NetSdk.NET_DVR_DEVICEINFO_V40()
login_params = NetSdk.NET_DVR_USER_LOGIN_INFO()
login_params.bUseTLS = 0
login_params.sDeviceAddress = "192.168.1.64".encode('utf-8')
login_params.wPort = 8000
login_params.sUserName = "admin".encode('utf-8')
login_params.sPassword = "password".encode('utf-8')

user_id = NetSdk.NET_DVR_Login_V40(login_params, device_info)
if user_id < 0:
    print("Login failed, error code:", NetSdk.NET_DVR_GetLastError())

启动实时预览

登录成功后,即可配置预览参数。窗口句柄设为 0 表示不显示 UI 窗口,仅获取数据流;通道号和码流类型根据实际设备调整。

preview_params = NetSdk.NET_DVR_PREVIEWINFO()
preview_params.hPlayWnd = 0          # 窗口句柄,0 表示不显示
preview_params.lChannel = 1          # 通道号
preview_params.dwStreamType = 0      # 主码流
preview_params.dwLinkMode = 0        # TCP 模式

realplay_handle = NetSdk.NET_DVR_RealPlay_V40(user_id, preview_params)
if realplay_handle < 0:
    print("Preview failed, error code:", NetSdk.NET_DVR_GetLastError())

回调处理数据

视频流数据需要通过回调函数接收。注册 NET_DVR_SetStandardDataCallBack 后,当有数据到达时会触发该函数。注意回调内不要执行耗时操作,否则会影响帧率。

def data_callback(lRealHandle, dwDataType, pBuffer, dwBufSize, pUser):
    if dwDataType == NetSdk.NET_DVR_STREAMDATA:
        print("Received data size:", dwBufSize)
        # 此处可添加图像解码或处理逻辑

NetSdk.NET_DVR_SetStandardDataCallBack(realplay_handle, data_callback, None)

资源释放与异常处理

程序结束前务必按顺序清理资源:先停止预览,再注销登录,最后清理 SDK 环境。每一步都要检查返回值,利用 NET_DVR_GetLastError 获取具体错误码。

# 正常退出流程
NetSdk.NET_DVR_StopRealPlay(realplay_handle)
NetSdk.NET_DVR_Logout(user_id)
NetSdk.NET_DVR_Cleanup()

# 异常捕获示例
error_code = NetSdk.NET_DVR_GetLastError()
if error_code != 0:
    print("Error occurred, code:", error_code)

注意事项

  • 版本匹配:SDK 版本需与相机固件保持一致,跨版本可能导致兼容性问题。
  • 网络配置:工业相机通常需要手动配置子网掩码、网关等参数以确保连通性。
  • 性能优化:实时预览的数据回调函数应轻量,建议配合队列进行异步处理,避免阻塞主线程。

目录

  1. 环境准备
  2. 初始化与登录
  3. 日志级别设为 3,保存到当前目录下的 sdk_log 文件夹
  4. 启动实时预览
  5. 回调处理数据
  6. 资源释放与异常处理
  7. 正常退出流程
  8. 异常捕获示例
  9. 注意事项
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • RAG 入门教程:LangChain 框架 v0.2 介绍
  • 二分查找算法详解:基础查找与边界定位
  • 解析前端反爬日志:精准补全 Window 对象缺失属性
  • 基于 C++ 手写 HTTP 服务器:从请求解析到响应构建
  • Python+AI 学习路线:从基础到实战
  • 基于 SSM 框架的医院医药药品管理系统设计与实现
  • 神经网络 Embedding 原理及作用详解
  • 红黑树从概念到手撕实现:平衡树的折中智慧
  • Python pip 包管理工具全面使用教程
  • 谷歌 SEO 为何离不开高质量内容创作
  • AIGC 实战:优化图文生成 20 秒与 30 秒视频的成本差异
  • AI 辅助构建高可用电商系统核心架构实战
  • Qt Creator 配置 GitHub Copilot AI 编程插件指南
  • Effective Modern C++ 条款 35:基于任务与基于线程编程的对比与实践
  • Meta-Llama-3-8B-Instruct 多轮对话实测与本地部署
  • AI 大模型提示工程技术指南:从基础概念到思维链应用
  • 字节跳动前端开发工程师面试指南与高频考点
  • C++ set 与 multiset 容器详解
  • Clawdbot Web Chat 搭建:Qwen3-32B 模型加载、API 路由与 UI 定制
  • OpenClaw 配置与 QQ 机器人接入实战指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online