返回顶部
首页 > 资讯 > 后端开发 > Python >Python 调用海康机器人工业相机
  • 788
分享到

Python 调用海康机器人工业相机

python机器人开发语言 2023-09-14 08:09:12 788人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

一、前期准备 python环境搭建 安装MVS软件 网上博客参考 1)RTSP(Runtime Stream Protocol)协议方向 (很遗憾,此路不通!!!) 因为我们用的 海康机器人工业相机 MV-CU060-10GM 这款相机,不

一、前期准备

python环境搭建

安装MVS软件

网上博客参考
1)RTSP(Runtime Stream Protocol)协议方向
(很遗憾,此路不通!!!)
因为我们用的 海康机器人工业相机 MV-CU060-10GM 这款相机,不支持 RTSP 协议。

如下博客适用于 海康威视摄像头,并不适用于 海康工业相机,如果是使用海康威视摄像头的小伙伴可以参考下。

参考博客:海康威视摄像头对接SDK实时预览功能和抓拍功能,懒癌福利,可直接CV

2)Java实现方向
(不能完全满足客户需求,此路不全通!!!)

使用Java目前参考官网的示例,实现了图片抓取,并上传的功能,但是没有实现视频流的实时获取和显示的功能。

如果需求只是获取图片,不要求视频流实时显示,可以通过Java就可以实现。

3)Python实现方向
(目前,网上没有直接能完全满足上述三个需求的,本人通过借鉴、整合,结合flask框架实现的。)

参考博客如下:
python语言下使用OpenCV接口cv2.VideoCapture()接口调用海康机器人工业相机 (此篇博文可以重点看!!!)

通过python调用海康威视工业摄像头并进行图像存储,同时使用opencv实时图像显示(数据流问题已解决)

python调用海康工业相机并用opencv显示(整体实现)(此篇博文可以重点看!!!)

pyQt5 学习使用 笔记 六 pyQt5+opencv 显示海康GIGE相机动态视频流 (该方式虽然实现了视频的实时显示,但是,无法被给前端直接调用)

WEB实时显示摄像头图像(python) (此篇博文可以重点看!!!)

4)Flask 的相关教程和博客
https://www.w3cschool.cn/flask/
Https://dORMousehole.readthedocs.io/en/latest/
https://blog.csdn.net/weixin_44239541/article/details/89390139
https://zhuanlan.zhihu.com/p/104273184
https://blog.csdn.net/tulan_xiaoxin/article/details/79132214

二、Python 代码实现

测试代码

1)抓取图片测试代码

前提条件:将 *C:\Program Files (x86)\MVS\Development\Samples\Python* 目录下的 MvImport 目录,copy到自己的工程目录下,创建测试文件 TestGrabImage.py

代码如下:

