Open an Alert dialog box while clicking on the camera icon button if the the camera is not open yet in kivymd

Question:

I’m beginner in Kivy, I make a screen which has an image in which a camera live feed is fitted and 2 buttons the 1st start camera which open the webcam and the 2nd is the icon button to take a picture and store it locally but the problem is that if i clicked the icon button before clicking the start camera it give me this error.

cv2.imwrite(image_name, self.image_frame)
 AttributeError: 'WebCamScreen' object has no attribute 'image_frame'

So , how should i put a dialogbox or some other condition to tell the user to start camera first.

Here is my WebCamScreen code

class WebCamScreen(Screen):
    def do_start(self):
        self.capture = cv2.VideoCapture(0)
        Clock.schedule_interval(self.load_video, 1.0 / 24.0)

    def load_video(self, *args):
        ret, frame = self.capture.read()
        self.image_frame = frame
        # frame = frame[220:220+250, 400:400+250, :]
        buffer = cv2.flip(frame, 0).tostring()
        image_texture = Texture.create(size=(frame.shape[1], frame.shape[0]), colorfmt="bgr")
        image_texture.blit_buffer(buffer, colorfmt="bgr", bufferfmt="ubyte")
        self.ids.img.texture = image_texture

    def capture_image(self):
        image_name = "first_pic.jpg"
        cv2.imwrite(image_name, self.image_frame)

and kv code is below

<WebCamScreen>
    MDFloatLayout:
        MDRaisedButton:
            text: "Start Camera"
            size_hint_x: None
            size_hint_y: None
            md_bg_color: "orange"
            pos_hint: {"center_x": 0.5, "center_y": 0.95}
            on_release:
                root.do_start()
            
        Image:
            id: img
            size_hint_x: 0.85
            size_hint_y: 0.5
            pos_hint: {"center_x": 0.5, "center_y": 0.6}
            
        MDIconButton:
            icon: "camera"
            md_bg_color: "orange"
            pos_hint: {"center_x": .5, "center_y": .2}
            on_release:
                root.capture_image() 
Asked By: Jamal Khan

||

Answers:

You can put that line that causes the exception in a try block. And in the except block display a Popup.

Or you can disable the capture_image Button, and enable it from within the load_video() method.

Answered By: John Anderson
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.