Browse Source

Handle scenario where VideoCapture fails to open

Hugo Cachitas 8 years ago
parent
commit
b9d6e712d1

+ 5 - 2
examples/pyqt5_opencv/app/camera.py

@@ -12,10 +12,13 @@ class CameraDevice(QObject):
     def __init__(self, device_id=-1):
         super().__init__()
         self.capture = cv2.VideoCapture(device_id)
-
         self.timer = QTimer()
+
+        if not self.capture.isOpened():
+            raise ValueError("Device not found")
+
         self.timer.timeout.connect(self.read_frame)
-        self.timer.setInterval(1000/self.fps)
+        self.timer.setInterval(1000 / self.fps)
         self.timer.start()
 
     def __del__(self):

+ 8 - 6
examples/pyqt5_opencv/app/main.py

@@ -21,12 +21,14 @@ class MainWindow(QMainWindow):
 
         self.thread = QThread()
 
-        self.camera = CameraDevice()
-        self.camera.frame_ready.connect(self.update_video_label)
-
-        self.ui.video.setMinimumSize(*self.camera.size)
-
-        self.camera.moveToThread(self.thread)
+        try:
+            self.camera = CameraDevice()
+        except ValueError:
+            self.ui.video.setText("Device not found!\n\nIs FFMPEG available?")
+        else:
+            self.camera.frame_ready.connect(self.update_video_label)
+            self.ui.video.setMinimumSize(*self.camera.size)
+            self.camera.moveToThread(self.thread)
 
     @pyqtSlot(QImage)
     def update_video_label(self, image):

+ 1 - 1
examples/pyqt5_opencv/app/mainwindow.ui

@@ -18,7 +18,7 @@
     <item row="0" column="0">
      <widget class="QLabel" name="video">
       <property name="styleSheet">
-       <string notr="true">background-color: 'black';</string>
+       <string notr="true">background-color: 'black'; color: 'white'</string>
       </property>
       <property name="frameShape">
        <enum>QFrame::NoFrame</enum>