# -- coding: utf-8 --import cv2import sysimport copyimport msvcrtimport numpy as npfrom ctypes import *sys.path.append("./MvImport")from MvCameraControl_class import *if __name__ == "__main__":    deviceList = MV_CC_DEVICE_INFO_LIST()    tlayerType = MV_GIGE_DEVICE | MV_USB_DEVICE    # ch:枚举设备 | 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)    for i in range(0, deviceList.nDeviceNum):        mvcc_dev_info = cast(deviceList.pDeviceInfo[i], POINTER(MV_CC_DEVICE_INFO)).contents        if mvcc_dev_info.nTLayerType == MV_GIGE_DEVICE:            print ("\ngige device: [%d]" % i)            strModeName = ""            for per in mvcc_dev_info.SpecialInfo.stGigEInfo.chModelName:                strModeName = strModeName + chr(per)            print ("device model name: %s" % strModeName)            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)            print ("current ip: %d.%d.%d.%d\n" % (nip1, nip2, nip3, nip4))        elif mvcc_dev_info.nTLayerType == MV_USB_DEVICE:            print ("\nu3v device: [%d]" % i)            strModeName = ""            for per in mvcc_dev_info.SpecialInfo.stUsb3VInfo.chModelName:                if per == 0:                    break                strModeName = strModeName + chr(per)            print ("device model name: %s" % strModeName)            strSerialNumber = ""            for per in mvcc_dev_info.SpecialInfo.stUsb3VInfo.chSerialNumber:                if per == 0:                    break                strSerialNumber = strSerialNumber + chr(per)            print ("user serial number: %s" % strSerialNumber)    nConnectionNum = 0    if int(nConnectionNum) >= deviceList.nDeviceNum:        print ("intput error!")        sys.exit()    # ch:创建相机实例 | 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()    # ch:打开设备 | 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()    # ch:探测网络最佳包大小(只对GigE相机有效) | en:Detection network optimal package size(It only works for the GigE camera)    if stDeviceList.nTLayerType == MV_GIGE_DEVICE:        nPacketSize = cam.MV_CC_GetOptimalPacketSize()        if int(nPacketSize) > 0:            ret = cam.MV_CC_SetIntValue("GevSCPSPacketSize", nPacketSize)            if ret != 0:                print ("Warning: Set Packet Size fail! ret[0x%x]" % ret)        else:            print ("Warning: Get Packet Size fail! ret[0x%x]" % nPacketSize)    # ch:设置触发模式为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()    # ch:获取数据包大小 | 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    # ch:开始取流 | en:Start grab image    ret = cam.MV_CC_StartGrabbing()    if ret != 0:        print ("start grabbing fail! ret[0x%x]" % ret)        sys.exit()    stDeviceList = MV_FRAME_OUT_INFO_EX()    memset(byref(stDeviceList), 0, sizeof(stDeviceList))    data_buf = (c_ubyte * nPayloadSize)()    ret = cam.MV_CC_GetOneFrameTimeout(byref(data_buf), nPayloadSize, stDeviceList, 1000)    if ret == 0:        print ("get one frame: Width[%d], Height[%d], nFrameNum[%d]" % (stDeviceList.nWidth, stDeviceList.nHeight, stDeviceList.nFrameNum))        nRGBSize = stDeviceList.nWidth * stDeviceList.nHeight * 3        stConvertParam=MV_SAVE_IMAGE_PARAM_EX()        stConvertParam.nWidth = stDeviceList.nWidth        stConvertParam.nHeight = stDeviceList.nHeight        stConvertParam.pData = data_buf        stConvertParam.nDataLen = stDeviceList.nFrameLen        stConvertParam.enPixelType = stDeviceList.enPixelType        stConvertParam.nImageLen = stConvertParam.nDataLen        stConvertParam.nJpgQuality = 70        stConvertParam.enImageType = MV_Image_Jpeg        stConvertParam.pImageBuffer = (c_ubyte * nRGBSize)()        stConvertParam.nBufferSize = nRGBSize        # ret = cam.MV_CC_ConvertPixelType(stConvertParam)        print(stConvertParam.nImageLen)        ret = cam.MV_CC_SaveImageEx2(stConvertParam)        if ret != 0:            print ("convert pixel fail ! ret[0x%x]" % ret)            del data_buf            sys.exit()        file_path = "AfterConvert_RGB2.jpg"        file_open = open(file_path.encode('ascii'), 'wb+')        img_buff = (c_ubyte * stConvertParam.nImageLen)()        cdll.msvcrt.memcpy(byref(img_buff), stConvertParam.pImageBuffer, stConvertParam.nImageLen)        file_open.write(img_buff)    print ("Save Image succeed!")    # ch:停止取流 | 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()    # ch:关闭设备 | Close device    ret = cam.MV_CC_CloseDevice()    if ret != 0:        print ("close deivce fail! ret[0x%x]" % ret)        del data_buf        sys.exit()    # ch:销毁句柄 | 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

2)Python+Qt 实现视频流实时显示测试代码
前提条件:将 *C:\Program Files (x86)\MVS\Development\Samples\Python* 目录下的 MvImport 目录,copy到自己的工程目录下,创建测试文件 TestVideoStream.py

代码如下:

