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

问题描述 投票:0回答:1

我正在尝试通过 Python Tkinter 从该显微镜设备获取相机反馈。

enter image description here

我尝试过使用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)

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

谢谢你

python opencv computer-vision camera
1个回答
3
投票

您有一个 “USB3 Vision” 设备。

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

USB3 Vision 不是网络摄像头。 USB 网络摄像头属于统一视频类 (UVC),这是标准中指定的设备类。

Windows 当然不附带 USB3 Vision 的驱动程序。它仅配备 UVC。

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

可以尝试带有

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

一定要看看 Micka 上面的评论。他给我的印象是他对这些设备非常了解。

© www.soinside.com 2019 - 2024. All rights reserved.