0

I have two files on my project.

  • File number one is responsible for eye-tracking and blinking calculations. It is being run whenever I type in a command in a terminal and it will access my laptop camera: python3 blink.py --shape-predictor shape_predictor_68_face_landmarks.dat Or the second scenario is when I show the path for a video file and it loads that file using this command line: python3 blink.py --shape-predictor shape_predictor_68_face_landmarks.dat --video "path"
  • The second file is my GUI file where the first button on click should run the command line which would require video path. The second button should launch command line which would access my camera.

My question is how do I create a function for those buttons to run those scripts?

First File:

    import argparse
    import time
    import cv2
    import dlib
    import imutils
    import numpy as np
    from imutils import face_utils
    from imutils.video import FileVideoStream, VideoStream
    from scipy.spatial import distance as dist

    def eye_aspect_ratio(eye):
        A = dist.euclidean(eye[1], eye[5])
        B = dist.euclidean(eye[2], eye[4])
        C = dist.euclidean(eye[0], eye[3])
        ear = (A + B) / (2.0 * C)
        return ear

    ap = argparse.ArgumentParser()
    ap.add_argument(
        "-p", "--shape-predictor", required=True, help="path to facial landmark predictor"
    )
    ap.add_argument("-v", "--video", type=str, default="", help="path to input video file")
    args = vars(ap.parse_args())

    EYE_AR_THRESH = 0.3
    EYE_AR_CONSEC_FRAMES = 3

    COUNTER = 0
    TOTAL = 0

    print("[INFO] loading facial landmark predictor...")
    detector = dlib.get_frontal_face_detector()
    predictor = dlib.shape_predictor(args["shape_predictor"])

    (lStart, lEnd) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"]
    (rStart, rEnd) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"]

    print("[INFO] starting video stream thread...")
    vs = FileVideoStream(args["video"]).start()
    fileStream = True
    vs = VideoStream(src=0).start()
    fileStream = False
    time.sleep(1.0)

    while True:

        if fileStream and not vs.more():
            break

        frame = vs.read()
        frame = imutils.resize(frame, width=800)
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        rects = detector(gray, 0)

        for rect in rects:

            shape = predictor(gray, rect)
            shape = face_utils.shape_to_np(shape)

            leftEye = shape[lStart:lEnd]
            rightEye = shape[rStart:rEnd]
            leftEAR = eye_aspect_ratio(leftEye)
            rightEAR = eye_aspect_ratio(rightEye)

            ear = (leftEAR + rightEAR) / 2.0

            leftEyeHull = cv2.convexHull(leftEye)
            rightEyeHull = cv2.convexHull(rightEye)
            cv2.drawContours(frame, [leftEyeHull], -1, (0, 255, 0), 1)
            cv2.drawContours(frame, [rightEyeHull], -1, (0, 255, 0), 1)

            if ear < EYE_AR_THRESH:
                COUNTER += 1

            else:

                if COUNTER >= EYE_AR_CONSEC_FRAMES:
                    TOTAL += 1

                COUNTER = 0

            cv2.putText(
                frame,
                "Sumirksejimai/Min: {}".format(TOTAL),
                (10, 30),
                cv2.FONT_HERSHEY_SIMPLEX,
                0.7,
                (0, 0, 255),
                2,
            )
            cv2.putText(
               frame,
            #   "EAR: {:.2f}".format(ear),
               (300, 30),
               cv2.FONT_HERSHEY_SIMPLEX,
               0.7,
               (0, 0, 255),
               2,
            )

        cv2.imshow("Frame", frame)
        key = cv2.waitKey(1) & 0xFF

        if key == ord("q"):
            break

        cv2.destroyAllWindows()
        vs.stop()

Second File:

    from sqlite3 import Row
    from tkinter import *

    window = Tk()
    window.title('GAtracker')

    logo = PhotoImage(file='C:\\Users\\plytn\\Downloads\\blink\\logo.PNG')

    def camera():
        window.title('GAtracker - Camera')

    buttonVideo = Button(window, text="Pradėti naudojant vaizdo įrašą")
    buttonCamera = Button(window, text="Pradėti naudojant kamerą", command=camera)

    buttonVideo.grid(row=1, column=0)
    buttonCamera.grid(row=1, column=1)

    gaLogo = Label(image=logo)
    gaLogo.grid(row=0, column=0, columnspan=2)


    window.mainloop()
0

1 Answer 1

0

You can follow this syntax to deliver a callback for the button view:

btn_nav = Button(window, text="Start Nav System", command=btn_nav_handler)
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.