# -- coding: utf-8 --import cv2from PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtCore import pyqtSignalfrom PyQt5.QtGui import *import numpy as np #from CameraControl_header import MV_CC_DEVICE_INFO_LIST#from mainWindow import Ui_MainWindow  # 导入创建的GUI类import sysimport threadingimport msvcrtfrom ctypes import *sys.path.append("./MvImport")from MvCameraControl_class import *from Ui_MainWindow  import *from CameraParams_header import * class mywindow(QtWidgets.QMainWindow, Ui_MainWindow):    sendADDDeviceName = pyqtSignal() #定义一个添加设备列表的信号。    deviceList = MV_CC_DEVICE_INFO_LIST()    g_bExit = False    # ch:创建相机实例 | en:Creat Camera Object    cam = MvCamera()     def connect_and_emit_sendAddDeviceName(self):        # Connect the sendAddDeviceName signal to a slot.        self.sendAddDeviceName.connect(self.SelectDevice)        # Emit the signal.        self.sendAddDeviceName.emit()     def __init__(self):        super(mywindow, self).__init__()        self.setupUi(self)        self.connect_and_emit_sendAddDeviceName()        self.butopenCam.clicked.connect(lambda:self.openCam(self.camSelect.currentData()))        self.butcloseCam.clicked.connect(self.closeCam)         # setting main window geometry        desktop_geometry = QtWidgets.QApplication.desktop()  # 获取屏幕大小        main_window_width = desktop_geometry.width()  # 屏幕的宽        main_window_height = desktop_geometry.height()  # 屏幕的高        rect = self.geometry()  # 获取窗口界面大小        window_width = rect.width(

来源地址:https://blog.csdn.net/john_and_jane/article/details/130747233

--结束END--

本文标题: Python 调用海康机器人工业相机

