如何从 "USB3 Vision" 设备获取视频?

how to get video from a "USB3 Vision" device?

我正在尝试通过 Python Tkinter 从这个显微镜设备获取相机信号。

我试过使用cv2 VideoCapture函数,但是没有显示图像。

class RunningStatusFrame(ttk.Frame):
    def __init__(self, parent):
        ttk.Frame.__init__(self, parent)
        self.parent = parent

        ################## Camera Feed ##################
        self.camera_frame = LabelFrame(self, text="Camera Feed",
                                    width=800, height=600)
        self.camera_frame.grid(row=0, column=0, columnspan=2)

        self.camera_feed = Label(self.camera_frame)
        self.camera_feed.pack(fill=BOTH)

        self.progress = IntVar(self)
        self.cam = cv2.VideoCapture(0)
        self.showFrame()

        ################## Progress Bar #################
        self.progress_bar = ttk.Progressbar(self,
                                orient=HORIZONTAL,
                                length=150,
                                maximum=100,
                                mode='determinate',
                                variable=self.progress)
        self.progress_bar.grid(row=1, column=0, columnspan=2)

        ################## Laser Status ##################
        Label(self, text="    Laser:").grid(row=2, column=0, sticky=E)
        self.laser_status = Label(self, text="ON", fg="#f00")
        self.laser_status.grid(row=2, column=1, sticky=W)

        self.updateInfo()

    def updateInfo(self):
        '''
        Function to update information.
        '''
        if self.parent.parent.select() == ".!notebook.!autorunframe":
            pass
        self.after(300, self.updateInfo)

    def showFrame(self):
        '''
        Update camera feed.
        '''
        frame = self.cam.read()
        if frame[0] == False:
            return None
        frame = imutils.resize(frame[1], width=400)
        cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

        img = Image.fromarray(cv2image)
        imgtk = ImageTk.PhotoImage(image=img)

        self.camera_feed.imgtk = imgtk
        self.camera_feed.configure(image=imgtk)
        self.camera_feed.after(20, self.showFrame)
    
    def setProgress(self, value):
        '''
        Changes progress bar status.
        '''
        self.progress.set(value)

这适用于我笔记本电脑的网络摄像头,但不知何故(可能因为我的显微镜是成像设备)它没有显示任何内容。 有人做过这样的事情吗? 如有任何建议,我们将不胜感激!

谢谢

您有一个 “USB3 Vision” 设备。

“USB3 Vision”是一个特定的行业标准,但不是 USB 标准的一部分。

USB3 Vision 不是网络摄像头。 USB 网络摄像头是统一视频 Class (UVC),一种在标准中指定的设备 class。

Windows当然没有USB3 Vision的驱动。它只带有 UVC。

您需要与制造商联系并为您的视频设备获取驱动程序。然后该驱动程序可能仍未在 Windows 媒体 API 中显示为视频设备,但您可能必须直接与驱动程序对话。

可以 尝试带有 cv.CAP_XIMEA 标志的 VideoCapture...但我从未尝试过。 XIMEA 制造支持 USB3 Vision 的设备。如果幸运的话,XIMEA 的 OpenCV videoio 后端可能 也适用于您的设备。

一定要看看 Micka 上面的评论。他给我的印象是对这些设备了如指掌。