目前缺芯的大环境也影响到工业相机上面了,使用支持国产海康机器人的工业相机进行视觉开发是不错的替代方案。价格交期很是感人呐!

参考文章 python调用海康工业相机并用opencv显示(整体实现)
博主写的很全面非常好。
PyQt显示相机图像本文推荐另一种方法“将numpy array 先转化为 Pillow image 再转化为Pixmap” 并用来显示。
主要步骤:
(1)HikRobot 官网下载安装“机器视觉工业相机客户端MVS V3.3.1(Windows)”, 下载链接。
(2)安装后参考官网自带的Python demo, 默认安装文件夹为C:\Program Files (x86)\MVS\Development\Samples\Python
(3)下面的代码设置了相机的曝光时间、外触发Line0,以及查看曝光时间。另外外触发使用1.5V干电池触发没有反映,3V干电池就可以了。
后面就自己在UI里面增加控制相机和按钮了,多相机同样如此。
博主QQ 562604218 欢迎沟通交流。

import threading
from datetime import datetime
import cv2
import numpy as np
from PIL import Image
from PyQt5 import QtCore
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtWidgets import QLabel, QApplication, QWidget
from PyQt5.QtCore import Qt
from MvCameraControl_class import *
class Mainwindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.setObjectName("MainWindow")
        self.resize(800, 600)
        self.label1 = QLabel(self)
        self.label1.setAlignment(Qt.AlignCenter)
        self.label1.setGeometry(QtCore.QRect(70, 70, 561, 451))
    def closeEvent(self, event) -> None:
        # close camera
        # ch:停止取流 | en:Stop grab image
        ret = cam.MV_CC_StopGrabbing()
        if ret != 0:
            print("stop grabbing fail! ret[0x%x]" % ret)
            sys.exit()
        # ch:关闭设备 | Close device
        ret = cam.MV_CC_CloseDevice()
        if ret != 0:
            print("close deivce fail! ret[0x%x]" % ret)
            sys.exit()
        # ch:销毁句柄 | Destroy handle
        ret = cam.MV_CC_DestroyHandle()
        if ret != 0:
            print("destroy handle fail! ret[0x%x]" % ret)
            sys.exit()
        event.accept()  # close app
        print('Exit success')
    def run(self) -> None:
        stOutFrame = MV_FRAME_OUT()
        memset(byref(stOutFrame), 0, sizeof(stOutFrame))
        while True:
            ret = cam.MV_CC_GetImageBuffer(stOutFrame, 10000000)
            if None != stOutFrame.pBufAddr and 0 == ret:
                print("get one frame: Width[%d], Height[%d], nFrameNum[%d]" % (
                stOutFrame.stFrameInfo.nWidth, stOutFrame.stFrameInfo.nHeight, stOutFrame.stFrameInfo.nFrameNum))
                pData = (c_ubyte * stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight)()
                cdll.msvcrt.memcpy(byref(pData), stOutFrame.pBufAddr,
                                   stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight)
                data = np.frombuffer(pData, count=int(stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight),
                                     dtype=np.uint8)
                # image numpy array
                image = data.reshape((stOutFrame.stFrameInfo.nHeight, stOutFrame.stFrameInfo.nWidth))
                print('image shape:', image.shape)
                # image_show = QImage(image, stOutFrame.stFrameInfo.nWidth, stOutFrame.stFrameInfo.nHeight, QImage.Format_Indexed8)
                # 显示图片
                h, w = main.label1.height(), main.label1.width()
                # 方式一 将numpy array 先转化为 Pillow image 再转化为Pixmap
                frame = Image.fromarray(image).toqpixmap().scaled(w, h)
                # 方式二 将numpy array 先转化为 QImage 再转化为Pixmap, 灰度图使用image.copy()
                # RGB picture
                #h, w = window.current_image_lb.height(), window.current_image_lb.width()
    			#qimage = QImage(img, img.shape[1], img.shape[0], 3*img.shape[1], QImage.Format_RGB888)
    			#frame = QPixmap.fromImage(qimage).scaled(w, h)
                # image_show = QImage(image.copy(), stOutFrame.stFrameInfo.nWidth, stOutFrame.stFrameInfo.nHeight,
                #                     QImage.Format_Indexed8)
                # frame = QPixmap.fromImage(image_show).scaled(w, h)
                # GUI 显示图片
                main.label1.setPixmap(frame)
                now = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
                if not os.path.exists(f'C:/Packing_pic/{now[0:10]}'):
                    os.makedirs(f'C:/Packing_pic/{now[0:10]}', exist_ok=True)
                cv2.imwrite(f"C:/Packing_pic/{now[0:10]}/{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.jpeg", image)
                # 将 pstFrame 内的数据指针权限进行释放
                cam.MV_CC_FreeImageBuffer(stOutFrame)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = Mainwindow()
    main.show()
    deviceList = MV_CC_DEVICE_INFO_LIST()
    tlayerType = MV_GIGE_DEVICE | MV_USB_DEVICE
    # ch:枚举设备 | en:Enum device
    ret = MvCamera.MV_CC_EnumDevices(tlayerType, deviceList)
    print("Find %d devices!" % deviceList.nDeviceNum)
    cam_dict = {}
    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_USB_DEVICE:  # USB camera
            strSerialNumber = ""
            for per in mvcc_dev_info.SpecialInfo.stUsb3VInfo.chSerialNumber:
                if per == 0:
                    break
                strSerialNumber = strSerialNumber + chr(per)
            print("user serial number: %s" % strSerialNumber)
        cam_dict[strSerialNumber] = i
    cam_sn = ['00E53763769']
    # ch:创建相机实例 | en:Creat Camera Object
    cam = MvCamera()
    # ch:选择设备并创建句柄 | en:Select device and create handle
    stDeviceList = cast(deviceList.pDeviceInfo[cam_dict[cam_sn[0]]], 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:设置触发模式为on, 硬件触发 | en:Set trigger mode as on
    cam.MV_CC_SetEnumValue("TriggerMode", MV_TRIGGER_MODE_ON)
    # set Exposure_time
    cam.MV_CC_SetFloatValue("ExposureTime", 500.0)
    # get Exposure_time
    stFloatValue = MVCC_FLOATVALUE()
    memset(byref(stFloatValue), 0, sizeof(MVCC_FLOATVALUE))
    cam.MV_CC_GetFloatValue("ExposureTime", stFloatValue)
    print('Exposure_time:', stFloatValue.fCurValue)
    # set triggersource line0
    cam.MV_CC_SetEnumValue("TriggerSource", MV_TRIGGER_SOURCE_LINE0)
    # ch:开始取流 | en:Start grab image
    cam.MV_CC_StartGrabbing()
    save_pic = Getimage_save()
    save_pic.setDaemon(True)
    save_pic.start()
    sys.exit(app.exec_())
                    目前缺芯的大环境也影响到工业相机上面了,使用支持国产海康机器人的工业相机进行视觉开发是不错的替代方案。价格交期很是感人呐!参考文章python调用海康工业相机并用opencv显示(整体实现)博主写的很全面非常好。PyQt显示相机图像本文推荐另一种方法“将numpy array 先转化为 Pillow image 再转化为Pixmap” 并用来显示。主要步骤:(1)HikRobot 官网下载安装“机器视觉工业相机客户端MVS V3.3.1(Windows)”, 下载链接。(2)安装后参考官网自.
				
你好!这是一段使用 Python 控制康威相机的示例代码: import requests# 康威相机的 IP 地址 camera_ip = '192.168.1.10' # 登录相机 url = f'http://{camera_ip}/ISAPI/Security/userCheck' data = { 'username': 'admin', 'password':...
文章目录前言参考链接环境设置相机控制与数据获取数据格式转换常见问题 随着python这们语言不断深入发展,那么python调用工业相机也成为了一项流行的需求; 本文了就简单梳理下工业相机python的使用 搬砖了一些写的好的文章做参考 机器人工业相机sdk简介 工业相机Python调用实现连续实时拍照 工业相机参数设置与获取 先安装MVS,下载地址 机器人官网,SDK简介也可以看看上面的引用博客 条件:Python+官方的mvs文件下的developmen
linux版本环境比较麻烦,要注意自己的硬件系统是x86还是ARM等等, 我个人是ubuntu18 https://www.hikrobotics.com/cn/machinevision/service/download?module=0在官方下载其linux版本的MVS,下载完成后有很多版本的,根据自己电脑是x86或者arm来选择解压,同时在其中文文档中根据要求需要配置好环境变量!!! 文件夹中的文档给出了命令行 可以在终端中输入export查看环境变量是否导入了路径 第一次添加环境变量后需要重启(这点可能因人而异) 压缩包中有两个文件夹 一个是直接运行的脚本 一个是封装成类 根据需要自取,运行hik2cv.py即可
通过python调用康威工业摄像头并进行图像存储问题(数据流获取问题未能解决) 先说情况,本人是做觉检测的需要高倍率摄像头进行实时检测,也就是需要深度学习进行图片数据处理,但是这个又是python来进行分析,而康威主要程序代码是以C为主的,传过来的数据我也尝试的去解析都是不能转化成python的BGR图像。 具体参照了:通过cv2调用康威摄像头,但这个不能调用工业摄像头,通过官方给一个400什么软件要激活摄像头,可是却并不能检测到工业摄像头,通过mvs软件调用到摄像头地址进行测试也无法获取到摄
因为项目的原因,笔者需要利用程序来实时调用工业相机,而不是简单的利用的驱动来调用相机。 在经历了反复的踩坑填坑之后,笔者总结了利用c#和python调用相机的两种方法 一、准备工作 无论是用c#还是python,都是要通过的SDK来进行二次开发的。的SDK相当于一个库,里面有各种用于相机的函数,这些函数被封装成供各大编程语言使用。所以,要想利用python或者c#与进行实时交互,就 RuntimeError: bool value of Tensor with more than one value is ambiguous loss = nn.CrossEntropy... 22735 PyQt5 qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in ““ even though it was found. txt_f = open(txt_file, 'w') FileNotFoundError: [Errno 2] No such file or directory: './test_result\\ m0_58781907: +1我也还是报错 树梅派QT运行海康工业相机 error while error while loading shared libraries: libMvCameraControl.so: cannot open Deepstream使用Rabbitmq 和kafka发送消息(天坑)unable to connect to broker library