本文链接: https://lsjlt.com/news/406996.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python 调用海康机器人工业相机
    一、前期准备 python环境搭建 安装MVS软件 网上博客参考 1)RTSP(Runtime Stream Protocol)协议方向 (很遗憾,此路不通!!!) 因为我们用的 海康机器人工业相机 MV-CU060-10GM 这款相机,不...
    99+
    2023-09-14
    python 机器人 开发语言
  • Python调用海康SDK对接摄像机
    以前做过的项目都是通过 ffmpeg c++ 来捕获摄像机的 RSTP 视频流来处理视频帧,抽空看了一下海康的SDK说明,使用 python ctypes方式实现了对海康SDK DLL的调用, 可以对...
    99+
    2023-09-29
    python ffmpeg 开发语言 视频 实时音视频
  • C#调用海康工业相机SDK采集图像并在Halcon窗口中显示方式
    目录调用海康工业相机SDK采集图像并在Halcon窗口中显示引用动态链接库创建相机类(1) 查找设备列表(2) 打开设备(3) 连续采集(4) 停止采集(5) 关闭设备(6) 转成H...
    99+
    2023-02-26
    C#海康SDK C#调用海康工业相机 C# SDK采集图像
  • 用python获取海康摄像机视频
    要调用海康摄像机视频,需要使用海康SDK提供的API。以下是一个简单的示例代码,可以连接到海康摄像机并获取视频流: ```python import sys from PyQt5.QtWidgets import QApplication,...
    99+
    2023-09-14
    python 开发语言
  • telegram创建机器人,接口调用机器人
    【开发云】年年都是折扣价,不用四处薅羊毛 文章目录 一、创建机器人二、使用步骤1.输入创建机器人消息/newbot2.机器人命令列表3.查看我的机器人4.php接口调用机器人 ...
    99+
    2023-09-01
    php 微信 开发语言
  • Python调用两个机器人聊天的实战
    目录机器人api接口调用接口封装机器人实现两个机器人聊天聊天文字转语音总结众所周知,现在网上有很多非常智能bushi(智障)的AI机器人接口,利用这些接口,我们可以实现一个机器人,可...
    99+
    2024-04-02
  • VBS如何调用企业微信机器人发定时消息
    小编给大家分享一下VBS如何调用企业微信机器人发定时消息,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!去年在企业微信群当中突然看到多了一个叫多群机器人的东西:企业微信群机器人以为是升级了什么黑科技,看了下说明,原来目前功能...
    99+
    2023-06-08
  • 服务器的工业机器人有哪些系统组成
    这篇文章主要讲解了“服务器的工业机器人有哪些系统组成”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“服务器的工业机器人有哪些系统组成”吧!工业机器人是指广泛用于工业领域的多关节机械手或多自由度...
    99+
    2023-06-26
  • 怎么用Python调用钉钉机器人推送消息
    这篇文章主要讲解了“怎么用Python调用钉钉机器人推送消息”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python调用钉钉机器人推送消息”吧!1.创建钉钉机器人群机器人是钉钉群的高...
    99+
    2023-06-02
  • ASP 健康监控的未来:人工智能和机器学习的力量
    人工智能(AI)和机器学习(ML)的兴起为应用程序服务提供商(ASP)健康监控带来了激动人心的新篇章。这些先进技术通过提供前所未有的洞察力、自动化和效率彻底改变着网络应用程序的性能管理。 洞察力:预测分析和异常检测 AI 和 ML 算法...
    99+
    2024-02-28
    ASP 监控、人工智能、机器学习、预测分析、异常检测
  • 怎么使用Python人工智能构建简单聊天机器人
    今天小编给大家分享一下怎么使用Python人工智能构建简单聊天机器人的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是聊天...
    99+
    2023-07-05
  • Python人工智能实战之对话机器人的实现
    目录背景用到的技术主要流程代码模块Joke对象爬虫抓取笑话代码实现保存到sqlite数据库抓取笑话并保存到数据库背景 当我慢慢的开在高速公路上,宽敞的马路非常的拥挤!这时候我喜欢让...
    99+
    2024-04-02
  • PHP中如何进行工业自动化和机器人控制?
    PHP是一种开源的服务器端脚本语言,它广泛应用于Web开发领域。但是,PHP并不仅限于Web开发,它还可以用于工业自动化和机器人控制。本文将介绍如何使用PHP进行工业自动化和机器人控制。一、PHP在工业自动化中的应用传感器数据采集在工业自动...
    99+
    2023-05-22
    PHP 工业自动化 机器人控制
  • ASP 健康监测的革命:探索人工智能和机器学习的潜力
    实时监测和预测性分析 AI 和 ML 算法可以分析大量数据,包括应用程序日志、性能指标和外部事件,以检测异常模式和预测潜在问题。这些算法可以学习历史趋势和相关性,从而提供早期预警,使 ASP 能够在问题升级之前采取纠正措施。 自动根因分析...
    99+
    2024-04-02
  • Python在机器学习和人工智能领域的应用
    Python作为一种流行的编程语言,因其简洁易读、功能强大和丰富的库支持而被广泛应用于各个领域。特别是在机器学习和人工智能领域,Python凭借其灵活性和高效性成为了主流工具之一。本文...
    99+
    2024-02-22
    人工智能 机器学习 python
  • Python ORM 在人工智能和机器学习中的作用
    Python 对象关系映射 (ORM) 是一种技术,它允许 Python 对象和关系型数据库表之间进行无缝交互。在人工智能 (AI) 和机器学习 (ML) 应用中,ORM 发挥着至关重要的作用,简化了数据访问和管理,并提高了开发效率。 数...
    99+
    2024-03-15
    ORM
  • 怎么调用chatGPT实现代码机器人
    这篇文章主要介绍“怎么调用chatGPT实现代码机器人”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么调用chatGPT实现代码机器人”文章能帮助大家解决问题。获取chatGPT登录Token信息...
    99+
    2023-07-04
  • Python人工智能构建简单聊天机器人示例详解
    目录引言什么是聊天机器人?准备工作创建聊天机器人导入必要的库定义响应集合创建聊天机器人运行聊天机器人完整代码结论展望引言 人工智能是计算机科学中一个非常热门的领域,近年来得到了越来...
    99+
    2023-03-21
    Python构建聊天机器人 Python 人工智能
  • 怎么用Python开发QQ机器人
    这篇文章主要讲解了“怎么用Python开发QQ机器人”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python开发QQ机器人”吧! 前言 虽然该文最终是达到以pyt...
    99+
    2023-06-15
  • python 调用百度文心一言接口开发聊天机器人
    要使用Python调用百度文心一言接口开发聊天机器人,可以按照以下步骤进行: 注册百度智能云账号并创建一个API密钥。安装Python的requests库和BeautifulSoup库。可以使用以下命令进行安装: shellpip ins...
    99+
    2023-09-02
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作